Hilfe bei der Codierung - Seite 483

 

Oh Mann, du bist wirklich ein Star. Ich liebe es, zu handeln, aber es wäre unmöglich, ohne Ihre Hilfe. Nochmals vielen Dank

 
xtractalpha:
Hallo!

Könnte mir bitte jemand bei meiner Funktion LotsizeCalc() helfen.

Ich möchte meine Losgröße mit dem 'MartingaleAmount' multiplizieren, wenn mein letzter Handel ein Verlierer war. Wenn mein letzter Handel ein Gewinner war, würde ich gerne die 'normale' Losgröße verwenden. Leider erhalte ich beim Backtesting des EA die Fehlermeldung 4051 vom Journal.

Es hat etwas mit der Losgröße zu tun, denn der EA funktioniert, wenn ich versuche, den EA ohne die Funktion "LotsizeCalc()" auszuführen.

Weiß jemand, warum meine Lotsize-Funktion nicht funktioniert?

Vielen Dank im Voraus,

Thierry

extern int MaximumTrades = 10; extern double StopLoss=25; extern double TakeProfit=50; extern double MartingaleAmount = 1.5; input double LotSize=0.1; int magic; double pips; int tradeNumber; string ScreenComment; double martinlot; double martinsize;

[/PHP]

double LotsizeCalc() { if(OrderSelect(lastTradeTicket(),MODE_HISTORY)) if(OrderProfit()<0 && tradeNumber 0){ if(OrderSelect(ticket,SELECT_BY_TICKET)){ sl = OrderOpenPrice()+(StopLoss*pips); if(StopLoss==0)sl=0; tp = OrderOpenPrice()-(TakeProfit*pips); if(OrderType()==OP_BUY){ sl = OrderOpenPrice()-(StopLoss*pips); if(StopLoss==0)sl=0; tp = OrderOpenPrice()+(TakeProfit*pips); } if(!OrderModify(ticket,price,sl,tp,0,Magenta)) { err = GetLastError(); Print("Encountered an error during modification!"+(string)err+" "+ErrorDescription(err) ); } } else{//in case it fails to select the order for some reason Print("Failed to Select Order ",ticket); err = GetLastError(); Print("Encountered an error while seleting order "+(string)ticket+" error number "+(string)err+" "+ErrorDescription(err) ); } } else{//in case it fails to place the order and send us back a ticket number. err = GetLastError(); Print("Encountered an error during order placement!"+(string)err+" "+ErrorDescription(err) ); if(err==ERR_TRADE_NOT_ALLOWED)MessageBox("You can not place a trade because \"Allow Live Trading\" is not checked in your options. Please check the \"Allow Live Trading\" Box!","Check Your Settings!"); } }

Thierry

Sie können diese Funktion verwenden, um herauszufinden, ob die letzte geschlossene Order mit Gewinn oder Verlust geschlossen wurde:

[PHP]double lastOrderProfit(int magicNumber=0)

{

datetime lastTime = 0;

double lastProfit = 0;

for(int i=OrdersHistoryTotal()-1; i>=0; i--)

{

if (OrderSelect(i,SELECT_BY_POS, MODE_HISTORY)==false) break;

if (magischeZahl!=0)

if (OrderMagicNumber() != magicNumber) continue;

if (OrderSymbol() != Symbol()) continue;

if (OrderCloseTime() <= lastTime) continue;

lastTime = OrderCloseTime();

lastProfit = OrderProfit()+OrderSwap()+OrderCommission();

}

return(lastProfit);

}

Prüfen Sie einfach, ob das Ergebnis der Funktion lastOrderProfit(), und wenn es < 0 ist, dann wenden Sie Ihre Martingale-Regel

 

Hallo Mladen! Ich wieder...

Wie wäre es möglich, die Linien aus diesem Indikator in einem EA mit iCustom zu verwenden, da es keine Puffer für diese Linien zu geben scheint?

Danke

Dateien:
 
Jason2005:
Hallo Mladen! Ich wieder...

Wie wäre es möglich, die Linien aus diesem Indikator in einem EA mit iCustom zu verwenden, da es keine Puffer für diese Linien gesetzt zu sein scheint?

Danke

Das sind Objekte

Sie können auf Objekte über den Namen zugreifen (Sie müssen den genauen Namen des Objekts kennen, aber der Indikator muss im Chart aktiv sein und diese Objekte müssen im Chart gezeichnet werden).

 
mladen:
Das sind Objekte, auf die Sie über den Namen zugreifen können (Sie müssen den genauen Namen des Objekts kennen, aber der Indikator muss im Chart aktiv sein und diese Objekte müssen im Chart gezeichnet sein).

Sehr gut. Also, wie würde ich den Indikator aus dem EA aufrufen? Mit etwas anderem als iCustom oder habe ich es ganz falsch... Danke mladen

 
Jason2005:
Sehr gut. Wie würde ich also den Indikator aus dem EA heraus aufrufen? Mit etwas anderem als iCustom oder habe ich alles falsch verstanden... Danke mladen

Dieser Indikator zeichnet einfach Niveaus bei 0,20,50,80 Pips von jedem 100-Pips-Segment. Der einfachste Weg ist zu überprüfen, ob diese Ebenen von Ihrem EA gekreuzt werden.

Wenn Sie versuchen, Objektnamen (und deren Preise) zu verwenden, werden Sie nicht in der Lage sein, die genauen Namen der Linien zu kennen, da sie vom höchsten Hoch und niedrigsten Tief abhängen - sie sind Gegenstand von Änderungen. Verwenden Sie den oben beschriebenen Modus

 
mladen:
Dieser Indikator zeichnet einfach Niveaus bei 0,20,50,80 Pips von jedem 100 Pips Segment. Der einfachste Weg ist zu überprüfen, ob diese Levels von Ihrem EA überschritten werden. Wenn Sie versuchen, Objektnamen (und deren Preise) zu verwenden, werden Sie nicht in der Lage sein, die genauen Namen der Linien zu kennen, da sie vom höchsten Hoch und niedrigsten Tief abhängen - sie sind Gegenstand von Änderungen. Verwenden Sie den oben beschriebenen Modus

Hätten Sie ein Beispiel dafür, wie man das macht... Es tut mir leid, dass ich so viel frage, ich fange gerade erst mit der Codierung an und habe nicht den Dreh raus, wie man überprüft, ob diese Ebenen in der Bedingung zum Kauf oder Verkauf gekreuzt werden.

 
Jason2005:
Hätten Sie ein Beispiel dafür, wie man das macht... Es tut mir leid, dass ich so viel frage, aber ich fange gerade erst mit der Codierung an und habe noch nicht herausgefunden, wie man überprüft, ob diese Levels in der Kauf- oder Verkaufsbedingung überschritten werden.

Jason2005

Sie haben einen Code, wie es in dem Indikator, den Sie angehängt haben, gemacht wird

 
mladen:
Jason2005 Sie haben einen Code, wie es in dem Indikator, den Sie angehängt haben, gemacht wird

Würde es dann so aussehen?

MathMod(i, 5) == 0.0
 
mladen:
Thierry

Sie können diese Funktion verwenden, um herauszufinden, ob die letzte geschlossene Order mit Gewinn oder Verlust geschlossen wurde:

double lastOrderProfit(int magicNumber=0)

{

datetime lastTime = 0;

double lastProfit = 0;

for(int i=OrdersHistoryTotal()-1; i>=0; i--)

{

if (OrderSelect(i,SELECT_BY_POS, MODE_HISTORY)==false) break;

if (magicNumber!=0)

if (OrderMagicNumber() != magicNumber) continue;

if (OrderSymbol() != Symbol()) continue;

if (OrderCloseTime() <= lastTime) continue;

lastTime = OrderCloseTime();

lastProfit = OrderProfit()+OrderSwap()+OrderCommission();

}

return(lastProfit);

}

Prüfen Sie einfach, ob das Ergebnis der Funktion lastOrderProfit(), und wenn es < 0 ist, dann wenden Sie Ihre Martingale-Regel


Hallo Mladen,

danke für deine Antwort.

Die Funktion lastorderprofit wird nicht benötigt, da meine Funktion lastTradeTicket() die gleiche Aufgabe erfüllt.

Könnten Sie bitte einen Blick auf meinen EA werfen?

Ich bitte Sie nicht, den Code zu ändern, aber ich wäre Ihnen sehr dankbar, wenn Sie mir sagen könnten, was ich falsch kodiert habe.

Vielen Dank im Voraus,

Thierry

53_martingale.mq4

Dateien: