Simboli personalizzati. Errori, bug, domande, suggerimenti. - pagina 31

 

C'è qualche meccanismo per poter condividere un centinaio di personaggi personalizzati con qualcun altro?

La cronologia è facile da trasferire: basta copiare la cartella Custom. Le specifiche dei caratteri, d'altra parte, non sono chiare.

 
fxsaber:

C'è qualche meccanismo per poter condividere un centinaio di personaggi personalizzati con qualcun altro?

La cronologia è facile da trasferire: basta copiare la cartella Custom. Ma le specifiche del personaggio non sono chiare.

Devo scrivere uno script personalizzato per caricarli/scaricarli. Non aspetterei l'esportazione/importazione regolare.

 
Andrey Khatimlianskii:

Si richiede uno script di caricamento/scaricamento scritto in proprio. Non aspetterei uno script di esportazione/importazione regolare.

Ci vuole molto sforzo, anche se a prima vista sembra semplice. È necessario conoscere la corretta sequenza di impostazione delle proprietà dei simboli. Inoltre, ci sono problemi con le sessioni di quoting/trading.

Cioè ci vuole un sacco di lavoro per fare il debug e l'analisi.

 

Sto avendo problemi a riempire i segni personalizzati sul nuovo grafico. Sto cercando di creare un nuovo grafico di simboli con un tempo diverso.

Ma ho sempre problemi a riempire i segni nel simbolo della valuta.

Ecco il codice:

//+------------------------------------------------------------------+
//|                                         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;
  }
//+------------------------------------------------------------------+

Ho allegato il file delle dipendenze.

Sto ricevendo questo errore:

Per favore, aiutatemi a trovare il problema e cosa devo fare esattamente per farlo funzionare correttamente.

L'errore significa che non sto compilando le caselle di controllo della struttura. Ma se questo è il caso, come hanno fatto le candele precedenti ad essere perfette?

п

File:
Symbol.mqh  7 kb
 
jaffer wilson :

Sto avendo problemi a riempire i segni personalizzati sul nuovo grafico. Sto cercando di creare un nuovo grafico di simboli con un tempo diverso.

Ma ho sempre problemi a riempire i segni nel simbolo della valuta.

Ecco il codice:

Ho allegato il file delle dipendenze.

Sto ricevendo questo errore:

Per favore aiutatemi a trovare il problema e cosa devo fare esattamente per farlo funzionare correttamente.

L'errore significa che non sto compilando le caselle di controllo della struttura. Ma se questo è il caso, come hanno fatto le candele precedenti ad essere perfette?

п

Per favore aiutatemi con il mio codice di simbolo personalizzato. Sono bloccato su questo e il mio cliente si sta arrabbiando.

 
Qualsiasi aiuto, per favore: https://www.mql5.com/ru/forum/372451
Имеется проблема обновления OHLC в CustomSymbol
Имеется проблема обновления OHLC в CustomSymbol
  • 2021.07.01
  • www.mql5.com
Я пробовал следующий код: Но всегда есть обновление, написанное на диаграмме. Плюс название символа другое в окне спецификации...
 

Aperto il terminale oggi, scaricato l'aggiornamento 2994, MT5 riavviato. Vedo che tutti i simboli sono spariti, compresi molti simboli personalizzati.

Nella cartella basesCustom ho ancora le cartelle history e ticks con i file di dati .hc, .hcc, .tkc per i simboli personalizzati, come posso usarli ora?

Attenzione! Ho davvero bisogno di ricreare simboli personalizzati, importare la cronologia ecc.

 
Sunriser:

Aperto il terminale oggi, scaricato l'aggiornamento 2994, MT5 riavviato. Vedo che tutti i simboli sono spariti, compresi molti simboli personalizzati.

Nella cartella basesCustom ho ancora le cartelle history e ticks con i file di dati .hc, .hcc, .tkc per i simboli personalizzati, come posso usarli ora?

Oh, cavolo! Ho davvero bisogno di ricreare simboli personalizzati, importare la storia ecc.

Potresti provare a spostare la cartella Custom in un'altra posizione e ricreare i simboli - specifiche, senza storia. Poi uscite dal Terminale, copiate di nuovo la cartella Custom e avviate il Terminale. La storia dovrebbe riprendersi.


Si richiede il backup delle impostazioni dei caratteri json sul lato Terminale. Cancellazione accidentale o altre cattiverie - ripristinare dal backup.

 
fxsaber:

Puoi provare a spostare la cartella Custom in un'altra posizione e ricreare i simboli - specifiche, nessuna storia. Poi uscite dal Terminale, copiate di nuovo la cartella Custom e avviate il Terminale. La storia dovrebbe riprendersi.


Si richiede il backup delle impostazioni dei caratteri json sul lato Terminale. Cancellati accidentalmente o altre cose brutte - ripristinare dal backup.

Ha funzionato. Grazie per il tempo risparmiato!

 

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

Sybmol personalizzato: ERRORE 5308

Dark Ride3r, 2021.06.24 09:55

Sto cercando di impostare SYMBOL_VOLUME_MIN per un simbolo personalizzato ma restituisce ERROR 5308

Ho controllato completamente che gli altri parametri funzionano bene, ma solo SYMBOL_VOLUME_MIN, per il quale ho impostato il valore come doppio, restituendo

ERRORE_CUSTOM_SYMBOL_PARAMETER_ERROR 5308

quindi penso che questo sia un errore nel sistema e deve essere segnalato in modo che possa essere risolto

Questo è il metodo che uso per creare il simbolo e impostare la proprietà: SYMBOL_VOLUME_MIN per il simbolo personalizzato.

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