Ich habs grad mal simuliert und bei mir erhalte ich das richtige Ergebnis. Paar Dinge zu deinem Code:
Code:
if (Ereignis == true)
{
if (OrderType() == OP_BUYSTOP)
{
bool LongResult=true;
}
}
Du kannst LongResult nicht innerhalb eines Blocks erstellen, und sie dann auserhalb dieses Blocks weiter nutzen.
LongResult müsstest du am besten oben bei Ereignis erstellen.
Code:
if (LongResult)
double StopBuyOpenValue = Price;
double StopBuy2Low;
double LongValuePerc;
while (Ask +30 > StopBuyOpenValue)
if (LongResult)
{
LongValuePerc = NormalizeDouble(StopBuyOpenValue * NextBuyPercent / 100,Digits); //NextBuyPercent = 1.5
StopBuy2Low = StopBuyOpenValue + LongValuePerc;
StopBuyOpenValue++;
}
bool LStopBuyResult_Restore=false;
LStopBuyResult_Restore = ticketL= OrderSend(Symbol(),OP_BUYSTOP,LotsTraded,StopBuyOpenValue,Slippage,0,0,"BUY(#" + MagicNumberLong + ")",MagicNumberLong,0,Green);
LongResult=false;
- Das obige "if(LongResult)" bezieht sich lediglich auf "double StopBuyOpenValue = Price;", da du keine Klammern gesetzt hast.
- Deine 1.5% befinden sich in der Variablen "StopBuy2Low". "StopBuyOpenValue" inkrementierst du lediglich bei jedem Durchlauf, addierst also immer nur +1.
- Schmeiß die Variable "StopBuy2Low" raus und setze die Zeile so um
Code:
StopBuyOpenValue = StopBuyOpenValue + LongValuePerc;
Code:
bool LStopBuyResult_Restore=false;
LStopBuyResult_Restore = ticketL= OrderSend(Symbol(),OP_BUYSTOP,0.10,StopBuyOpenValue,3,0,0);
Nicht gut formuliert. Da OrderSend() im Fehlerfall -1 liefert, wäre deine Variable "LStopBuyResult_Restore" trotzdem TRUE.
Um es weiter zu verarbeiten, hättest du einfach abgefragt, ob ticketL == -1. Da brauchst du dann auch keine "LStopBuyResult_Restore" mehr.