Hallo, Liebe User-Gemeinde,
piptrade kommt wieder einmal nicht so recht weiter und hat da mal `ne Frage:
DIE SITUATION: Long- und Short-Conditions sind vorgegeben, eine erste Position eröffnet und
ein TP modifiziert. Da die alte Position erhalten werden soll, wird KEIN SL vorgegeben; - statt dessen soll bei "Close[0] < OrderOpenPrice()-6*100*Point" eine neue und zusätzliche Position (in Richtung der Losses-Bewegung) eröffnet werden. All das funktioniert reibungslos.
DAS PROBLEM: Die o.a. zusätzliche Positions-Eröffnung erfolgt nicht nur 1 x, sondern wiederholt sich perTick, so dass in kürzester Zeit 20 - 30 Positionen neu eröffnet sind !
DER LÖSUNGSANSATZ: Unter "void CheckOpen()" wurde die 1. Bedingung "if(OrderType()==OP_BUY" mit "... && OrderSHORT==false)" ergänzt und sollte damit jede "OrderSHORT=true" blockieren. - Leider funktioniert das nicht, wie gewünscht; - jetzt wird die neue Position gar nicht mehr geöffnet!
Zum besseren Veständnis hier die wesentlichen Code_Bestandteile:
Code:
//---
void CheckOpen()
// .....
// .....
//--- check order type
if(OrderType()==OP_BUY && OrderSHORT==false)
{
if(Close[0] < OrderOpenPrice()-6*100*Point)
{
OrderSHORT=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,3,0,0,"",MagicNumb_1,0,Red);
OrderSHORT=true;
}
break;
}
//---
void OnTick()
{
//--- check for history and trading
if(Bars<100 || IsTradeAllowed()==false)
return;
//--- calculate open orders by current symbol --> and close, if TP
if(CalculateCurrentOrders(Symbol())==0) CheckOpen();
else CheckTakeProfit();
//--- calculate open orders --> and opening a new position (Hedge against SL)
if(CalculateCurrentOrders(Symbol())!=0) CheckOpen();
return;
}
//----
Nochmals:
"void OnTick" stellt sicher, dass
1. eine erste Order erteilt wird - oder aber, wenn diese bereits besteht, - der TP zu checken ist. Zum
2. soll bei Erhalt der alten Position, die neue, zusätzliche Position, eröffnet werden. - Und das möglichst nur 1 x !
Um Wiederholungen der neuen Ordereröffnung auszuschließen, wurde unter "void CheckOpen()" als
1. vorgegeben, dass "OrderSHORT==false" sein muss. Es darf also keine neue Order erteilt worden sein, - und nur dann, - wird die neue Position eröffnet; - so weit, so gut.
Zum
2. wird
NACH der neuen Ordererteilung festgelegt, dass ab jetzt die
"OrderSHORT=true" ist. Damit sollte die o.a. Bedingung "OrderSHORT==false" nicht erfüllt sein und eine erneute Ordererteilung unterbunden werden !
Liegt ggf. hier der Gedankenfehler ?
Ich hoffe, dass alles soweit verständlich ist, habe trotzdem eine Art Ablaufchema sowie eine Chartdarstellung
beigefügt und würde mich über Eure Resonanz bzw. Hilfestellung sehr freuen.
LG. piptrade