記事についてのディスカッション - ページ 6

 
Mr David Frederick Roberts #: フェルナンド、ありがとう。私が何かバカなことをしているのではないかと疑っていたのですが、どうしてもわかりませんでした!私が言ったように、私はMT4にはるかに精通しており(約8年間)、MT5に2つの "£Every Tick "オプションがあることに気づきませんでした。 私はちょうど彼女を起動し、それが "Every Tick "に設定されているのを見て、それが実際のティックを持っている場合は、それを使用すると仮定しました。単純なことだったのですが、それを見抜いてくれたことに改めて感謝します。
どういたしまして!
 

EqualVolumeBarsの新しいバージョンがどこかにあるのでは?このEAを使っていて2つの問題を見つけました:

1.1.EqualVolumeBarsのコンパイル時に警告が1つ表示される(Symbol.mqhでtimeを_timeに置き換えるなどして簡単に修正できる):

declaration of 'time' hides global variable	Symbol.mqh	28	47

2.バーが消える。私が理解したように、これはターミナルで新しい日が来たときに起こります。例えば、TimeCurrent() の日付が 2023.06.03 (BTCUSD は週末にティックする) で、最後のレンジバーが 2023.06.02 にオープンされた場合2023.06.02 のバーはすべて消えてしまいます

わずか数ステップでこの問題を再現できます:

  • EqualVolumeBarsのライン360をコミットする(チャートが勝手に更新されないようにする):
//ChartSetSymbolPeriod(id,symbolName,PERIOD_M1);
  • EqualVolumeBarsを以下のパラメータでEURAUDチャートに追加します:

以下のようなチャートを取得します:

  • チャート上で右クリックし、[更新]をクリック。結果:


 
Andrei Iakovlev #:

EqualVolumeBarsの新しいバージョンがどこかにあるのでは?このExpert Advisorを使っていて、2つの問題を見つけました:

1.1.EqualVolumeBarsのコンパイル時に1つの警告が表示される(Symbol.mqhでtimeを_timeに置き換えるなどして簡単に修正できます):

2.バーが消える。私の理解では、ターミナルで新しい日が来たときに発生します。例えば、TimeCurrent() の日付が 2023.06.03 (BTCUSD は週末にティックする) で、最後のレンジバーが 2023.06.02 にオープンされた場合2023.06.02 のバーはすべて消えます

この問題はいくつかのステップで再現できます:

  • EqualVolumeBarsのライン360をコミットする(チャートがそれ自体を更新しないようにする):
  • EqualVolumeBarsを以下のパラメータでEURAUDチャートに追加します:

以下のようなチャートを取得します:

  • チャート上で右クリックし、[更新]をクリックします。結果:


新しいバージョンはない。

ターミナルのカスタム文字の実装にはバグがあり、それについてはどこかに書いたが、実際には修正されていない。

この場合、コードを見ることができます - Expert Advisorを起動するときに既存のシンボルが完全に補充されるため、何か余分なものが残っていたり、逆に一日の始まりが消えていたりすると、MQL5 APIはこのように動作します。

ソースコードは公開されているので、問題を解決するための修正を提案することができます。

 

こんにちは、スタニスラフ・コロツキー

カスタムシンボル」トピックに関する様々な方法とタイプについて、ありがとうございました。

ロシア語がわからないので、英語で書いてすみません。)

1 "RenkoTicks "コード内で発生した問題(エラーの一種)

1

お手数ですが、このエラーを削除していただけないでしょうか?

よろしくお願いします。

Stanislav Korotky
Stanislav Korotky
  • 2023.04.26
  • www.mql5.com
Trader's profile
 
mntiwana #:

このエラーを削除する時間を管理してください。

中括弧の中の0を削除してください。ニュースのMQL5構文変更に従ってください。これは少し古いもので、正確なリファレンスが思い出せません。

 
Stanislav Korotky #:

これはちょっと古いんだ、

もう一度言うが、この作品を見つけるのに3年かかった。これが "古い "なら、"古い "はただ...遅い。ハッ。ありがとう。

 

RenkoTicks.mq5について、3桁の価格設定でポイントからピップスへの変換問題が発生しました。以前、MT4のいくつかのユーティリティで同じことを経験したので、同じ修正を実施しました:


//グローバルに挿入
double _PntsToPips;

// OnInitで挿入
if(_Digits == 3 || _Digits == 5)
{
 PntsToPips = 10;
}
else
{
 _PntsToPips = 1;
}

//Pointを含む2行に(sendSpread...にはない)、以下を挿入する。
* _PntsToPips //新しい行は2行になる:

double Renko::boxPoints = NormalizeDouble(RenkoBoxSize * _Point * _PntsToPips, _Digits);
Renko::setBoxPoints(NormalizeDouble(RenkoBoxSize * _Point * _PntsToPips, _Digits));


 

2MAクロスに基づくカスタム・シグナルにおける、小さいながらも重要な改善点を示します。そのため、m_maFast.Main(ind) またはm_maSlow.Main(ind)を 呼び出すと、取引システムがティック(!)単位で取引している場合、インジケータ自体からではなく、オブジェクトからやや古い(キャッシュされた)データを読み込むことになります。これは基本的に直接CopyBufferの ラッパーです:

class Signal2MACross : public CExpertSignal
{
    ...
    // インジケータのデータを読み込むヘルパー関数
    double FastMA(int ind) { static double buffer[1]; m_maFast.GetData(ind, 1, 0, buffer); return buffer[0]; }
    double SlowMA(int ind) { static double buffer[1]; m_maSlow.GetData(ind, 1, 0, buffer); return buffer[0]; }
};

更新したヘッダーファイルを添付します。これは/MQL5/Include/Expert/Signal/MySignals/に 置く必要があります。これがないと、シグナルは完成したバーによってビルドされてしまいます。

ファイル:
 
<br/ translate="no">「このような結果になってしまった。

さらに悪いことが判明しました。新しいティックが発火したときに、時系列がまだ再計算されていない ことがあります。したがって、バーインデックスは取引シグナル分析のために動的に調整されるべきです。例えば(大まかなアプローチ):

    double FastMA(int ind)
    {
      MqlTick t;
      SymbolInfoTick(m_symbol.Name(), t);
      bool correction = false;

      if(t.time / 60 * 60 != iTime(m_symbol.Name(), PERIOD_CURRENT, 0) && ind > 0)
      {
        ind--;
        correction = true;
      }
      
      static double buffer[1]; m_maFast.GetData(ind, 1, 0, buffer);
      
      if(correction)
        PrintFormat("F: %s'%03d %s %.5f", TimeToString(t.time, TIME_SECONDS), t.time_msc % 1000, TimeToString(iTime(m_symbol.Name(), PERIOD_CURRENT, 0)), buffer[0]);
        
      return buffer[0]; 
    }

これは、バー・オープニングで取引するEAや、ティックがまばらなシンボルにとって重要です。

 

また、(bid+ask)/2という計算式を使って平均価格のオンラインチャートを作るにはどうすればよいでしょうか?