Símbolos personalizados. Errores, fallos, preguntas, sugerencias. - página 31

 

¿Existe algún mecanismo para poder compartir un centenar de caracteres personalizados con otra persona?

El historial es fácil de transferir: basta con copiar la carpeta Custom. Pero las especificaciones de los personajes no están claras.

 
fxsaber:

¿Existe algún mecanismo para poder compartir un centenar de caracteres personalizados con otra persona?

El historial es fácil de transferir: basta con copiar la carpeta Custom. Pero las especificaciones de los personajes no están claras.

Tengo que escribir un script personalizado para cargarlos/descargarlos. Yo no esperaría a la exportación/importación regular.

 
Andrey Khatimlianskii:

Se requiere un script de carga/descarga de autoría propia. Yo no esperaría a un script de exportación/importación normal.

Requiere mucho esfuerzo, aunque parezca sencillo a primera vista. Es necesario conocer la secuencia correcta de configuración de las propiedades de los símbolos. Además, hay problemas con las sesiones de cotización/comercio.

Es decir, se necesita mucho trabajo para depurar y depurar.

 

Tengo problemas para rellenar las marcas personalizadas en el nuevo gráfico. Estoy intentando crear un nuevo gráfico de símbolos con una hora diferente.

Pero siempre tengo problemas para rellenar las marcas del símbolo de la moneda.

Aquí está el código:

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

He adjuntado el archivo de dependencia.

Estoy recibiendo este error:

Por favor, ayúdenme a encontrar el problema y qué debo hacer exactamente para que funcione correctamente.

El error significa que no estoy rellenando las casillas de la estructura. Pero si este es el caso, ¿cómo es que las velas anteriores parecían perfectas?

п

Archivos adjuntos:
Symbol.mqh  7 kb
 
jaffer wilson :

Tengo problemas para rellenar las marcas personalizadas en el nuevo gráfico. Estoy intentando crear un nuevo gráfico de símbolos con una hora diferente.

Pero siempre tengo problemas para rellenar las marcas del símbolo de la moneda.

Aquí está el código:

He adjuntado el archivo de dependencia.

Estoy recibiendo este error:

Por favor, ayúdenme a encontrar el problema y qué debo hacer exactamente para que funcione correctamente.

El error significa que no estoy rellenando las casillas de la estructura. Pero si este es el caso, ¿cómo es que las velas anteriores parecían perfectas?

п

Por favor, ayúdenme con el código de mi símbolo personalizado. Estoy atascado en esto y mi cliente se está enfadando.

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

Hoy he abierto el terminal, he descargado la actualización 2994, la MT5 se ha reiniciado. Veo que todos los símbolos han desaparecido, incluidos muchos símbolos personalizados.

En la carpeta bases\Custom todavía tengo las carpetas history y ticks con los archivos de datos .hc, .hcc, .tkc para los símbolos personalizados, ¿cómo puedo usarlos ahora?

¡Atención! ¿Realmente necesito volver a crear símbolos personalizados, importar el historial, etc.?

 
Sunriser:

Hoy he abierto el terminal, he descargado la actualización 2994, la MT5 se ha reiniciado. Veo que todos los símbolos han desaparecido, incluidos muchos símbolos personalizados.

En la carpeta bases\Custom todavía tengo las carpetas history y ticks con los archivos de datos .hc, .hcc, .tkc para los símbolos personalizados, ¿cómo puedo usarlos ahora?

¡Oh, Dios! ¿Es necesario volver a crear símbolos personalizados, importar el historial, etc.?

Podrías probar a mover la carpeta Custom a otra ubicación y volver a crear los símbolos - especificaciones, sin historial. A continuación, salga del Terminal, copie de nuevo la carpeta Custom e inicie el Terminal. La historia debería retomarse.


Se pide una copia de seguridad de la configuración de los caracteres json en el lado de la Terminal. Borrado accidental u otras cosas desagradables: restaurar desde una copia de seguridad.

 
fxsaber:

Puedes intentar mover la carpeta Custom a otra ubicación y volver a crear los símbolos, pero sin historial. A continuación, salga del Terminal, copie de nuevo la carpeta Custom e inicie el Terminal. La historia debería retomarse.


Se pide una copia de seguridad de la configuración de los caracteres json en el lado del Terminal. Borrado accidentalmente o cualquier otra cosa desagradable - restaurar desde una copia de seguridad.

Ha funcionado. ¡Gracias por el tiempo ahorrado!

 

Foro sobre comercio, sistemas de comercio automatizados y prueba de estrategias de comercio

Custom Sybmol: ERROR 5308

Dark Ride3r, 2021.06.24 09:55

Estoy tratando de establecer SYMBOL_VOLUME_MIN para un símbolo personalizado pero devuelve el ERROR 5308

He comprobado completamente que los otros parámetros funcionan bien, pero sólo SYMBOL_VOLUME_MIN, para el que lo puse como doble, devolviendo

ERR_CUSTOM_SYMBOL_PARAMETER_ERROR 5308

por lo que creo que se trata de un error en el sistema y debe ser reportado para que pueda ser arreglado

Este es el método que utilizo para crear el símbolo y establecer la propiedad: SYMBOL_VOLUME_MIN para el símbolo personalizado.

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