Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 492

 
Евгений:
C'è un modo per controllare se gli script di apertura funzionano nel fine settimana?
No. Solo gli Expert Advisors possono essere controllati nel tester delle strategie durante il fine settimana.
 
Karputov Vladimir:
Solo l'indicatore gestisce tutti i tick in OnCalculate(). Senza salti.
Eh no. E salta. Ma meno di altri. Ma salta.
 
Victor Nikolaev:
No. E sbaglia. Ma meno di altri. Ma salta.
L'indicatore può saltare il tick solo se l'indicatore usa calcoli ad alta intensità di risorse ad ogni ingresso in OnCalculate().
 
kashi_ann:

Bene, grazie.

Un'altra domanda:

OrderSelect

Seleziona un ordine per lavorare ulteriormente con esso. Restituisce true quando la funzione viene completata con successo. Restituisce false se la funzione fallisce. È necessario chiamare la funzioneGetLastError() per ottenere informazioni sull'errore.

Il metodoOrderSelect(
ulong ticket// Ticket l'ordine
);

Parametri

biglietto

[Il biglietto dell'ordine.

Come viene assegnato questo biglietto? Dove posso trovarlo? O come posso impostarlo?

Nell'aiuto si dice

OrderGetTicket

Restituisce il biglietto dell'ordine corrispondente e seleziona automaticamente l'ordine per ulteriori manipolazioni tramite funzioni. Dobbiamo guardare tutti gli ordini per indice e ottenere un biglietto, se necessario. Anche se questa funzione selezionerà anche l'ordine stesso. Il biglietto è fissato dal broker e non possiamo cambiarlo.

ulong  OrderGetTicket( 
   int  index      // номер в списке ордеров 
   );
 

Ciao a tutti!

Ho scritto una funzione che dovrebbe disegnare ogni giorno sul grafico il "fuso orario non commerciale".
Ma qui c'è un problema - quando lo avvio, il modulo OnInit, disegna come dovrebbe essere ma quando lo attivo nel modulo OnTimer per qualche motivo sconosciuto la variabile data mantiene i valori che sono stati assegnati nel modulo OnInit.

Domanda: Perché?

int OnInit()

  {

    EventSetTimer(1);

    MqlDateTime date;

    TimeLocal(date); 

    offtimeCreate(date); // Рисуем на графике заполненный прямоугольник (не торговая зона) с 21:00 до 23:59 в день указанный в переменной date

    return(INIT_SUCCEEDED); 

  } 

 ...

void onTimer()

  {

    MqlDateTime date;

    TimeLocal(date);

    if (date.hour==9 && date.min==0 && date.sec==0)  offtimeCreate(date); // Каждое утро, в 9:00, рисуем новую "не торговую зону" для дня указанного в переменной date

  } 

...
 
INGFX:

Ciao a tutti!

Ho scritto una funzione che dovrebbe disegnare un "fuso orario non commerciale" su un grafico ogni giorno.
Ma c'è un problema - quando viene eseguito nel modulo OnInit disegna la data come dovrebbe essere ma quando viene eseguito nel modulo OnTimer per qualche motivo sconosciuto la variabile data mantiene i valori che sono stati assegnati nel modulo OnInit.

Domanda: Perché?

Forum sul trading, sistemi di trading automatico e test di strategia

Bug, bug, domande

Karputov Vladimir, 2016.01.09 20:51

Cosa vi fa pensare che nella variabile timer date venga passato il valore precedentemente definito in OnInit()?

Devi guardare la tua funzione che disegna la zona.

Completato:

Correttamente sarebbe OnTimer, non onTimer.

 

Forum sul trading, sistemi di trading automatico e test di strategie di trading

Bug, bug, domande

INGFX, 2016.01.09 21:20

Perché A) vedo visivamente, il "fuso orario" non è disegnato oggi dalle 21:00 alle 23:59, ma da ieri 21:00 a oggi 23:59

B) Se apro le proprietà dell'oggetto grafico (rettangolo ombreggiato - "fuso orario"), vedo che la prima variabile non è cambiata, cioè ha lo stesso valore delle 21:00 di ieri

...
bool offtimeCreate(MqlDateTime &stm)
  {
    color clr=Black;
    datetime tm1,tm2;
    tm1 = StringToTime((string)stm.year+"."+(string)stm.mon+"."+(string)stm.day+" 21:00");
    tm2 = StringToTime((string)stm.year+"."+(string)stm.mon+"."+(string)stm.day+" 23:59");

    RectangleCreate(0,"offtime",0,tm1,0,tm2,200,clr); // chrart_id,object_name,sub_window,time1,price1,time2,price2,color

    return(true);
  }
...

 
Karputov Vladimir:
La risposta corretta è OnTimer, non onTimer
Sì, è OnTimer, ho fatto un errore quando l'ho copiato qui ... Il codice stesso è corretto.
 
INGFX:
Beh sì OnTimer, ha fatto un errore quando riscritto qui ... il codice stesso è corretto

Avresti controllato il tuo codice. Stanco di cucire insieme i tuoi pezzi - quindi ecco, controlla il codice. In OnTimer sostituisci la tua ora locale e confronta le stampe all'inizializzazione e nel timer:

//+------------------------------------------------------------------+
//|                                                       TestEA.mq5 |
//|                        Copyright 2015, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   EventSetTimer(1);
   MqlDateTime date;
   TimeLocal(date);
   offtimeCreate(date); // Рисуем на графике заполненный прямоугольник (не торговая зона) с 21:00 до 23:59 в день указанный в переменной date
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTimer()
  {
   MqlDateTime date;
   TimeLocal(date);
   if(date.hour==22 && date.min==33 && date.sec==00)
      offtimeCreate(date); // Каждое утро, в 9:00, рисуем новую "не торговую зону" для дня указанного в переменной date
  }
//+------------------------------------------------------------------+
/*void offtimeCreate(MqlDateTime &struct_date)
  {
   string text="";
   text=IntegerToString(struct_date.hour)+":"+
        IntegerToString(struct_date.min)+":"+
        IntegerToString(struct_date.sec);
   Comment(text);
//ChartRedraw();
  }*/
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool offtimeCreate(MqlDateTime &stm)
  {
   color clr=Black;
   datetime tm1,tm2;
   tm1 = StringToTime((string)stm.year+"."+(string)stm.mon+"."+(string)stm.day+" 21:00");
   tm2 = StringToTime((string)stm.year+"."+(string)stm.mon+"."+(string)stm.day+" 23:59");

   Print(tm1+"      "+tm2);
//RectangleCreate(0,"offtime",0,tm1,0,tm2,200,clr); // chrart_id,object_name,sub_window,time1,price1,time2,price2,color

   return(true);
  }
//+------------------------------------------------------------------+
 
Karputov Vladimir:

Avresti controllato il tuo codice.

Vladimir, grazie per la tua pazienza e il tuo aiuto!
Davvero fatto un errore nel codice ...
Starò più attento d'ora in poi.