Sari la conținut

Inchidere ordin la o anumita ora si minut


Postări Recomandate

Am si eu nevoie de un timer care sa il activez dupa ce am lansat ordinul iar la o anumita ora si minut sa imi inchida complet ca si cum l-as inchide eu manual. Am cautat pe google si nu am gasit ce as vrea eu, totusi am dat peste un cod si nu ma pricep deloc sa-l introduc sau sa-l interpretez.

 

Vrea cineva sa ajute?

 
extern int MaxHours=3; 
int YOUR_MAGIC_NUMBER_VARIABLE_HERE=298374; 

//+------------------------------------------------------------------+ 
//| expert initialization function                                   | 
//+------------------------------------------------------------------+ 
int init() 
  { 
//---- 
    
//---- 
   return(0); 
  } 
//+------------------------------------------------------------------+ 
//| expert deinitialization function                                 | 
//+------------------------------------------------------------------+ 
int deinit() 
  { 
//---- 
    
//---- 
   return(0); 
  } 
   

void AfterHours(){ 
   for(int i=0;i<OrdersTotal();i++){ 
      if(OrderSelect(i,SELECT_BY_POS)){ 
         if(OrderSymbol()==Symbol() && OrderMagicNumber()== YOUR_MAGIC_NUMBER_VARIABLE_HERE){ 
            if(CurTime() - OrderOpenTime() > MaxHours * (60 * 60) ){ 
               if(OrderType()==OP_BUY){ 
                  OrderClose(OrderTicket(),OrderLots(),Bid,2,Red); 
               } 
               if(OrderType()==OP_SELL){  
                  OrderClose(OrderTicket(),OrderLots(),Ask,2,Red); 
               } 
            } 
         } 
      } 
   } 
} 
//+------------------------------------------------------------------+ 
//| expert start function                                            | 
//+------------------------------------------------------------------+ 
int start() 
  { 
//---- 
   AfterHours(); 
//---- 
   return(0); 
  }  
 
Editat de Apollo
Link spre comentariu
Distribuie pe alte site-uri

Ipoteza necesara : la inserarea unui ordin, MagicNumber-ul ordinului trebuie sa fie setat cu data si timpul de expirare.

 

EA-ul verifica la fiecare schimbare de minut daca a expirat vreun ordin. Verifica/compara TimeCurrent (ora brokerului) cu MagicNumber-ul ordinului. Se poate modifica, sa verifice/compare TimeLocal (ora Romaniei) cu MagicNumber-ul ordinului.

 

PS. Am lasat ca model (EA-ul NU le foloseste, liniile raman comentate) :

#property show_inputs // pentru introducerea MagicNumber-ului la inserarea ordinului

extern datetime MagicNumber = D'2013.08.31 00:00'; // valoarea default care se modifica cu valoarea dorita pentru expirare, in momentul lansarii scriptului care insereaza ordinul, ordin ce transmite la broker si acest MagicNumber .

GoodTillDate.mq4

Editat de theSeer
Link spre comentariu
Distribuie pe alte site-uri

Valoarea default D'2013.08.31 00:00' a variabilei MagicNumber-ului daca e OK pentru toate ordinele, atunci NU trebuie modificata de fiecare data cand se da rand pe rand OrderSend (se comenteaza //#property show_inputs), insa NU trebuie uitat sa fie completat mereu acest parametru MagicNumber.

 

int OrderSend( string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment=NULL, int MagicNumber=0, datetime expiration=0, color arrow_color=CLR_NONE)

 

Daca la transmiterea ordinelor NU este completat deloc MagicNumber (MagicNumber=0), EA-ul considera data si timpul de expirare ca fiind '1970 00:00' si va sterge toate ordinele deschise care au MagicNumber=0. Daca NU se doreste aceasta comportare, se modifica conditia if( TimeCurrent() >= iMagicNumber ) in conditia if( iMagicNumber > 0 && TimeCurrent() >= iMagicNumber ), caz in care ordinele deschise care au MagicNumber=0 vor fi ignorate de EA, MagicNumber=0 nemaiputand fi modificat ulterior transmiterii ordinelor cu OrderSend(...,MagicNumber,...).

Editat de theSeer
Link spre comentariu
Distribuie pe alte site-uri

Am modificat EA-ul exact dupa cerintele initiale. Am introdus variabila ExpiryDateTime cu valoarea default D'1970.01.01 00:00', valoare default care va fi ignorata. Variabila ExpiryDateTime poate fi modificata oricand in timpul executiei EA-ului. Se vor sterge automat la data si ora indicata de ExpiryDateTime toate ordinele care sunt deschise pe piata. Astea sunt cerintele initiale, presupun... (implementarea anterioara era forma generalizata pentru data si ora de expirare, specificata in momentul introducerii ordinului pe piata, o implementare mq4 a ordinului de tip GoodTillDate)

 

Valoarea default a variabilei ExpiryDateTime se modifica oricand, astfel : apasare tasta F7 >> Tab Inputs >> Variable ExpiryDateTime >> Value, completandu-se data si ora de expirare dorita pentru ordinele deschise pe piata sau care vor fi deschise in viitor pe piata, anterior momentului indicat de ExpiryDateTime.

GoodTillDate.mq4

Editat de theSeer
Link spre comentariu
Distribuie pe alte site-uri

Versiunea 1.1 introduce o noua variabila ServerTime setata default cu true pentru cazul EpiryDateTime sa fie raportat la TimeCurrent (ora brokerului) ; se pune false pentru cazul EpiryDateTime sa fie raportat la TimeLocal (ora României, ora de pe calculatorul personal). (e de preferat variabila asta booleana in locul unei variabile numerice GMT_offset)

GoodTillDate.mq4

Editat de theSeer
Link spre comentariu
Distribuie pe alte site-uri

Alătură-te conversației

Poți posta acum și să te înregistrezi mai târziu. Dacă ai un cont, autentifică-te acum pentru a posta cu contul tău.

Vizitator
Răspunde la acest subiect...

×   Alipit ca text avansat.   Alipește ca text simplu

  Doar 75 emoji sunt permise.

×   Linkul tău a fost încorporat automat.   Afișează ca link în schimb

×   Conținutul tău precedent a fost resetat.   Curăță editor

×   Nu poți lipi imagini direct. Încarcă sau inserează imagini din URL.

  • Navigare recentă   0 membri

    • Nici un utilizator înregistrat nu vede această pagină.
×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.