|
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
Pivot-EA
Hey!
folgendes Problem: Der EA soll eine Long-Order eröffnen, sobald die Pivotlinie von unten nach oben durchkreuzt wird. Um das dem EA zu sagen, dachte ich mir dass eine Buy-Order eröffnet werden soll, wenn der Askpreis über der Pivotlinie liegt und gleichzeitig die letzten 10 Hochs unter dieser Linie... Doch leider funktioniert es nicht so wie gedacht. In den ganzen Backtest kann ich nicht nachvollziehen, warum genau jetzt eine Order platziert wird, wenn der Ask-Preis doch unter der Pivotlinie liegt und die letzten 10 Kerzen ebenfalls?? Danke schon mal für Eure Hilfe! Code:
//Buy Order //Long Signal 1 if(Ask>Pivot) { LongSignal1 = true; } else { LongSignal1 = false; } //Long Signal 2 if(iHighest(Symbol(),0,MODE_HIGH,10)<Pivot) { LongSignal2 = true; } else { LongSignal2 = false; } //Buy-Order plaziezen if(LongSignal1=true && LongSignal2==true) { Order=OrderSend(Symbol(),OP_BUY,0.1,Ask,5,StopLossLevel,TakeProfitLevel); } |
|
|||
1. entweder über die Kreuzung bzgl. des Close der letzten geschlossenen Kerze:
//Buy Order if(price1 < Pivot && Ask > Pivot) { Order=OrderSend(Symbol(),OP_BUY,0.1,Ask,5,StopLoss Level,TakeProfitLevel); } Oder 2. rein über das aktuelle Kreuzen mittels des aktuellen Kurses, wie bereits von Dir beschrieben: //Buy Order if(Ask > Pivot) { Order=OrderSend(Symbol(),OP_BUY,0.1,Ask,5,StopLoss Level,TakeProfitLevel); } Dass der EA dann nicht mehrere Orders öffnet, wird über die Abfrage geregelt, ob bereits eine Buy- oder SellOrder offen ist. traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
Zitat:
|
|
|||
Zitat:
"Dass der EA dann nicht mehrere Orders öffnet, wird über die Abfrage geregelt, ob bereits eine Buy- oder SellOrder offen ist." D.h. es wird vor der Orderöffnung eingebaut: if (!BuyOrderOffen) { //d.h. der EA springt nur dann in die Öffnungsroutine, wenn keine BuyOrder offen ist. Das kann nach Belieben verfeinert werden. ..... } traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
Zitat:
Ich meine folgendes: Der Kurs ist über dem Pivot --> Buy-Order wird eröffnet. Der Kurs erreicht den Takeprofit --> Position wird geschlossen ABER sofort wieder eine neue eröffnet, da der Kurs IMMER NOCH über dem Pivot ist. Es soll aber nur eine Positon eröffnet werden, wenn das Pivot-Level von unten nach oben durchkreuzt wird...das ist mein Problem.^^ |
|
|||
Zitat:
Code:
//Buy-Order platzieren wenn Ask über Pivot, aber nicht mehr als 10 Ticks if(Ask>Pivot && Ask<Pivot+0.0001) { Order=OrderSend(Symbol(),OP_BUY,0.1,Ask,10,StopLossLevel,TakeProfitLevel); } |
|
|||
Das sehe ich nicht als optimale Lösung:
Code:
//Buy-Order platzieren wenn Ask über Pivot, aber nicht mehr als 10 Ticks if(Ask>Pivot && Ask<Pivot+0.0001) { Order=OrderSend(Symbol(),OP_BUY,0.1,Ask,10,StopLossLevel,TakeProfitLevel; } Bei meinem Code fehlt?? plötzlich die Zuweisung: double price1 = Close[1]; oder gleich in die Abfrage integrieren. Code:
if(Close[1] < Pivot && Ask > Pivot) { Order=OrderSend(Symbol(),OP_BUY,0.1,Ask,5,StopLoss Level,TakeProfitLevel); } Code:
if (!BuyOrderIsOpen) { if(Close[1] < Pivot && Ask > Pivot) { Order=OrderSend(Symbol(),OP_BUY,0.1,Ask,5,StopLoss Level,TakeProfitLevel); } } Code:
if (!BuyOrderIsOpen) { if (Time[0] > LastOrderCloseTime) { if(Close[1] < Pivot && Ask > Pivot) { Order=OrderSend(Symbol(),OP_BUY,0.1,Ask,5,StopLoss Level,TakeProfitLevel); } } } Eine nächstes Open gäbe es nur, wenn auf einer der nächsten Kerzen nach! der OrderCloseKerze wieder der Kurs von unterhalb des Pivot dann über den Pivot erstmalig steigt. traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
Erstmal vielen Dank für deine Hilfe!!
Leider funktioniert dein Vorschlag nicht, dass nur maximal eine Order eröffnet wird. Der Tipp mit Close[1] war dagegen genial! Danke!! Habe es jetzt so gelöst: Code:
// maximal eine Position offen if(OrdersTotal()>0) { return(0); } //Buy Order //Buy-Order platzieren if(High[1] < Pivot && Ask > Pivot) { Order=OrderSend(Symbol(),OP_BUY,0.1,Ask,5,StopLossLevel,TakeProfitLevel); } |
|
|||
Zitat:
Sind die Variablen BuyOrderIsOpen und LastOrderCloseTime ordnungsgemäß! ermittelt worden? Kannst Du den Code dazu hier reinstellen? Die Abfrage if (!BuyOrderIsOpen) wird definitv! false ergeben, wenn BuyOrderIsOpen = true ist. Und die ist dann true, wenn über OrderSelect() eine offene BuyOrder, die zum jeweiligen Chart gehört, auf dem der EA läuft, ermittelt wird. traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
Zitat:
Code:
for(int i=0;i<OrdersTotal();i++) { if(OrderSelect(i,SELECT_BY_TICKET,MODE_TRADES)>0) { BuyOrderIsOpen=true; } else { BuyOrderIsOpen=false; } //LastOrderCloseTime if(OrderSelect(i,SELECT_BY_TICKET,MODE_HISTORY)) { LastOrderCloseTime = OrderCloseTime(); } } //Buy if (!BuyOrderIsOpen) { if (Time[0] > LastOrderCloseTime) { if(High[1] < Pivot && Ask > Pivot) { ticket=OrderSend(Symbol(),OP_BUY,0.1,Ask,5,StopLossLevel,TakeProfitLevel); } } } Bei meiner Version funktioniert es dagegen. Vielleicht findest du ja meinen Fehler... |
Lesezeichen |
Stichworte |
long, mql4, pivot long, pivotlinie, programmierung, programmierung metatrader |
|
|