Caratteristiche del linguaggio mql5, sottigliezze e tecniche - pagina 57

 
A100:

Il dono di un errore di esecuzione difficile da trovare

In che modo ::CopyTicks è meglio di Copyticks?

E perché il risultato è sempre -1. Questi errori dovrebbero essere segnalati in fase di compilazione

Quindi, tutto è logico.ERR_INVALID_ARRAY ha avuto un errore.

CopyTicks è esattamente di tipo, se solo la sua dimensione è uguale a sizeof(MqlTick). Naturalmente, esattamente questa dimensione può essere controllata in fase di compilazione.

Bene, il CopyTicks personalizzato obbedisce a tutte le regole MQL.


Gli array di discendenti non possono essere convertiti in array di antenati. Ma elemento per elemento, sì. Questa è una restrizione di ArrayCopy, che sarebbe bello rimuovere.

 

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

Domande dai principianti MQL5 MT5 MetaTrader 5

fxsaber, 2017.10.19 21:13

// Возвращает true, если нет бара с таким временем ("дырка")
bool IsHole( const string Symb, const ENUM_TIMEFRAMES TimeFrame, const datetime time )
{
  return(Bars(Symb, TimeFrame, SeriesInfoInteger(_Symbol, PERIOD_CURRENT, SERIES_FIRSTDATE), time) +
         Bars(Symb, TimeFrame, time, SeriesInfoInteger(_Symbol, PERIOD_CURRENT, SERIES_LASTBAR_DATE)) ==
         SeriesInfoInteger(_Symbol, PERIOD_CURRENT, SERIES_BARS_COUNT));
}

Funziona senza accedere al server.

 
A100:

Un regalo sotto forma di un errore di esecuzione sfuggente

Nella prossima build il regalo sarà disattivato, purtroppo.

 
Hai ancora intenzione di lavorare su questo conto o no?
Документация по MQL5: Программы MQL5 / Выполнение программ
Документация по MQL5: Программы MQL5 / Выполнение программ
  • www.mql5.com
Каждый скрипт и каждый эксперт работает в собственном отдельном потоке. Все индикаторы, рассчитываемые на одном символе, даже если они запущены на разных графиках, работают в одном потоке. Таким образом, все индикаторы на одном символе делят между собой ресурсы одного потока. В одном потоке с индикаторами также последовательно выполняются...
 

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

Biblioteche: Esperto

fxsaber, 2017.10.31 01:27

Un piccolo suggerimento: eseguire EAs/scripts su oggetti OBJ_CHART.

Quindi l'esecuzione degli EAs si blocca - non viene eseguita in alcun modo. Ma gli script funzionano perfettamente. Pertanto, apre alcune opportunità.

Per esempio, possiamo usare le funzioni d'ordine degli indicatori sui grafici, dove c'è già un Expert Advisor in esecuzione. E non abbiamo bisogno di aprire nuovi grafici ausiliari.

 
fxsaber:

Hai usatoun tip-off, anche se l'indicatore può fare trading senza di esso, tramite eventi


 
Vitaly Muzichenko:

Hai usatoun tipster, anche se l'indicatore può fare trading senza di esso, attraverso eventi

Questo richiede un EA "sniffer" da eseguire in parallelo, cioè è necessario un grafico ausiliario.

La situazione nell'esempio è un po' diversa: c'è un grafico e qualche EA è già in esecuzione su di esso. E vogliamo a volte passare OrderSend attraverso l'indicatore senza aprirne di nuovi.

Naturalmente, senza DLL per il mercato per passarlo.

 
fxsaber:

Questo richiede un "rubinetto" EA per funzionare in parallelo, cioè è necessario un grafico ausiliario.

La situazione nell'esempio è un po' diversa: c'è un grafico e qualche EA è già in esecuzione su di esso. E vogliamo a volte passare OrderSend attraverso l'indicatore senza aprirne di nuovi.

Naturalmente, senza DLL per il mercato per passarlo.

Nel video funziona anche senza DLL. L'Expert Advisor ne ha bisogno solo uno su qualsiasi grafico, può essere su quello corrente.

 
Vitaly Muzichenko:

Hai bisogno di un solo Expert Advisor su qualsiasi grafico, puoi averne uno anche sul grafico corrente.

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

Peculiarità del linguaggio mql5, sottigliezze e trucchi

fxsaber, 2017.10.31 06:08

L'esempio ha una situazione leggermente diversa: un grafico e c'è già qualche EA in esecuzione su di esso. E voglio eseguire OrderSend attraverso l'indicatore senza aprirne di nuovi a volte.

 
// Сохранение Bitmap-объекта в bmp/gif/png-файле (прозрачность не учитывается)
bool BitmapObjectToFile( const long chartID, const string ObjName, const string FileName, const bool FullImage = false )
{  
  const ENUM_OBJECT Type = (ENUM_OBJECT)ObjectGetInteger(chartID, ObjName, OBJPROP_TYPE);  
  bool Res = (Type == OBJ_BITMAP_LABEL) || (Type == OBJ_BITMAP);
             
  if (Res)
  {
    const string Name = __FUNCTION__ + (string)MathRand();

    ObjectCreate(chartID, Name, OBJ_CHART, 0, 0, 0);
    ObjectSetInteger(chartID, Name, OBJPROP_XDISTANCE, -1 e3);
    
    const long chart = ObjectGetInteger(chartID, Name, OBJPROP_CHART_ID);
        
    Res = ChartSetInteger(chart, CHART_SHOW, false) && ObjectCreate(chart, Name, OBJ_BITMAP_LABEL, 0, 0, 0) &&
          ObjectSetString(chart, Name, OBJPROP_BMPFILE, ObjectGetString(chartID, ObjName, OBJPROP_BMPFILE)) &&
          (FullImage || (ObjectSetInteger(chart, Name, OBJPROP_XSIZE, ObjectGetInteger(chartID, ObjName, OBJPROP_XSIZE)) &&
                         ObjectSetInteger(chart, Name, OBJPROP_YSIZE, ObjectGetInteger(chartID, ObjName, OBJPROP_YSIZE)) &&
                         ObjectSetInteger(chart, Name, OBJPROP_XOFFSET, ObjectGetInteger(chartID, ObjName, OBJPROP_XOFFSET)) &&
                         ObjectSetInteger(chart, Name, OBJPROP_YOFFSET, ObjectGetInteger(chartID, ObjName, OBJPROP_YOFFSET)))) &&
                         ChartScreenShot(chart, FileName, (int)ObjectGetInteger(chart, Name, OBJPROP_XSIZE),
                                                          (int)ObjectGetInteger(chart, Name, OBJPROP_YSIZE));
    ObjectDelete(chartID, Name);
  }                    

  return(Res);
}


Applicazione

// Сохраняет в png-файлах все Bitmap-объекты текущего чарта
void OnStart()
{  
  for (int i = ObjectsTotal(0) - 1; i >= 0; i--)
  {
    const string Name = ObjectName(0, i);
    
    BitmapObjectToFile(0, Name, (string)ChartID() + "\\" + Name + ".png");    
  }      
}


SZY Il convertitore BMP->GIF/PNG è anche implementato.

Motivazione: