Modyfikacja zlecenia ( broker STP )

O jezykach programowania w platformach i nie tylko.
Awatar użytkownika
personov
Pasjonat
Pasjonat
Posty: 1525
Rejestracja: 09 sie 2009, 21:27

Modyfikacja zlecenia ( broker STP )

Nieprzeczytany post autor: personov »

Co jest nie tak w tej części kodu dotyczącej modyfikacji ( dodanie TP i SL u brokera STP ).
Nie za każdym raze modyfikuje. Czasem zostawia zlecenie bez modyfikacji i bez TP i SL.
Błędy z dziennika w załączniku.

Kod: Zaznacz cały

if(isNewBar()){
   if(total(OP_BUY)==0&&.........................)
   {ticketB=OrderSend(Symbol(),OP_BUY,lot,Ask,2,0,0,"",MagicNumber,0,Green);
   OrderSelect(ticketB,SELECT_BY_TICKET,MODE_TRADES);
   OrderModify(ticketB,OrderOpenPrice(),OrderOpenPrice()-SL*Point,OrderOpenPrice()+TP*Point,0,Green);
   }
   if(total(OP_SELL)==0&&.......................)
   {ticketS=OrderSend(Symbol(),OP_SELL,lot,Bid,2,0,0,"",MagicNumber,0,Red);
   OrderSelect(ticketS,SELECT_BY_TICKET,MODE_TRADES);
   OrderModify(ticketS,OrderOpenPrice(),OrderOpenPrice()+SL*Point,OrderOpenPrice()-TP*Point,0,Red);
   }
   }
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
Solą życia jest kasa.

Awatar użytkownika
Tig3r
Przyjaciel Forum
Przyjaciel Forum
Posty: 2310
Rejestracja: 02 sty 2008, 10:46

Nieprzeczytany post autor: Tig3r »

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);
            } 
         } 
      }
   }
======================================================
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..

ODPOWIEDZ