|
Startseite | Registrieren | Hilfe | Benutzerliste | Kalender | Suchen | Heutige Beiträge | Alle Foren als gelesen markieren |
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
Da hat sich wohl der Fehlerteufel eingeschlichen.
Du hast die FOR-Schleife nicht original übernommen. Sie muss so anfangen: for(int i = OrdersTotal()-1; i >= 0; i--) Gruß naranjoe |
|
|||
Jo danke, daran lags.
Ich hab die Indexverschiebung angewand bevor ich den Code richtig verstanden gehabt hatte^^ |
|
|||
Hallo,
Ich bin neu in EA Programmieren und Lese hier alles was ich finde. Eins versteh ich nicht was das Void immer zusagen hat?. Ich wollte den Breakeven bei mir einsetzen aber irgendwie funktioniert es nicht ! Vieleicht könnte ein Profi mal drüber schauen. HTML-Code:
extern double UpdateToBE = 10 ; bool LongTrade,ShortTrade; //Globale Variablen string Signal; datetime PeriodenStartzeit; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ void UpdateBE() { //---Überprüfen der Starzeit PeriodenStartzeit = Time[0]; //---Breakeven Starten ///-----+++ Break Even setzen { if(UpdateToBE <= 0) return; for(int i = OrdersTotal()-1; i >= 0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if(OrderType() == OP_BUY && OrderOpenPrice() > OrderStopLoss() && Bid - OrderOpenPrice() >= UpdateToBE * Point) { OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), 0); } if(OrderType() == OP_SELL && OrderOpenPrice() < OrderStopLoss() && OrderOpenPrice() - Ask >= UpdateToBE * Point) { OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), 0); } } } } return; } |
|
|||
Code:
extern double UpdateToBE = 10 ; bool LongTrade, ShortTrade; string Signal; datetime PeriodenStartzeit; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ void UpdateBE() { //---Überprüfen der Starzeit PeriodenStartzeit = Time[0]; //---Breakeven Starten ///-----+++ Break Even setzen if(UpdateToBE <= 0) return; for(int i = OrdersTotal()-1; i >= 0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if(OrderType() == OP_BUY && OrderOpenPrice() > OrderStopLoss() && Bid - OrderOpenPrice() >= UpdateToBE * Point) { OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), 0); } if(OrderType() == OP_SELL && OrderOpenPrice() < OrderStopLoss() && OrderOpenPrice() - Ask >= UpdateToBE * Point) { OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), 0); } } } return; } Als Zweites solltest Du Dir mal angewöhnen eine klare Struktur zu schreiben und immer entsprechend einrücken. void bedeutet nur "leer" bzgl. der Rückgabe von Funktionsergebnissen, im Gegensatz zu int Funktion(), bool Funktion(), double Funktion oder string Funktion(). In diesen Fällen wird die Rückgabe einer entsprechend deklarierten Variable erwartet. traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
Danke für deine Antwort woran erkennt man wie viel Digit meiner hat? am EUR/USD zb. ? (Nachkomma stellen ) ?
|
|
|||
Genau, 4-DigitBroker geben in den Kurse 4 bzw. 2 Kommastellen aus und 5-DigitBroker demnach 5 bzw. 3.
Beim 5-DigitBroker würden Deine angedachten 10 Pips in der Variablen UpDateToBE nur 1Pip entsprechen. traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
Ok dann ist es ein 4 Digit Brokker, weil dax zb. 9800,5 und Eur/Dollar 1,3290
Ich hab das wie folgt reingebaut ist das ok ? HTML-Code:
extern double UpdateToBE = 10 ; bool LongTrade,ShortTrade; //Globale Variablen string Signal; datetime PeriodenStartzeit; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int init() { //---Überprüfen der Starzeit PeriodenStartzeit = Time[0]; ///-----+++ Break Even setzen { { if(Digits == 4) { UpdateToBE = UpdateToBE * 10; } if(UpdateToBE <= 0) return(0); for(int i = OrdersTotal()-1; i >= 0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if(OrderType() == OP_BUY && OrderOpenPrice() > OrderStopLoss() && Bid - OrderOpenPrice() >= UpdateToBE * Point) { OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), 0); } if(OrderType() == OP_SELL && OrderOpenPrice() < OrderStopLoss() && OrderOpenPrice() - Ask >= UpdateToBE * Point) { OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), 0); } } } return(0); |
|
|||
Wenn es ein 4Digit-Broker ist, dann darf nicht! mit 10 multipliziert werden, sondern nur bei 5-DigitBrokern!
Die Abfrage müßte richtig lauten: int Multiplier = 1; if (Digits == 3 || Digits == 5) Multiplier = 10; Desweiteren steht plötzlich die eigene Funktion in der Funktion init(). Diese wird aber nur zur Initialisierung des Programms einmalig durchlaufen. Deine Funktion gehört in die Funktion start(). traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
Gut hab das so Übernommen und ein bisschen eingerückt.
Hab das in die start Funktion geschoben nur das bei mir steht void OnTick() ist das ok ?? sieht jetzt so aus besser? HTML-Code:
int Multiplier = 1; { if (Digits == 3 || Digits == 5) Multiplier = 10; if(Multiplier <= 0) return; for(int i = OrdersTotal()-1; i >= 0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if(OrderType() == OP_BUY && OrderOpenPrice() > OrderStopLoss() && Bid - OrderOpenPrice() >= Multiplier * Point) { OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), 0); } if(OrderType() == OP_SELL && OrderOpenPrice() < OrderStopLoss() && OrderOpenPrice() - Ask >= Multiplier * Point) { OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), 0); } } } } |
|
|||
if(OrderType() == OP_BUY && OrderOpenPrice() > OrderStopLoss() && Bid - OrderOpenPrice() >= Multiplier * Point)
{ OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), 0); } if(OrderType() == OP_SELL && OrderOpenPrice() < OrderStopLoss() && OrderOpenPrice() - Ask >= Multiplier * Point) Da soll doch bestimmt das hin: ....>= UpdateToBE * Multiplier * Point) traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
Lesezeichen |
Stichworte |
breakeven, mql4, programmierung, sl, stoploss, trailingstop |
Themen-Optionen | Thema durchsuchen |
Ansicht | |
|
|