Símbolos personalizados. Erros, bugs, perguntas, sugestões. - página 31

 

Existe algum mecanismo para poder compartilhar uma centena de caracteres personalizados com outra pessoa?

A história é fácil de transferir - basta copiar a pasta Custom. Mas as especificações de caráter são pouco claras.

 
fxsaber:

Existe algum mecanismo para poder compartilhar uma centena de caracteres personalizados com outra pessoa?

A história é fácil de transferir - basta copiar a pasta Custom. Mas as especificações de caráter são pouco claras.

Tenho que escrever um roteiro personalizado para carregá-los/baixá-los. Eu não esperaria pela exportação/importação regular.

 
Andrey Khatimlianskii:

É necessário um roteiro de upload/download autoescrito. Eu não esperaria por um roteiro regular de exportação/importação.

É preciso muito esforço, mesmo que pareça simples à primeira vista. Você precisa saber a seqüência correta das propriedades dos símbolos de ajuste. Além disso, há problemas com as sessões de cotação/trading.

Isto é, é preciso muito trabalho para depurar e depurar.

 

Estou tendo problemas para preencher as marcas personalizadas na nova tabela. Estou tentando criar um novo gráfico de símbolos com um tempo diferente.

Mas sempre tenho problemas para preencher as marcas no símbolo da moeda.

Aqui está o 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;
  }
//+------------------------------------------------------------------+

Anexei o arquivo de dependência.

Estou recebendo este erro:

Por favor, ajude-me a encontrar o problema e o que exatamente preciso fazer para que ele funcione corretamente.

O erro significa que eu não estou preenchendo as caixas de seleção na estrutura. Mas se este for o caso, como as velas anteriores pareciam perfeitas?

п

Arquivos anexados:
Symbol.mqh  7 kb
 
jaffer wilson :

Estou tendo problemas para preencher as marcas personalizadas na nova tabela. Estou tentando criar um novo gráfico de símbolos com um tempo diferente.

Mas sempre tenho problemas para preencher as marcas no símbolo da moeda.

Aqui está o código:

Anexei o arquivo de dependência.

Estou recebendo este erro:

Por favor, ajude-me a encontrar o problema e o que exatamente preciso fazer para que ele funcione corretamente.

O erro significa que eu não estou preenchendo as caixas de seleção na estrutura. Mas se este for o caso, como as velas anteriores pareciam perfeitas?

п

Por favor, ajude-me com meu código de símbolo personalizado. Estou preso a isto e meu cliente está ficando com raiva.

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

Abriu o terminal hoje, baixou a atualização 2994, MT5 reinicializada. Vejo que todos os símbolos desapareceram, incluindo muitos símbolos personalizados.

Nas bases\Pasta personalizada eu ainda tenho histórico e carrapatos com arquivos de dados .hc, .hcc, .tkc para símbolos personalizados, como posso usá-los agora?

Advertência! Eu realmente preciso recriar símbolos personalizados, histórico de importação, etc.?

 
Sunriser:

Abriu o terminal hoje, baixou a atualização 2994, MT5 reinicializada. Vejo que todos os símbolos desapareceram, incluindo muitos símbolos personalizados.

Nas bases\Pasta personalizada eu ainda tenho histórico e carrapatos com arquivos de dados .hc, .hcc, .tkc para símbolos personalizados, como posso usá-los agora?

Advertência! Eu realmente preciso recriar símbolos personalizados, histórico de importação, etc.?

Você poderia tentar mover a pasta personalizada para outro local e recriar os símbolos - especificações, sem histórico. Em seguida, abandone o Terminal, copie de volta a pasta Custom e inicie o Terminal. A história deve pegar.


É necessário um backup dos ajustes de caracteres do lado do Terminal. Exclusão acidental ou outro tipo de mau cheiro - restauração a partir de backup.

 
fxsaber:

Você pode tentar mover a pasta personalizada para outro local e recriar os símbolos - especificações, sem histórico. Em seguida, abandone o Terminal, copie de volta a pasta Custom e inicie o Terminal. A história deve pegar.


É necessário um backup dos ajustes de caracteres do lado do Terminal. Eliminado acidentalmente ou outra coisa desagradável - restaurar do backup.

Funcionou. Obrigado pelo tempo economizado!

 

Fórum sobre comércio, sistemas comerciais automatizados e estratégias comerciais de teste

Sybmol personalizado: ERROR 5308

Dark Ride3r, 2021.06.24 09:55

Estou tentando definir SYMBOL_VOLUME_MIN para um símbolo personalizado, mas ele retorna ERROR 5308

Verifiquei completamente que os outros parâmetros funcionam bem, mas apenas SYMBOL_VOLUME_MIN, para o qual defini o valor como duplo, retornando

ERR_CUSTOM_SYMBOL_PARAMETER_ERROR 5308

então eu acho que isto é um erro no sistema e precisa ser relatado para que possa ser corrigido

Este é o método que utilizo para criar o símbolo e definir a propriedade: SYMBOL_VOLUME_MIN para o símbolo personalizado.

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