カスタムシンボル。エラー、バグ、質問、提案。 - ページ 31

 

100個のカスタムキャラクターを 誰かと共有できるような仕組みはないのでしょうか?

履歴の移行は簡単で、Customフォルダをコピーするだけです。しかし、キャラクターの仕様が不明です。

 
fxsaber:

100個のカスタムキャラクターを 誰かと共有できるような仕組みはないのでしょうか?

履歴の移行は簡単で、Customフォルダをコピーするだけです。しかし、キャラクターのスペックは不明です。

アップロード/ダウンロードするためのカスタムスクリプトを書かなければならない。私なら通常の輸出入を待つことはしない。

 
Andrey Khatimlianskii:

自作のアップロード/ダウンロード用スクリプトを呼び出す。通常のエクスポート/インポートスクリプトを待つことはないでしょう。

一見、簡単そうに見えても、かなりの努力が必要なのです。シンボルのプロパティを 設定する正しい順序を知る必要があります。さらに、クォート/トレーディングセッションのトラブルが発生する。

すなわち、デバッグに手間がかかる、デバッグができない。

 

新しいチャートにカスタムマークを記入するのに苦労しています。時間を変えて新しいシンボルチャートを作ろうとしています。

しかし、通貨記号のマークを埋めるのにいつも苦労しています。

以下はそのコードです。

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

依存関係ファイルを添付します。

このエラーが発生します。

問題を発見し、正しく動作させるために具体的に何をすればよいのか、ご教授ください。

エラーは、構造上のチェックボックスを埋めていないことを意味します。しかし、そうであるならば、以前のキャンドルはどうして完璧に見えたのでしょうか?

п

ファイル:
Symbol.mqh  7 kb
 
jaffer wilson :

新しいチャートにカスタムマークを記入するのに苦労しています。時間を変えて新しいシンボルチャートを作ろうとしています。

しかし、通貨記号のマークを埋めるのにいつも苦労しています。

以下はそのコードです。

依存関係ファイルを添付します。

このエラーが発生します。

問題を発見し、正しく動作させるために具体的に何をすればよいのか、ご教授ください。

エラーは、構造上のチェックボックスを埋めていないことを意味します。しかし、そうであるならば、以前のキャンドルはどうして完璧に見えたのでしょうか?

п

カスタムシンボルコードについて教えてください。これに引っかかって、クライアントが怒っているんです。

 
何かお手伝いできることがあれば、https://www.mql5.com/ru/forum/372451。
Имеется проблема обновления OHLC в CustomSymbol
Имеется проблема обновления OHLC в CustomSymbol
  • 2021.07.01
  • www.mql5.com
Я пробовал следующий код: Но всегда есть обновление, написанное на диаграмме. Плюс название символа другое в окне спецификации...
 

本日ターミナルを開き、アップデート2994をダウンロードし、MT5を再起動しました。多くのカスタムシンボルを含め、すべてのシンボルが消えていますね。

basesCustomフォルダに、カスタムシンボル用の.hc、.hcc、.tkcデータファイルを含むhistoryフォルダとticksフォルダが残っていますが、今後どのように使用すればよいですか?

警告!カスタムシンボルやインポート履歴などの再作成は本当に必要なのでしょうか?

 
Sunriser:

本日ターミナルを開き、アップデート2994をダウンロードし、MT5を再起動しました。多くのカスタムシンボルを含め、すべてのシンボルが消えていますね。

basesCustomフォルダに、カスタムシンボル用の.hc、.hcc、.tkcデータファイルが入ったhistoryフォルダとticksフォルダが残っていますが、これからどのように使えばいいでしょうか?

まいったなー。カスタムシンボルの作成、履歴のインポートなど、本当にやり直す必要があるのでしょうか?

Customフォルダを別の場所に移動して、シンボルを再作成してみてはいかがでしょうか。スペック、履歴はありません。その後、Terminalを終了し、CustomフォルダをコピーバックしてTerminalを起動 します。歴史は回復するはずだ。


端末側のjson文字設定のバックアップを呼び出す。誤って削除してしまうなどの弊害 - バックアップから復元する。

 
fxsaber:

Customフォルダを別の場所に移動して、シンボルを再作成してみてください - 仕様、履歴はありません。その後、Terminalを終了し、CustomフォルダをコピーバックしてTerminalを起動 します。歴史は回復するはずだ。


端末側のjson文字設定のバックアップを呼び出す。誤って削除してしまうなど、厄介なことに-バックアップからの復元。

うまくいった。時間の節約になりました!ありがとうございます。

 

トレーディング、自動売買システム、ストラテジーテストに関するフォーラム

カスタムSybmol: ERROR 5308

ダークライド3r、2021.06.24 09:55

カスタムシンボルにSYMBOL_VOLUME_MINを設定しようとしていますが、ERROR 5308が返されます。

他のパラメータは問題なく動作することを完全に確認しましたが、SYMBOL_VOLUME_MINだけは、値をdoubleに設定したところ、以下のような結果が返ってきました。

err_custom_symbol_parameter_error 5308

これはシステムのエラーだと思うので、修正するために報告する必要があります。

この 方法でシンボルを作成し、カスタムシンボルにプロパティ:SYMBOL_VOLUME_MINを設定しています。

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

理由: