Caractéristiques du langage mql5, subtilités et techniques - page 57

 
A100:

Le cadeau d'une erreur d'exécution difficile à trouver

En quoi ::CopyTicks est-il meilleur que Copyticks ?

Et pourquoi le résultat est toujours -1. Ces erreurs doivent être signalées au moment de la compilation

Donc, tout est logique.ERR_INVALID_ARRAY a reçu une erreur.

CopyTicks est exactement du type, si seulement sa taille est égale à sizeof(MqlTick). Bien entendu, cette taille exacte peut être vérifiée au moment de la compilation.

Eh bien, le CopyTicks personnalisé obéit à toutes les règles MQL.


Les tableaux de descendants ne peuvent pas être convertis en tableaux d'ancêtres. Mais élément par élément, oui. Il s'agit d'une restriction d'ArrayCopy, qu'il serait bon de supprimer.

 

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégie

Questions des débutants 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));
}

Fonctionne sans accès au serveur.

 
A100:

Un cadeau sous la forme d'une erreur d'exécution insaisissable.

Dans la prochaine version, le cadeau sera désactivé, malheureusement.

 
Allez-vous toujours travailler sur ce compte ou non ?
Документация по MQL5: Программы MQL5 / Выполнение программ
Документация по MQL5: Программы MQL5 / Выполнение программ
  • www.mql5.com
Каждый скрипт и каждый эксперт работает в собственном отдельном потоке. Все индикаторы, рассчитываемые на одном символе, даже если они запущены на разных графиках, работают в одном потоке. Таким образом, все индикаторы на одном символе делят между собой ресурсы одного потока. В одном потоке с индикаторами также последовательно выполняются...
 

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégies de trading

Bibliothèques : Expert

fxsaber, 2017.10.31 01:27

Un petit coup de chapeau - exécuter des EA/scripts sur des objets OBJ_CHART.

Ainsi, les EAs en cours d'exécution sont suspendus morts - pas exécutés de quelque manière que ce soit. Mais les scripts fonctionnent parfaitement. Par conséquent, cela ouvre certaines opportunités.

Par exemple, nous pouvons utiliser les fonctions d'ordre des indicateurs sur les graphiques, lorsqu'il existe déjà un conseiller expert en cours d'exécution. Et nous n'avons pas besoin d'ouvrir de nouveaux tableaux auxiliaires.

 
fxsaber:

Vous avez utiliséune indication, bien que l'indicateur puisse effectuer des transactions sans cette indication, via des événements.


 
Vitaly Muzichenko:

Vous avez utiliséun tipster, bien que l'indicateur puisse trader sans lui, par le biais d'événements.

Pour cela, il faut qu'un EA "renifleur" fonctionne en parallèle, c'est-à-dire qu'un graphique auxiliaire est nécessaire.

La situation dans l'exemple est quelque peu différente : il y a un graphique et un EA est déjà en cours d'exécution sur celui-ci. Et nous voulons parfois faire passer l'OrderSend par l'indicateur sans en ouvrir de nouveaux.

Bien sûr, sans DLL pour le marché pour le passer.

 
fxsaber:

Pour cela, il est nécessaire de faire fonctionner en parallèle une EA "à robinet", c'est-à-dire qu'un tableau auxiliaire est nécessaire.

La situation dans l'exemple est quelque peu différente : il y a un graphique et un EA est déjà en cours d'exécution sur celui-ci. Et nous voulons parfois faire passer l'OrderSend par l'indicateur sans en ouvrir de nouveaux.

Bien sûr, sans DLL pour le marché pour le passer.

Dans la vidéo, il fonctionne également sans DLL. Le conseiller expert n'en a besoin que d'un seul sur un graphique, il peut être sur le graphique actuel.

 
Vitaly Muzichenko:

Vous n'avez besoin que d'un seul conseiller expert sur un graphique, vous pouvez également en avoir un sur le graphique en cours.

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégies de trading

Particularités du langage mql5, subtilités et astuces

fxsaber, 2017.10.31 06:08

L'exemple présente une situation légèrement différente : un graphique sur lequel tourne déjà un EA. Et je veux faire fonctionner OrderSend à travers l'indicateur sans en ouvrir de nouveaux parfois.

 
// Сохранение 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);
}


Application

// Сохраняет в 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 Le convertisseur BMP->GIF/PNG est également implémenté.

Raison: