Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools
Zurück   Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools > Metatrader 4 > Programmierung MQL4

Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4.


Portalsuche


Werbung

Login
Benutzername:
Kennwort:


Statistik
Themen: 3824
Beiträge: 36933
Benutzer: 6.074
Aktive Benutzer: 494
Links: 80
Wir begrüßen unseren neuesten Benutzer: hmf44
Mit 483 Benutzern waren die meisten Benutzer gleichzeitig online (21.04.16 um 17:12).
Neue Benutzer:
vor 14 Stunden
- hmf44
vor 17 Stunden
- Crossa
vor 19 Stunden
- snatshit
vor einem Tag
- Roerich
vor einem Tag
- John_Liver...

Onlineuser
'Wer ist online' anzeigen Benutzer: 0
Gäste: 32
Gesamt: 32
Team: 0
Team:  
Benutzer:  
Freunde anzeigen

Empfehlungen

Werbung

Like Tree1Likes
  • 1 Post By traderdoc
Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 06.09.14
Neues Mitglied
 
Registriert seit: Sep 2014
Ort: Berlin
Beiträge: 4
Marlak befindet sich auf einem aufstrebenden Ast
Standard "Fehler im Code"

Hallo..
.. ich bin ganz frisch hier und habe seid über 10 Jahren nix mehr programmiert. Nun habe ich ein Video in Youtube gefunden und ich wollte das Teil nachprogrammieren einige Fehler konnte ich selbstständig korrigieren jedoch bei einem abschnitt weiss ich nicht weiter. Die Fehlermeldung lautet:

return value of 'OrderSelect' should be checked

hier mein code:

offeneOrders = 0;
anzahlOrders = OrdersTotal();
for(zaehler=0; zaehler<anzahlOrders;zaehler++)
{OrderSelect(zaehler,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol())
{if(OrderMagicNumber()==Magicnummer){offeneOrders+ +;}}
}

kann mir jemand bitte sagen was ich da vergeigt habe, wäre ganz net
  #2 (permalink)  
Alt 06.09.14
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 1.875
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

offeneOrders = 0;
anzahlOrders = OrdersTotal();
for(zaehler=0; zaehler<anzahlOrders;zaehler++)
{if(OrderSelect(zaehler,SELECT_BY_POS,MODE_TRADES) )
{if(OrderSymbol()==Symbol())
{if(OrderMagicNumber()==Magicnummer) offeneOrders++;
}
}
}


traderdoc
Marlak likes this.
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #3 (permalink)  
Alt 07.09.14
Neues Mitglied
 
Registriert seit: Sep 2014
Ort: Berlin
Beiträge: 4
Marlak befindet sich auf einem aufstrebenden Ast
Standard Ich bin's wieder...

... jetzt habe ich ein neues Problem.
hier erstmal mein Code:

//Order aufgeben
if (ACCOUNT_PROFIT < -100){Lots=1;}
if (ACCOUNT_PROFIT > 100){Lots=4;}
if (Kauf>0 && offeneOrders == 0)
{if (Signal == "LONG")
{ticket=OrderSend(Symbol(),OP_BUY,Lots,Kauf,30,Sto pkurs,Kursziel,"MA Cross",Magicnummer,Green);
if (ticket>0)
{if (OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("Profit: ",OrderProfit);}
else Print("fehlerhaft Entry: ", GetLastError(), Kauf);}}
return;
{if (Signal == "SHORT")
{ticket=OrderSend(Symbol(),OP_SELL,Lots,Kauf,30,St opkurs,Kursziel,"MA Cross",Magicnummer,Red);
if (ticket<0)
{if (OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("Profit: ",OrderProfit);}
else Print("fehlerhaft Entry: ", GetLastError(), Kauf);}}
return;

return;

--------------
Problem Nummer 1: obwohl dieser EA im Backtest ein Positives Ergebniss generiert geht er nur Longs ein. Wo liegt mein Fehler?
Problem Nummer 2: ich möchte gern das wenn der Verlust oder Gewinn eine bestimmte Menge erreicht hat soll die Positionsgröße geändert werden. Wie kann ich das am besten anstellen?

Wäre toll wenn sich jemand meinen kleinen Problemchen annehmen könnte.
  #4 (permalink)  
Alt 07.09.14
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 1.875
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Code:
ACCOUNT_PROFIT = 0;
for(int i = 0; i < OrdersTotal(); i++) {
   if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol() == Symbol()) {   //falls der Profit für den gesamten Account berechent werden soll, muß diese Zeile entfernt werden
         ACCOUNT_PROFIT += OrderProfit() + OrderSwap() + OrderCommission();
      }
   }
}
Lots = Irgendetwas;        //für die Fälle, dass ACCOUNT_PROFIT >= -100 und <= 100 ist
if (ACCOUNT_PROFIT < -100) Lots=1;
if (ACCOUNT_PROFIT > 100) Lots=4;
if (Kauf>0 && offeneOrders == 0) {   //Kauf > 0???
   if (Signal == "LONG") {
      ticket=OrderSend(Symbol(),OP_BUY,Lots,Kauf,30,Stopkurs,Kursziel,"MA Cross",Magicnummer,Green);
   }
   if (Signal == "SHORT") {     
      ticket=OrderSend(Symbol(),OP_SELL,Lots,Kauf,30,Stopkurs,Kursziel,"MA Cross",Magicnummer,Red);
   }
}
Die Variable Kauf mit dessen Wert, der dem aktuellen Kaufpreis entspricht, ist immer > 0!, weil es keinen Preis gibt, der <= 0 ist.

An Deinem hier vorliegenden Codesschipsel kann es nicht liegen, dass er nur Buy-Orders öffnet. Entweder daran: if (Signal == "SHORT"), oder an ungültigen Übergaben von Lots, StopKurs bzw. Kursziel.

Und in Zukunft den Code immer über die oben stehende Auswahl: # eingeben.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #5 (permalink)  
Alt 07.09.14
Neues Mitglied
 
Registriert seit: Sep 2014
Ort: Berlin
Beiträge: 4
Marlak befindet sich auf einem aufstrebenden Ast
Standard

Ich kann den Fehler einfach nicht finden, warum der EA keine Short's eingeht,
vielleicht kann mal ein anderer rüber schauen wo der Fehler ist.

Code:
//+------------------------------------------------------------------+
//|                                                     MA Cross.mq4 |
//|                                                           Marlak |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Marlak"
#property link      ""
#property version   "1.00"
#property strict

extern int ATR=14, Gleitener_Durchschnitt=50;
extern double Standardhandelsgroesse=10, Multiplikator=2.618, CRV=3;
string Signal;
double risk1, Kursziel, gewinn, Lots, Stopkurs, Kauf, OrderProfit;
int offeneOrders, anzahlOrders, zaehler, ticket;
int Magicnummer= 001;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
     
//Variablen
   double ma = iMA(NULL,5,Gleitener_Durchschnitt,0,MODE_SMA,PRICE_CLOSE,0);
   double malang = iMA(NULL,240,Gleitener_Durchschnitt,0,MODE_SMA,PRICE_CLOSE,0);
      if (Close[1] > ma && ma > malang){Signal="LONG";}
      if (Close[1] < ma && ma < malang){Signal="Short";}
   Comment ("Signal: "+Signal);
//Einstieg;Ziel;Stop
      risk1 = iATR(NULL,5,ATR,0)*Multiplikator;
      gewinn = risk1* CRV;
      //Risikobewertung
      if (risk1 >50) {Lots=0;}
      if (risk1 <=50) {Lots=Standardhandelsgroesse*0.1;}
         if (risk1 <=40) {Lots=Standardhandelsgroesse*0.3;}
            if (risk1 <=30) {Lots=Standardhandelsgroesse*0.5;}
               if (risk1 <=20) {Lots=Standardhandelsgroesse*0.7;}
                  if (risk1 <=10) {Lots=Standardhandelsgroesse*0.9;}
      if (Signal == "LONG")
         {Kauf = Bid;
          Kursziel = Kauf+gewinn;
          Stopkurs = Kauf-risk1;}
      if (Signal == "Short")
         {Kauf = Ask;
          Kursziel = Kauf-gewinn;
          Stopkurs = Kauf+risk1;}
//Prüfen ob Orders oder Positionen im Markt liegen
offeneOrders = 0;
anzahlOrders = OrdersTotal();
      for(zaehler=0; zaehler<anzahlOrders;zaehler++)
         {if(OrderSelect(zaehler,SELECT_BY_POS,MODE_TRADES) )
            {if(OrderSymbol()==Symbol())
               {if(OrderMagicNumber()==Magicnummer) offeneOrders++;}}}
//Order aufgeben
      if (Kauf>0 && offeneOrders == 0)
         {if (Signal == "LONG")
             {ticket=OrderSend(Symbol(),OP_BUY,Lots,Kauf,30,Stopkurs,Kursziel,"MA Cross",Magicnummer,clrBlueViolet);
               if (ticket>0)
                  {if (OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("Profit: ",OrderProfit);}
                   else Print("fehlerhaft Entry: ", GetLastError(), Kauf);}}
          return;
         {if (Signal == "Short")
             {ticket=OrderSend(Symbol(),OP_SELL,Lots,Kauf,30,Stopkurs,Kursziel,"MA Cross",Magicnummer,clrBlueViolet);
               if (ticket>0)
                  {if (OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("Profit: ",OrderProfit);}
                   else Print("fehlerhaft Entry: ", GetLastError(), Kauf);}}
          return;
return;
  }
//+------------------------------------------------------------------+
  #6 (permalink)  
Alt 07.09.14
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 1.875
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Code:
if (Signal == "LONG")
         {Kauf = Bid;
          Kursziel = Kauf+gewinn;
          Stopkurs = Kauf-risk1;}
      if (Signal == "Short")
         {Kauf = Ask;
          Kursziel = Kauf-gewinn;
          Stopkurs = Kauf+risk1;}
Ein Fehler liegt auf jeden Fall in der falschen Zuweisung der Kaufkurse.
Richtig wäre:
Code:
if (Signal == "LONG")
         {Kauf = Ask;
          Kursziel = Kauf+gewinn;
          Stopkurs = Kauf-risk1;}
      if (Signal == "Short")
         {Kauf = Bid;
          Kursziel = Kauf-gewinn;
          Stopkurs = Kauf+risk1;}
traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #7 (permalink)  
Alt 07.09.14
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 1.875
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Desweiteren sollten double-Ergebnisse v.a. nach Multiplikation bzw. Division mit NormalizeDouble(Wert, Digits) auf die Digits-Kommastelle normiert werden. Das ist v.a. für die OrderSend()-Funktion wichtig.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
Thema geschlossen

Lesezeichen

Stichworte
code, ea, expert advisor, fehler code, mql4, nachprogrammieren, programmierung, programmierung metatrader, youtube, youtube video, youtube.com


Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus




Alle Zeitangaben in WEZ +1. Es ist jetzt 05:41 Uhr.



Der Wavesnode - Spam Firewall
-----------------------------------------------------------------------------------------------------------------------------
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Powered by vBCMS® 2.7.0 ©2002 - 2017 vbdesigns.de
SEO by vBSEO 3.6.1
Copyright ©2009 - 2017 by Expert-Advisor.com - Das Metatrader Forum
MetaTrader bzw. MetaTrader 4 und MetaTrader 5 sind eingetragene Marken der MetaQuotes Software Corp.
-----------------------------------------------------------------------------------------------------------------------------