for(cnt = 0; cnt < OrdersTotal(); cnt++) {
if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES) && OrderOpenTime()>lastopentime && OrderType() <= 1) {
lastopentime = OrderOpenTime();
lastopenedordertype = OrderType();
lastorderprice2 = OrderOpenPrice();
}
}
if(lastopenedordertype == 1){//dla SELL
for(cnt = OrdersTotal(); cnt >= 0; cnt--){
OrderSelect(cnt, SELECT_BY_POS);
if(OrderStopLoss() != lastorderprice2 + ((MnoznikPoint*1) * Point)){
OrderModify(OrderTicket(),OrderOpenPrice(),lastorderprice2 + ((MnoznikPoint*1) * Point),lastorderprice2 - ((MnoznikPoint*2) * Point),0);}
}
}
==========================
Proszę o pomoc w powyższej części kodu mojego EA. Wyskakuje mi ciągle bład nr 4051, który jak wyczytałem jest związany z błędnym parametrem funkcji. Bodajże chodzi o funkcję orderselect, a konkretniej o wybieranie wg pozycji lub ticketu. Próbowałem różnych modyfikacji i niestety nic nie pomogło. Proszę o jakiekolwiek podpowiedzi. Pozdrawiam.
error modify 4051
jeśli to problem z OrderSelect to możliwe że chodzi o to :
mianowicie odwołani się do elementu n tablicy o wielkości n powoduje błąd wyboru elementu z poza tablicy.
tablica jest numerowana od 0 do n-1 - daje to n elementów.
(zresztą pierwszego fora masz dobrze napisanego)
spróbuj przerobić to na :
Kod: Zaznacz cały
for(cnt = OrdersTotal(); cnt >= 0; cnt--)
tablica jest numerowana od 0 do n-1 - daje to n elementów.
(zresztą pierwszego fora masz dobrze napisanego)
spróbuj przerobić to na :
Kod: Zaznacz cały
cnt = OrdersTotal()-1; cnt >= 0; cnt--)
Cześć
Pozwoliłem sobie skomendować , mam nadzieje że to ci nie pzreszkadza.
Ponieważ jest to fragment więc problem może być jeszcze indziej .
No ale tutaj czegoś brak .
Pozwoliłem sobie skomendować , mam nadzieje że to ci nie pzreszkadza.
Kod: Zaznacz cały
for(cnt = 0; cnt <= OrdersTotal(); cnt++) //dodaj mniejsza lub równa
{
if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES) && OrderOpenTime()>lastopentime && OrderType() <= 1)
{
lastopentime = OrderOpenTime();
lastopenedordertype = OrderType();
lastorderprice2 = OrderOpenPrice();
}
}
if(lastopenedordertype == 1)
{//dla SELL
for(cnt = OrdersTotal(); cnt >= 0; cnt--)
/*domyslam się że jeszcze raz przeglądasz aktywne zlecenia wie nie musisz robić tego "od tyłu"
tylko tak jak zrobiłeś to na początku
(cnt = 0; cnt <= OrdersTotal(); cnt++)*/
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); //dodaj Mode_Trades i tu chyba jest błąd
if (OrderStopLoss() != lastorderprice2 + ((MnoznikPoint*1) * Point))
{
OrderModify(OrderTicket(),OrderOpenPrice(),lastorderprice2 + ((MnoznikPoint*1) * Point),lastorderprice2 - ((MnoznikPoint*2) * Point),0);
}
}
}
No ale tutaj czegoś brak .
Kod: Zaznacz cały
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); //dodaj Mode_Trades i tu chyba jest błąd