sprawdzaj wynik funkcji modyfikującej - jeśli zajdzie potrzeba ponawiaj jej wykonanie
Kod: Zaznacz cały
int wynik=-1;
int ponowien 10;
while(wynik<0 && ponowien>0)
{
if(SL<=MarketInfo(Symbol(),MODE_STOPLEVEL)) SL=MarketInfo(Symbol(),MODE_STOPLEVEL);
wynik=OrderModify(...);
ponowien--;
}
analogicznie dla każdej operacji na zleceniach (open/close/modify)
musisz też bardziej sprawdzać wyniki funkcji - np taj modyfikującej możesz sprawdzać np czy zlecenie jest otwarte czy funkcja orderselect została wykonana poprawnie i dopiero wtedy modyfikować
ty robisz wszystko w ciemno więc stąd są błędy
to że nie sprawdzasz czy SL>= minSL to inna już sprawa ale pewnie tu nie ma błędu
Dodano po 12 minutach:
Całość mogłaby wyglądać np tak:
Kod: Zaznacz cały
if(isNewBar())
{
if(total(OP_BUY)==0&&.........................)
{
int ticketB=-1;
int ponowien 10;
while(ticketB<0 && ponowien>0)
{
ticketB=OrderSend(Symbol(),OP_BUY,lot,Ask,2,0,0,"",MagicNumber,0,Green);
ponowien--;
}
if(OrderSelect(ticketB,SELECT_BY_TICKET,MODE_TRADES))
{
ponowien 10;
while(ponowien>0 && !OrderModify(ticketB,OrderOpenPrice(),OrderOpenPrice()-SL*Point,OrderOpenPrice()+TP*Point,0,Green))
{
ponowien--;
if(SL<=MarketInfo(Symbol(),MODE_STOPLEVEL)) SL=MarketInfo(Symbol(),MODE_STOPLEVEL);
if(TP<=MarketInfo(Symbol(),MODE_STOPLEVEL)) TP=MarketInfo(Symbol(),MODE_STOPLEVEL);
}
ponowien 10;
while(ponowien>0 && !OrderModify(ticketB,OrderOpenPrice(),OrderOpenPrice()-SL*Point,OrderOpenPrice()+TP*Point,0,Green))
{
ponowien--;
if(SL<=MarketInfo(Symbol(),MODE_STOPLEVEL)) SL=MarketInfo(Symbol(),MODE_STOPLEVEL);
if(TP<=MarketInfo(Symbol(),MODE_STOPLEVEL)) TP=MarketInfo(Symbol(),MODE_STOPLEVEL);
}
}
}
if(total(OP_SELL)==0&&.........................)
{
int ticketS=-1;
int ponowien 10;
while(ticketS<0 && ponowien>0)
{
ticketS=OrderSend(Symbol(),OP_SELL,lot,Bid,2,0,0,"",MagicNumber,0,Green);
ponowien--;
}
if(OrderSelect(ticketB,SELECT_BY_TICKET,MODE_TRADES))
{
ponowien 10;
while(ponowien>0 && !OrderModify(ticketS,OrderOpenPrice(),OrderOpenPrice()+SL*Point,OrderOpenPrice()-TP*Point,0,Green))
{
ponowien--;
if(SL<=MarketInfo(Symbol(),MODE_STOPLEVEL)) SL=MarketInfo(Symbol(),MODE_STOPLEVEL);
if(TP<=MarketInfo(Symbol(),MODE_STOPLEVEL)) TP=MarketInfo(Symbol(),MODE_STOPLEVEL);
}
ponowien 10;
while(ponowien>0 && !OrderModify(ticketS,OrderOpenPrice(),OrderOpenPrice()+SL*Point,OrderOpenPrice()-TP*Point,0,Green))
{
ponowien--;
if(SL<=MarketInfo(Symbol(),MODE_STOPLEVEL)) SL=MarketInfo(Symbol(),MODE_STOPLEVEL);
if(TP<=MarketInfo(Symbol(),MODE_STOPLEVEL)) TP=MarketInfo(Symbol(),MODE_STOPLEVEL);
}
}
}
}