エラー、バグ、質問 - ページ 2958

 
Mikhail Mishanin:

https://www.mql5.com/ru/search#!author=Vladimir%20Karputov&module=mql5_module_codebase


クエリで何も見つかりませんでした

何を言ってるんだ?
 
Vladimir Karputov:
どういうことですか?

検索がうまくいかない、CodeBaseの 指標を公開日で 絞り込みたかったのに

https://www.mql5.com/ru/search#!keyword=Vladimir%20Karputov&module=mql5_module_codebase&method=2

https://www.mql5.com/ru/search#!keyword=%D0%B8%D0%BD%D0%B4%D0%B8%D0%BA%D0%B0%D1%82%D0%BE%D1%80&module=mql5_module_codebase&method=2&author=Vladimir%20Karputov

目的のものに最も近いもの。

 
Mikhail Mishanin:

検索がうまくいかない、CodeBaseの 指標を公開日で 絞り込みたかったのに

https://www.mql5.com/ru/search#!keyword=Vladimir%20Karputov&module=mql5_module_codebase&method=2

https://www.mql5.com/ru/search#!keyword=%D0%B8%D0%BD%D0%B4%D0%B8%D0%BA%D0%B0%D1%82%D0%BE%D1%80&module=mql5_module_codebase&method=2&author=Vladimir%20Karputov

は、目的のものに最も近いものを選びます。

この2つのリンクは有効です。おそらく、古いリンク形式か、サイトのベースが更新されたのでしょう。

 
Vladimir Karputov:

この2つのリンクは有効です。リンクの形式が古いのか、サイトのデータベースが更新されたのか、どちらかでしょう。

もちろん機能するのですが、私見ですが、期待通りの働きをしてくれないのです。

日付別https://www.mql5.com/ru/code/33553、最初の1枚を見ようかと思いました

で、2枚目には他の作家も入っていました。

もちろん、些細なことです。

 

シンプルでありたいと思います。Market Watchから新しいシンボルがチャートに描画されたとき(つまりシンボルが変わったとき)、それを認識してアクションを起こす必要があるのです。

#property indicator_chart_window

int OnInit()
  {
   return(INIT_SUCCEEDED);
  }

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   return(rates_total);
  }

void OnDeinit(const int reason)
  {
   string old_symbol=_Symbol;
   string new_symbol;

   Print("The current symbol is ",old_symbol,".");

   if(_UninitReason==REASON_CHARTCHANGE)
   {
      new_symbol=_Symbol;
      Print("Was: ",old_symbol,", now: ",new_symbol,".");
   }

   return;
  }

USDCHFにEURUSDを つけたら、こうなった。

2021.02.14 17:56:26.700 test (USDCHF,M20)       The current symbol is USDCHF.
2021.02.14 17:56:26.700 test (USDCHF,M20)       Was: USDCHF, now: USDCHF.

チャート上で同時にペアはもちろんEURUSDに変わります。 チャートからインジケータを取り除くと、(もう手遅れだと) 言われます。

2021.02.14 18:02:54.006 test (EURUSD,M20)       The current symbol is EURUSD.

Aはすぐに期待できる。

2021.02.14 18:00:44.660 test (USDCHF,M20)       The current symbol is USDCHF.
2021.02.14 18:00:44.660 test (USDCHF,M20)       Was: USDCHF, now: EURUSD.

私は何を間違えているのだろう?

EURUSD - Euro vs US Dollar - Курс валют сегодня — Форекс курсы валют
EURUSD - Euro vs US Dollar - Курс валют сегодня — Форекс курсы валют
  • www.mql5.com
EURUSD - Euro vs US Dollar - Графики с курсом по самым популярным валютным парам. Используйте фильтр снизу, чтобы отбирать нужные вам курсы валют. Внутри каждого графика показываются цены спроса и предложения, а также прирост за день.
 
x572intraday:

シンプルでありたいと思います。Market Watchから新しいシンボルがチャートに描画されたとき(つまりシンボルが変わったとき)、それを認識してアクションを起こす必要があるのです。

USDCHFにEURUSDを つけたら、こうなった。

チャート上で同時にペアはもちろんEURUSDに変わります。 チャートからインジケータを取り除くと、(もう手遅れだと) 言われます。

Aが予想される。

私は何を間違えているのだろう?

で何を?

OnDeinit(

OnInitにもっと入れると、すべてがクリアになる。

 
x572intraday:

シンプルでありたいと思います。マーケットウォッチから新しいシンボルがチャートに投げ込まれたとき(つまりシンボルが変わったとき)、これを認識してアクションを起こす必要があります。

インジケータでは、OnDeinitでシンボルを 保存する必要があります(例:global)。OnInitで前のインジケータのOnDeinitを待ち、保存されたシンボルを読み込む。
#property indicator_chart_window
#property indicator_plots   0

#include <Init_Sync.mqh> // https://www.mql5.com/ru/code/18138

int OnInit()
{  
  // https://www.mql5.com/ru/forum/189649#comment_4854618
  if (GlobalVariableCheck((string)ChartID()))
  {
    const string PrevSymb = _GlobalVariableGet<string>((string)ChartID());
    
    if (PrevSymb != _Symbol)
      Alert(PrevSymb + " -> " + _Symbol);
    
    _GlobalVariableDel((string)ChartID());  
  }
    
  return(INIT_SUCCEEDED);
}

void OnDeinit( const int Reason )
{
  if (Reason == REASON_CHARTCHANGE)
    _GlobalVariableSet((string)ChartID(), _Symbol + "");
}

void OnChartEvent( const int id,
                   const long& lparam,
                   const double& dparam,
                   const string& sparam )
{
}

void OnTimer()
{
}

int OnCalculate( const int rates_total,
                 const int prev_calculated,
                 const datetime &time[],
                 const double &open[],
                 const double &high[],
                 const double &low[],
                 const double &close[],
                 const long &tick_volume[],
                 const long &volume[],
                 const int &spread[] )
{
  return(rates_total);
}
この例では、(文字列)ChartID()-name でグローバルなものを作成しています。チャート上に複数のインジケータがある場合、ロジックはもう少し複雑になるはずです。
 
fxsaber:
インジケータでは、OnDeinitでシンボルを 保存する必要があります(例えば、globalに)。OnInitで前のインジケータのOnDeinitの実行を待ち、保存されたシンボルを読み取る。この例では、(文字列)ChartID()-name でグローバルなものを作成しています。チャート上に複数のインジケータがある場合、ロジックはもう少し複雑になるはずです。

TypeToBytes.mqhとcrc64.mqhは正常にコンパイルできましたが、Init_Sync.mqhでエラーが大量に発生しました。つまり、例のコンパイルにすら至っていない件。そして、このようなつまらないタスクには、いくつかのスタブ的なライブラリが必要で、そのうちのいくつかはコンパイルもしたくないと、恐怖とともに考えている。ただ、今まで自作のインジケーター以外、外付けのものを挿したことがなかったんです。

 
x572intraday:

TypeToBytes.mqhとcrc64.mqhは正常にコンパイルできましたが、Init_Sync.mqhはコンパイル時に山ほどエラーが発生しました。

今、コンパイル中です。

ファイル:
 
fxsaber:

コンパイルしてくれています。

うんうん、そういうことだったんですね。