Symboles personnalisés. Erreurs, bogues, questions, suggestions. - page 31

 

Existe-t-il un mécanisme permettant de partager une centaine de caractères personnalisés avec quelqu'un d'autre ?

L'historique est facile à transférer - il suffit de copier le dossier Custom. Les spécifications des caractères, par contre, ne sont pas claires.

 
fxsaber:

Existe-t-il un mécanisme permettant de partager une centaine de caractères personnalisés avec quelqu'un d'autre ?

L'historique est facile à transférer - il suffit de copier le dossier Custom. Mais les caractéristiques du personnage ne sont pas claires.

Je dois écrire un script personnalisé pour les charger/télécharger. Je n'attendrais pas une exportation/importation régulière.

 
Andrey Khatimlianskii:

Un script de chargement/téléchargement auto-écrit est nécessaire. Je n'attendrais pas un script d'exportation/importation régulier.

Cela demande beaucoup d'efforts, même si cela semble simple à première vue. Vous devez connaître la séquence correcte pour définir les propriétés des symboles. De plus, il y a des problèmes avec les sessions de cotation et de négociation.

C'est-à-dire qu'il faut beaucoup de travail pour déboguer et déboguer.

 

J'ai des problèmes pour remplir les marques personnalisées sur le nouveau graphique. J'essaie de créer un nouveau graphique de symboles avec une heure différente.

Mais j'ai toujours des problèmes pour remplir les marques dans le symbole de la monnaie.

Voici le code :

//+------------------------------------------------------------------+
//|                                         Forward_Ticks_Sample.mq5 |
//|                                                                  |
//|                                                                  |
//+------------------------------------------------------------------+

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots 0

#include "Includes//Symbol.mqh"

string   g[];
int      total_len_history = 0,
         initialization_flag,
         symbol_history_wiped_clean,
         len_sym = StringSplit(Symbol(),'_',g);
string   Orig_Symbol_Name = g[0],
         symbol_custom=StringFormat("%s_frd",Orig_Symbol_Name);
datetime Let_start = 0;
bool     alert_once,
         commentplaced;
long     time_msc = long(Let_start)*1000,
         tick_chart_id;
ulong    LastTime_Added;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   ResetLastError();
   string name = MQLInfoString(MQL_PROGRAM_NAME);
   IndicatorSetString(INDICATOR_SHORTNAME, name);
   ResetLastError();

   Close_All_Symbols_Charts(symbol_custom);

   MqlTick tick;

   while(SymbolInfoTick(Orig_Symbol_Name, tick) == false)
     {
      Sleep(1000);
     }

   alert_once = false;

   tick_chart_id = 0;

   symbol_history_wiped_clean = Remove_Symbol_From_MarketWatch_Delete_History(symbol_custom);

   alert_once = true;
   initialization_flag = INIT_FAILED;

   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[])
  {
   ResetLastError();
   MqlTick tick, ticks[];

   if(symbol_history_wiped_clean == false)
     {
      Close_All_Symbols_Charts(symbol_custom);

      symbol_history_wiped_clean = Remove_Symbol_From_MarketWatch_Delete_History(symbol_custom);

      if(symbol_history_wiped_clean == false)
         return 0;
     }

   if(symbol_history_wiped_clean == true &&
      initialization_flag == INIT_FAILED
     )
     {
      Alert_me();
      if(Fill_ReFill_Custom_Symbol(symbol_custom) == -1)
         return 0;
      initialization_flag = INIT_SUCCEEDED;
      Print("History Filled Successfully.");
      Comment("");
      return rates_total;
     }

   SymbolInfoTick(Orig_Symbol_Name, tick);

//if(tick.time_msc != LastTime_Added)
     {
      ulong tick_count = tick.time_msc - LastTime_Added;
      uint get_count = uint(MathAbs(double(tick_count)));

      int len = CopyTicks(Orig_Symbol_Name, ticks, COPY_TICKS_ALL, LastTime_Added, get_count);

      if(len <= 2)
         return rates_total;

      ulong last_time = ticks[len - 1].time_msc;

      if(len > 5)
        {
         commentplaced = true;
         ChartSetString(tick_chart_id, CHART_COMMENT, "Please wait while we retrieve ticks........");
        }

      int filled = Tick_Filling_Logic(ticks, len);

      if(commentplaced == true && filled > 0)
        {
         if(last_time + 60 > ulong(TimeCurrent()))
           {
            ChartSetString(tick_chart_id, CHART_COMMENT, "");
            Comment("");
            commentplaced = false;
           }
        }

      if(tick_chart_id <= 0)
        {
         tick_chart_id = ChartOpen(symbol_custom, PERIOD_M1);
        }
     }

   return rates_total;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Close_All_Symbols_Charts(string local_symbol)
  {
   tick_chart_id = 0;
   ResetLastError();
   for(long chartid = ChartFirst(); chartid != -1 && !IsStopped(); chartid = ChartNext(chartid))
     {
      string name = ChartSymbol(chartid);

      if(StringFind(name, local_symbol) < 0)
         continue;

      if(!ChartClose(chartid))
         Print("Cannot close Chart Symbol: ", name, " Period: ", EnumToString(ChartPeriod(chartid)));
     }
   Sleep(1000);
  }
//+------------------------------------------------------------------+
bool Remove_Symbol_From_MarketWatch_Delete_History(string local_symbol)
  {
   ResetLastError();

   Sleep(10);
   const SYMBOL SYMB(local_symbol);

   bool custom = true;
   bool status = SYMB.IsExist();//SymbolExist(local_symbol, custom);

   if(status == false)
      return true;

   if(SYMB.Off() == false)
     {
      Print("Cannot UnSelect the Symbol ", local_symbol, " because: ", GetLastError());
      Sleep(5000);
     }

   Print(__FUNCTION__, " : Error = ", GetLastError());

   if(CustomTicksDelete(local_symbol, 0, LONG_MAX) <= 0)
      Print("Cannot Delete Custom Ticks: ", GetLastError());

   return true;
  }
//+------------------------------------------------------------------+
int Fill_ReFill_Custom_Symbol(string local_symbol)
  {
   ResetLastError();
   total_len_history = 0;
   alert_once = false;
   commentplaced  = false;
   LastTime_Added = 0;

   Comment("Refreshing the Tick Chart. Please Wait.");

   MqlDateTime str;
   TimeToStruct(iTime(Orig_Symbol_Name, 0, 0) - 30 * 86400, str);
   Comment("");
   datetime start_date = datetime(StringFormat("%d.%d.01 00:00:00",str.year,str.mon));
   const SYMBOL SYMB(local_symbol);
   SYMB.CloneProperties(Orig_Symbol_Name);


   MqlTick ticks_add[];

   ulong time_start = GetMicrosecondCount();

   ResetLastError();

   if(LastTime_Added == 0)
      LastTime_Added = ulong(start_date) * 1000;

   int len = CopyTicksRange(Orig_Symbol_Name,
                            ticks_add,
                            COPY_TICKS_ALL,
                            LastTime_Added,
                            ulong(TimeCurrent()) * 1000
                           );

   if(len<=0)
     {
      string error;
      if(GetLastError() == 4401)
         error = "ERR_HISTORY_NOT_FOUND";
      else
         error = string(GetLastError());
      Print("------------------------------------------------------------------");
      Print("History Tick Length: ", len, " Error: ", error);
      Print("------------------------------------------------------------------");
      Sleep(5000);
      // Print("Waited for 10000 milliseconds. Still no history found.");
      return -1;
     }

   Let_start = 0;
   time_msc = long(Let_start)*1000;

   int total = Tick_Filling_Logic(ticks_add, len);

   if(total <= 0)
     {
      SYMB.Off();
      CustomSymbolDelete(local_symbol);
      return -1;
     }

   if(GetLastError() == 4403)
     {
      Sleep(2000);
      Print("History Failed to Retrieve.");
      len = -1;
      return len;
     }

   Print("Gathering Ticks from : ", iTime(Orig_Symbol_Name, 0, 0) - 30 * 86400, " To: ", TimeCurrent());
   Print("Symbol Working :",SYMB.On());
   Print("Ticks: ",len);
   Print("Started : ",ticks_add[0].time,"  Ended : ",ticks_add[len-1].time);
   Print("Error Found: ",GetLastError());
   Print("Ticks Filled: ", total);

   Print("Time Required for completion: ",(GetMicrosecondCount()-time_start)/1000000);
   Print("Started : ",ticks_add[0].time,"  Ended : ",ticks_add[len-1].time);
   Print("History Loaded!!!!");
   Print(Let_start);

   Comment("");
   ChartSetString(tick_chart_id, CHART_COMMENT, "");

   return len;
  }
//+------------------------------------------------------------------+
void OnDeinit(const int r)
  {
   EventKillTimer();
  }
//+------------------------------------------------------------------+
void Alert_me()
  {
   if(alert_once == false)
      return;
   Alert(symbol_custom, " : Please Wait for Chart Refresh");
  }
//+------------------------------------------------------------------+
int Tick_Filling_Logic(MqlTick& ticks_add[],
                       int len)
  {
   ResetLastError();

   long last = ticks_add[len - 2].time_msc,
        time_msc_local = time_msc;
   datetime Let_start_local = Let_start;
   int total_len_history_local = total_len_history;

   for(int i=0; i < len - 1 && !IsStopped(); i++)
     {
      if(i == 0 || (i > 0 && iBarShift(Orig_Symbol_Name, PERIOD_M1, ticks_add[i].time) > iBarShift(Orig_Symbol_Name, PERIOD_M1, ticks_add[i + 1].time)))
        {
         Let_start_local = datetime(TimeToString(Let_start_local, TIME_DATE|TIME_MINUTES))
                           + 60;
         MqlDateTime tt1;
         TimeToStruct(Let_start_local, tt1);
         if(tt1.day_of_week == 0)
           {
            Let_start_local = Let_start_local + 86400;
           }
         else
            if(tt1.day_of_week == 6)
              {
               Let_start_local = Let_start_local + 86400*2;
              }
         time_msc_local = long(Let_start_local)*1000;
        }
      else
        {
         if(ticks_add[i].time == ticks_add[i + 1].time)
            time_msc_local = time_msc_local + 1;
         else
           {
            Let_start_local = Let_start_local + 1;
            time_msc_local = long(Let_start_local)*1000;
           }
        }
      ticks_add[i].time       = Let_start_local;
      ticks_add[i].time_msc   = time_msc_local;
      total_len_history_local = total_len_history_local + 1;
     }
   int total = CustomTicksAdd(symbol_custom, ticks_add);

   if(total <= 0)
     {
      Print("Tick Not added : ", GetLastError());
      total = CustomTicksReplace(symbol_custom, ticks_add[0].time_msc, ticks_add[len - 1].time_msc, ticks_add, len);
     }

   if(total == len)
     {
      LastTime_Added    = last;
      Let_start         = Let_start_local;
      time_msc          = time_msc_local;
      total_len_history = total_len_history_local;
     }
   else
     {
      Print("Tick not replaced : ", GetLastError(), " ", len, " = len but filled = ", total, " in ", symbol_custom);
     }
   return total;
  }
//+------------------------------------------------------------------+

J'ai joint le fichier de dépendance.

J'obtiens cette erreur :

Veuillez m'aider à trouver le problème et à savoir ce que je dois faire exactement pour que cela fonctionne correctement.

L'erreur signifie que je ne remplis pas les cases à cocher de la structure. Mais si c'est le cas, comment se fait-il que les bougies précédentes aient été parfaites ?

п

Dossiers :
Symbol.mqh  7 kb
 
jaffer wilson :

J'ai des problèmes pour remplir les marques personnalisées sur le nouveau graphique. J'essaie de créer un nouveau graphique de symboles avec une heure différente.

Mais j'ai toujours des problèmes pour remplir les marques dans le symbole de la monnaie.

Voici le code :

J'ai joint le fichier de dépendance.

J'obtiens cette erreur :

Veuillez m'aider à trouver le problème et à savoir ce que je dois faire exactement pour que cela fonctionne correctement.

L'erreur signifie que je ne remplis pas les cases à cocher de la structure. Mais si c'est le cas, comment se fait-il que les bougies précédentes aient été parfaites ?

п

Veuillez m'aider avec mon code de symbole personnalisé. Je suis bloqué sur ce point et mon client se met en colère.

 
Toute aide, s'il vous plaît : https://www.mql5.com/ru/forum/372451
Имеется проблема обновления OHLC в CustomSymbol
Имеется проблема обновления OHLC в CustomSymbol
  • 2021.07.01
  • www.mql5.com
Я пробовал следующий код: Но всегда есть обновление, написанное на диаграмме. Плюс название символа другое в окне спецификации...
 

J'ai ouvert le terminal aujourd'hui, téléchargé la mise à jour 2994, MT5 a redémarré. Je vois que tous les symboles ont disparu, y compris de nombreux symboles personnalisés.

Dans le dossier bases\Custom, j'ai toujours les dossiers history et ticks avec les fichiers de données .hc, .hcc, .tkc pour les symboles personnalisés, comment puis-je les utiliser maintenant ?

Attention ! Dois-je vraiment recréer des symboles personnalisés, importer l'historique, etc... ?

 
Sunriser:

J'ai ouvert le terminal aujourd'hui, téléchargé la mise à jour 2994, MT5 a redémarré. Je vois que tous les symboles ont disparu, y compris de nombreux symboles personnalisés.

Dans le dossier bases\Custom, j'ai toujours les dossiers history et ticks avec les fichiers de données .hc, .hcc, .tkc pour les symboles personnalisés, comment puis-je les utiliser maintenant ?

Oh là là ! Dois-je vraiment recréer des symboles personnalisés, importer l'historique, etc.

Vous pouvez essayer de déplacer le dossier Custom vers un autre emplacement et recréer les symboles - les spécifications, pas d'historique. Ensuite, quittez le terminal, copiez à nouveau le dossier personnalisé et démarrez le terminal. L'histoire devrait reprendre.


Il est nécessaire de sauvegarder les paramètres des caractères json du côté du terminal. Suppression accidentelle ou autre désagrément - restaurer à partir de la sauvegarde.

 
fxsaber:

Vous pouvez essayer de déplacer le dossier Custom vers un autre emplacement et recréer les symboles - les spécifications, pas d'historique. Ensuite, quittez le terminal, copiez à nouveau le dossier personnalisé et démarrez le terminal. L'histoire devrait reprendre.


Il est nécessaire de sauvegarder les paramètres des caractères json du côté du terminal. Suppression accidentelle ou autre chose de désagréable - restaurer à partir de la sauvegarde.

Ça a marché. Merci pour le gain de temps !

 

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

Custom Sybmol : ERROR 5308

Dark Ride3r, 2021.06.24 09:55

J'essaie de définir SYMBOL_VOLUME_MIN pour un symbole personnalisé, mais le système renvoie l'ERROR 5308.

J'ai entièrement vérifié que les autres paramètres fonctionnent bien, mais seul SYMBOL_VOLUME_MIN, pour lequel j'ai défini la valeur comme étant double, retourne

ERR_CUSTOM_SYMBOL_PARAMETER_ERROR 5308

Je pense donc qu'il s'agit d'une erreur dans le système et qu'il faut la signaler pour qu'elle soit corrigée.

C'est la méthode que j'utilise pour créer le symbole et définir la propriété : SYMBOL_VOLUME_MIN pour le symbole personnalisé.

(SetProperty(SName, SYMBOL_VOLUME_MIN , 0.001 , "" )