Caratteristiche del linguaggio mql5, sottigliezze e tecniche - pagina 45

 
Alexey Viktorov:

Forse lo farà? Anche se non è sempre corretto per il forex.

mostra un valore sbagliato, per esempio per SBRF-9.17 l'ora di fine della sessione di trading di venerdì == 23:45:00 secondo il grafico dei minuti, e questa funzione mostra 00:00:00, secondo le informazioni della borsa l'ora di fine della sessione di trading serale alle 23:50

Non credo che il punto principale sia la possibilità di creare controlli dove siamo e usare costanti, ma forse qualcuno ha già implementato questa funzionalità e non devo scrivere la mia bicicletta.
 
Alexey Viktorov:

Non c'è dipendenza e non può esserci. Pertanto, non ci può essere un codice speciale.

Gli sviluppatori non usano l'LFO in questi casi. Gli algoritmi sono chiari - ripetibili.

 
Konstantin:

Nel mercato dei futures, come determinare l'ora di chiusura del mercato del giorno precedente in diverse varianti di trovare l'intervallo di tempo corrente:

1. siamo nell'intervallo sabato - domenica, abbiamo bisogno del tempo di chiusura della sessione commerciale di venerdì sera
2. siamo nel mercato chiuso dal lunedì al venerdì; abbiamo bisogno dell'orario di chiusura della sessione serale dal lunedì al giovedì
3. nel trading range lunedì - venerdì; abbiamo bisogno di un tempo di chiusura per la sessione di trading del venerdì sera
4. nella fascia oraria martedì-venerdì abbiamo bisogno dell'orario di chiusura delle sessioni serali di lunedì-giovedì

Forse qualcuno ha scritto una funzionalità simile, non voglio reinventare la ruota ))

Non credo che ci sia molta più flessibilità delle costanti:

/*!
   \brief   Расчет конечной даты запроса
*/
datetime CVolumeCluster::CalcStopDate(void) {
   MqlDateTime _date;
   datetime _time_t = TimeTradeServer(_date);

   if(_date.hour == 23 && _date.min >= 44) {          // определяем время окончания торговой сессии
      _date.hour = 23;
      _date.min  = 44;
      _date.sec  = 59;
      _time_t    = StructToTime(_date);
   } else {
      TimeToStruct(_time_t - 86400, _date);
      _date.hour = 23;
      _date.min  = 44;
      _date.sec  = 59;
      if(_date.day_of_week == 0 || _date.day_of_week == 6)
         _date.day_of_week = 5;
      _time_t = StructToTime(_date);
   }
//---
   return _time_t;
}
 

consigliare chi lavora con la classe CCanvas, come rendere l'aggiornamento del segno grafico meno dispendioso in termini di risorse, per esempio abbiamo alcune centinaia di migliaia di linee nel marcatore grafico, quando si ridimensiona dobbiamo ridipingere ogni linea nel marcatore grafico, perché senza ridipingere semplicemente ridimensionando, le linee sul grafico non vengono visualizzate, anche se l'oggetto del marchio grafico cambia la sua dimensione

 
Konstantin:

probabilmente non c'è niente di più flessibile delle costanti:

Non è più facile?

/********************Script program start function*******************/
void OnStart()
{
 datetime timeArray[1], barArray[1];
 CopyTime(_Symbol, PERIOD_D1, 0, 1, timeArray);
 CopyTime(_Symbol, PERIOD_M1, timeArray[0]-1, 1, barArray);
 Print(barArray[0];
}/*******************************************************************/
 
Alexey Viktorov:

Non è più facile?

 CopyTime(_Symbol, PERIOD_D1, 0, 1, timeArray);              // время текущего дня 00:00:00
 CopyTime(_Symbol, PERIOD_M1, timeArray[0]-1, 1, barArray);  // время открытия - 1 секунду

il risultato è fondamentalmente corretto )) grazie

 
Ora (1626) non funziona

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

Peculiarità del linguaggio mql5, sottigliezze e trucchi

fxsaber, 2017.05.05 23:48

// Возвращает текущее количество объектов классов
int GetAmountObjects( void )
{
  const class CLASS_TMP {} Tmp;
  
  return((int)::StringFormat("%d", &Tmp) - 1);
}
Esempio di applicazione
int OnInit()
{
  if (GetAmountObjects() > 0)
    Print("До " + __FUNCSIG__ + " были вызваны конструкторы!");

  return(INIT_SUCCEEDED);
}
 
// Советник возвращает полностью сформированные торговые запросы (включая ручные)
#define  TOSTRING(A)  #A + " = " + (string)(A) + "\n"
#define  TOSTRING2(A) #A + " = " + EnumToString(A) + " (" + (string)(A) + ")\n"

string ToString( const MqlTradeRequest &Request )
{
  return(TOSTRING2(Request.action) + TOSTRING(Request.magic) + TOSTRING(Request.order) +
         TOSTRING(Request.symbol) + TOSTRING(Request.volume) + TOSTRING(Request.price) + 
         TOSTRING(Request.stoplimit) + TOSTRING(Request.sl) +  TOSTRING(Request.tp) + 
         TOSTRING(Request.deviation) + TOSTRING2(Request.type) + TOSTRING2(Request.type_filling) +
         TOSTRING2(Request.type_time) + TOSTRING(Request.expiration) + TOSTRING(Request.comment) +
         TOSTRING(Request.position) + TOSTRING(Request.position_by));
}

void OnTradeTransaction(   const MqlTradeTransaction&, const MqlTradeRequest& Request, const MqlTradeResult& )
{
  if (Request.action)
    Print(ToString(Request));
}

Se c'è un problema con lo stesso Filling, esegui questo EA e crea l'ordine che vuoi manualmente (F9 nel terminale). La richiesta di compravendita generata sarà stampata dall'EA.

Sfortunatamente, è problematico farlo su conti reali. Gli sviluppatori hanno respinto il suggerimento.

 
fxsaber:

Se c'è un problema con lo stesso Filling, esegui questo EA e crea l'ordine che vuoi manualmente (F9 nel terminale). La richiesta di compravendita generata sarà stampata dall'EA.

L'unica cosa che manca è un esempio di come funziona

 
Rashid Umarov:

Ciò di cui abbiamo bisogno è un esempio di come funziona.

Esporre manualmente


Otteniamo la richiesta di scambio generata nel log

Request.action = TRADE_ACTION_PENDING (5)
Request.magic = 0
Request.order = 157092716
Request.symbol = EURUSD
Request.volume = 0.01
Request.price = 1.13941
Request.stoplimit = 0.0
Request.sl = 1.13926
Request.tp = 1.13955
Request.deviation = 0
Request.type = ORDER_TYPE_BUY_LIMIT (2)
Request.type_filling = ORDER_FILLING_RETURN (2)
Request.type_time = ORDER_TIME_SPECIFIED (2)
Request.expiration = 2017.07.11 12:08:00
Request.comment = 
Request.position = 0
Request.position_by = 0
Sfortunatamente, è molto costoso per i veri commercianti. Per questo ho fatto una proposta.
Motivazione: