Aprire posizioni a mercato ad un orario fisso!

Sezione dedicata a metatrader (ed altre piattaforme) ed al suo linguaggio di programmazione per il trading automatico
neuro
Messaggi: 11
Iscritto il: 05/03/2020, 11:59

Aprire posizioni a mercato ad un orario fisso!

Messaggio da neuro »

Salve a tutti,
da poco mi sto avvicinado al mondo degli EA e quindi della programmazione. Vi chiedo un aiutino per poter iniziare il mio percorso in questo mondo. Nel mio primo progetto evevo intenzione di aprire una posizione a mercato (long o short da decidere) ogni giorno dal lunedì al venerdì alla stessa ora per poi andare a stop loss oppure take profit prestabiliti. Magari poi, per ampliare il sistema, aggiungere altre posizioni nell'arco della giornata sempre ad orari fissi indipendentemente dall'andamento del prezzo e da indicatori/oscillatori vari. Immagino che non è facile trovare spunti per un progetto del genere perchè, vi chiederete, chi è quel "pazzo" che apre posizioni sistematicamente ad un orario fisso senza controllare l'andamento del prezzo? Avete ragione! :) Ho fatto ricerche nel web ma non sono riuscito a trovare spunti significativi che potessero riguardare aperture di posizioni ad orari prestabiliti. Forse non ho inserito le parole chiave giuste? Chi mi può aiutare?
Ringrazio anticipatamente
Avatar utente
m1player
Messaggi: 102
Iscritto il: 08/07/2014, 21:54

Re: Aprire posizioni a mercato ad un orario fisso!

Messaggio da m1player »

Ciao, se ti basta un semplice spunto e se ho capito bene vorresti che l'EA all'ora x aprisse un ordine con stop loss e take profit impostati, queste due righe andrebbero bene?

Codice: Seleziona tutto

if(TimeHour(TimeCurrent())>=OraX) 
      {
      if(OrdersTotal()==0)
       {
       ticket=OrderSend(Symbol(),OP_BUY,lots,Ask,slippage,stoploss,takeprofit,"My order",MagicNumber,0,clrGreen); 
       if(ticket<0) 
          { 
          Print("OrderSend failed with error #",GetLastError()); 
          } 
          else 
          Print("OrderSend placed successfully"); 
       }
      }
neuro
Messaggi: 11
Iscritto il: 05/03/2020, 11:59

Re: Aprire posizioni a mercato ad un orario fisso!

Messaggio da neuro »

Ti ringrazio della risposta!

if(TimeHour(TimeCurrent())>=OraX)

In questa riga c'è scritto che quando l'ora corrente è maggiore uguale a l'ora X (che sarebbe una variabile che dovrei creare e dargli un valore) allora scatta l'OrderSend, giusto? Come mai scrivi >= e non solo = ? Per il fatto che se l'odine non avvenisse immediatamente a quell'orario, esso può avvenire anche negli istanti di tempo successivi?
Avatar utente
m1player
Messaggi: 102
Iscritto il: 08/07/2014, 21:54

Re: Aprire posizioni a mercato ad un orario fisso!

Messaggio da m1player »

Giusta osservazione, ho solo fatto un copia incolla che poi ho modificato per lo scopo da un codice che a partire da una certa ora controlla delle condizioni, sostituendo >= con = = il controllo avviene solo durante l'ora X mentre così com'è il controllo avviene sino a mezzanotte.
neuro
Messaggi: 11
Iscritto il: 05/03/2020, 11:59

Re: Aprire posizioni a mercato ad un orario fisso!

Messaggio da neuro »

Sulla variabile Orax va impostato un valore oo:mm (ciaoè ora:minuti) oppure un valore int? Se è int dovrei creare quello dell'ora e anche dei muniti altrimenti l' OrderSend è attuabile solo allo scoccare dell'ora precisa! Giusto?
Avatar utente
m1player
Messaggi: 102
Iscritto il: 08/07/2014, 21:54

Re: Aprire posizioni a mercato ad un orario fisso!

Messaggio da m1player »

Così com'è OraX è un valore int e il controllo avviene da OraX:00 fino a OraX:59, Ordersend viene eseguita se OrdersTotal()==0.
neuro
Messaggi: 11
Iscritto il: 05/03/2020, 11:59

Re: Aprire posizioni a mercato ad un orario fisso!

Messaggio da neuro »

Ti faccio un esempio. Se io volessi aprire una posizione long alle 9:30 del mattino del lunedì, del martedì, del mercoledì, del giovedì, del venerdì.
Come inserisco in OraX (che è un valore int) 9:30 ?
Scusami ma esssendo un neofita sono poco elastico a questi ragionamenti.
Avatar utente
m1player
Messaggi: 102
Iscritto il: 08/07/2014, 21:54

Re: Aprire posizioni a mercato ad un orario fisso!

Messaggio da m1player »

Ok, se vuoi eseguire un'istruzione all'ora X e al minuto Y:

Codice: Seleziona tutto

   if(TimeHour(TimeCurrent())==OraX && TimeMinute(TimeCurrent()) == MinutoY)
     {
     //...
     }
accertandoti con un controllo che l'istruzione venga eseguita solo una volta o il numero di volte che serve a te e non innumerevoli volte nell'arco di un minuto...
neuro
Messaggi: 11
Iscritto il: 05/03/2020, 11:59

Re: Aprire posizioni a mercato ad un orario fisso!

Messaggio da neuro »

Ho provato ma non apre nessuna posizione. Nel diario di metatrader mi scrive OrderSend error 130. Ho visto che questo errore corrisponde a quando imposti male lo stop loss. Ho provato a non mettere lo stop loss e take profit inserendo 0 in tutti e due i campi ma l'errore rimane.
Questa è la stringa che da l'errore "OrderSend error 130"

result=OrderSend(Symbol(),OP_BUY,Lotti,Ask,0,0,0,"Compra",MagicNumber);
Avatar utente
m1player
Messaggi: 102
Iscritto il: 08/07/2014, 21:54

Re: Aprire posizioni a mercato ad un orario fisso!

Messaggio da m1player »

Impostando stop loss e take profit a 0 non so perché restituisca errore 130... Negli altri casi può dipendere da come dichiari lo stop loss. Io utilizzo una variabile esterna di tipo int ma stop loss e take profit inseriti nella funzione OrderSend sono dei prezzi, cioè double. Quindi se per esempio volessi utilizzare uno Stop di 50 pips:

Codice: Seleziona tutto

extern int StopLoss=50;
all'interno di OnInit() definisco il point per poter utilizzare l'expert su diversi cambi:

Codice: Seleziona tutto

 if(Digits==3 || Digits==5)
  MyPoint=Point*10;
  else
  MyPoint=Point;
e prima di utilizzare OrderSend definisco gli stop loss:

Codice: Seleziona tutto

sl_buy=Bid-MyPoint*StopLoss;
sl_sell=Ask+MyPoint*StopLoss;
Rispondi

Chi c’è in linea

Visitano il forum: Nessuno e 0 ospiti