[MT4] Limit transakcji na okres

O jezykach programowania w platformach i nie tylko.
crn
Gaduła
Gaduła
Posty: 117
Rejestracja: 17 mar 2009, 22:07

Nieprzeczytany post autor: crn »

Marius pisze:Dzięki wszystkim za pomoc.

Generalnie to chciałbym zrobić tak że ma być max 1 zlecenie long oraz max 1 zlecenie short w ciągu pełnej godziny, na razie udało mi się zrobić limit na 1 (dowolne) zlecenie w ciągu godziny:
if(OrderSelect(OrdersHistoryTotal() -1,SELECT_BY_POS,MODE_HISTORY)==true)
{
int prevtime=OrderCloseTime();
int prevtime_hour=TimeHour(prevtime);
int curenttime=Hour();
int prevday=TimeDayOfYear(prevtime);

if(prevtime_hour < curenttime || TimeDayOfYear(TimeCurrent()) - prevday > 0 )
ticket_long = OrderSend(Symbol(), OP_BUY, Lot_size, Ask, Max_Slippage, 111, 111, "", 1, 0, Yellow);
} //OrderSelect



Dodałem taką linijkę ale niestety otwiera mi po kilka longów pod rząd:
if(prevtime_hour == curenttime && OrderType()==OP_SELL)

Kod: Zaznacz cały

     if(OrderSelect(OrdersHistoryTotal() -1,SELECT_BY_POS,MODE_HISTORY)==true)
     {
        int prevtime=OrderCloseTime();
        int prevtime_hour=TimeHour(prevtime);
        int curenttime=Hour();
        int prevday=TimeDayOfYear(prevtime);        
        
        if(prevtime_hour < curenttime || TimeDayOfYear(TimeCurrent()) - prevday > 0 )       
           ticket_long = .........................               
        if(prevtime_hour == curenttime && OrderType()==OP_SELL)
           ticket_long = .........................          
      } //OrderSelect  
Ma ktoś może jakiś pomysł jak to rozwiązać?
Malo optymalnie i tak na szybko wiec moga byc bledy. type 0, 1 i zwraca true jak byla otwarta pozycja w przeciagu min.

Kod: Zaznacz cały


bool WasOpenTradeIn(int min, int type)
{

   ///dla historycznych
   for(int i=0; i<OrdersHistoryTotal(); i++)
   {
       OrderSelect(i, SELECT_BY_POS, MODE_HISTORY);
        if( OrderType() = type)
        if(  MathAbs( OrderOpenPrice() - TimeCurrent() ) <= min*60 )
        return(true);
   }
   ///dla otwartych
      for(int i=0; i<OrdersTotal(); i++)
   {
       OrderSelect(i, SELECT_BY_POS, MODE_TRADE);
        if( OrderType() = type)
        if(  MathAbs( OrderOpenPrice() - TimeCurrent() ) <= min*60 )
        return(true);
   }

return(false);
}


ODPOWIEDZ