error modify 4051

O jezykach programowania w platformach i nie tylko.
Lite
Bywalec
Bywalec
Posty: 15
Rejestracja: 01 maja 2008, 14:17

error modify 4051

Nieprzeczytany post autor: Lite »

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.

Awatar użytkownika
ahanook
Stały bywalec
Stały bywalec
Posty: 22
Rejestracja: 09 cze 2011, 08:35

Nieprzeczytany post autor: ahanook »

jeśli to problem z OrderSelect to możliwe że chodzi o to :

Kod: Zaznacz cały

for(cnt = OrdersTotal(); cnt >= 0; cnt--)
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

cnt = OrdersTotal()-1; cnt >= 0; cnt--)

Awatar użytkownika
fxBobi
Gaduła
Gaduła
Posty: 244
Rejestracja: 20 sie 2008, 18:43

Nieprzeczytany post autor: fxBobi »

Cześć
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);
         } 
      } 
   }
Ponieważ jest to fragment więc problem może być jeszcze indziej .
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

Lite
Bywalec
Bywalec
Posty: 15
Rejestracja: 01 maja 2008, 14:17

Nieprzeczytany post autor: Lite »

Dziekuje. Pomoglo.

ODPOWIEDZ