EA oczekujące pomoc

O jezykach programowania w platformach i nie tylko.
Awatar użytkownika
CoVal
Gaduła
Gaduła
Posty: 320
Rejestracja: 06 paź 2005, 22:45

Nieprzeczytany post autor: CoVal »

Kris82.... to sie niestety nie trzyma kupy.
np.
funkcja OrderTicket() zwraca ci numer ticket zlecenia ktore wybrales przy pomocy OrderSelect();
http://docs.mql4.com/trading/OrderTicket
wiec nie wiem co ci zwraca:

Kod: Zaznacz cały

int Ticket=OrderTicket(); 
no costam ci zwrocil wiec dalej piszesz warunek w ktorym sprawdzasz czy ten Ticket ma wartosc wieksza od zera TYLKO po to aby radosnie wydrukowac sobie komunikat, ze to zlecenie zostalo juz otwarte....
i ten komunikat bedzie ci sie drukowal z kazda nowa swieca...

a obie pozycje ktore sa dalej w kodzie po tym warunku i tak ci sie otworza bez wzgledu na to czy Ticket > 0 czy nie.... a chyba wlasnie o to ci chodzi, zeby jak te pozycje sa juz otwarte, to zeby NIE otwieraly sie dalsze....

a w twoim przypadku, jak przyjdzie nowa swieca to otworzy ci 2 kolejne pozycje....

rozumiem, ze w tablicy orderOpened[2] masz zamiar zapisywac czy obie pozycje sa juz otwarte czy nie.... w takim wypadku po otwarciu pierwszej pozycji powinienes napisac:

Kod: Zaznacz cały

orderOpened[0]=true;
a po otwarciu drugiej

Kod: Zaznacz cały

orderOpened[1]=true;
a co jak ci sie pozycja nie otworzy ? jesli napiszesz to tak jak masz to tam napisane, to bez wzgledu czy proba otwarcia sie uda czy nie, to

Kod: Zaznacz cały

orderOpened[id]=true;
ci sie ustawi na true.... nawet jak sie ta pozycja nie otworzy.

a ten warunek to zmienilbym w takim wypadku na mniej wiecej cos takiego:

Kod: Zaznacz cały

  
            if( orderOpened[0]==false)  // czyli jesli long nie jest postawiony to go postaw 
                  {    
                   OP=W+BuyStop*Point; 
                   TP=OP+TakeProfit*Point; 
                   SL=OP-StopLoss*Point; 
                   Ticket=OrderSend(Symbol(),4,Lot,OP,2,SL,TP,"",0); // error handling 
                   orderOpened[0]=true;
                  } 
            if( orderOpened[1]==false)  // czyli jesli short nie jest postawiony to go postaw 
                  {          
                   OP=W-SellStop*Point; 
                   TP=OP-TakeProfit*Point; 
                   SL=OP+StopLoss*Point; 
                   Ticket=OrderSend(Symbol(),5,Lot,OP,2,SL,TP,"",0); 
                   orderOpened[1]=true;
                  }
 
a po uaktywnieniu i pozniej zamknieciu danej pozycji ustaw odpowiedni orderOpened[] z powrotem na false...
i znowu ci go otworzy z nawa swieca.

ODPOWIEDZ