記事"MQL5でのティックインディケーターの作成"についてのディスカッション

 

新しい記事 MQL5でのティックインディケーターの作成 はパブリッシュされました:

本記事では価格のティックチャートをプロットするティックインディケーターと指定ティック数でロウソク足をプロットするTickロウソク足インディケーターの2つのインディケーター作成を考えます。 各インディケーターは受信価格をファイルに書き、このインディケーターのリスタート後にその保存データを使用します。 (これらのデータは他のプログラムでも使用されます)

作者: Denis Zyatkevich

 

興味深い記事をありがとう。

データのバッファリングにファイルを使用することは必須だったのでしょうか?

スタティスの配列を使って、履歴データをメモリ上にバッファリングすることはできなかったのですか?

ありがとうございます。

 

こんにちは!

ローソク足は数秒(5秒、6秒、10秒、12秒、15秒)です。時間に対する価格の変化を見るためです。

 
Silent:

誤字?

記事の本文中に ある 。例では AskBufferが 正しいです。
はい、誤字です。修正しました。ありがとう。
 

こんにちは!

テスターでの仮想ティックの作成を無効にし、時間によるインストゥルメント価格のデータの同期を 行う一方で、提案されたインジケーターが受信したティックファイルをテスターでの多通貨テストに使用することは可能でしょうか?

ありがとうございます。

Документация по MQL5: Получение рыночной информации / SymbolIsSynchronized
Документация по MQL5: Получение рыночной информации / SymbolIsSynchronized
  • www.mql5.com
Получение рыночной информации / SymbolIsSynchronized - Документация по MQL5
 
robinz:

こんにちは!

ローソク足は数秒(5秒、6秒、10秒、12秒、15秒)です。時間に対する価格の変化を見るためです。

これらのチャートは、この記事の範囲を超えているので、私はあなたがそれらを自分で構築することをお勧めします - それは記事で説明されているものよりも複雑ではありません。
rrr:

こんにちは!

テスターでの仮想ティックの作成を無効にし、時間によるインストゥルメント価格のデータの同期を 行う一方で、提案されたインジケーターが受信したティックファイルをテスターでの多通貨テストに使用することは可能ですか?

ありがとうございます。

インジケーターが作成した気配値のファイルは、もちろん他の目的に使用することができます。不要な機能(例えば、チャートの描画)やデータ処理(例えば、異なる商品のデータの同期)を無効にすることをお勧めします。ちなみに、私見では、このようなExpert Advisorの助けを借りて、気配値をファイルに書き込む方が簡単だと思います(添付ファイルにもあります):

int h;
void OnInit()
  {
   string s;
   StringConcatenate(s,Symbol(),".txt");
   h=FileOpen(s,FILE_READ|FILE_WRITE|FILE_ANSI|FILE_SHARE_READ);
   FileSeek(h,0,SEEK_END);
  }

void OnTick()
  {
   string s;
   StringConcatenate(s,TimeCurrent(),"  ",DoubleToString(SymbolInfoDouble(Symbol(),SYMBOL_BID),_Digits)," ",DoubleToString(SymbolInfoDouble(Symbol(),SYMBOL_ASK),_Digits));
   FileWrite(h,s);
   FileFlush(h);
  }

void OnDeinit(const int reason)
  {
   FileClose(h);
  }
ファイル:
ticklog.mq5  1 kb
 

素晴らしい記事です!

tickindicator.mq5を 実行すると、この問題が発生します

インジケーターをコンパイルしました。実行します。

インジケータのウィンドウが表示されます。最小値と最大値の両方が大きく表示されています。そして、インジケーターは水平線に沿って動きます。インジケータの最小値と最大値を固定してみた。インジケータは表示されるようですが、ビッドの上に縦線があります。


 
denkir:

素晴らしい記事です!

tickindicator.mq5を 実行すると、この問題が発生します

インジケーターをコンパイルしました。実行します。

インジケータのウィンドウが表示されます。最小値と最大値の両方が大きく表示されています。そして、インジケーターは水平線に沿って動きます。インジケータの最小 値と最大値を固定して みた。インジケータは表示されるようですが、ビッド上に縦線があります。

インジケータ・バッファのすべての値を初期化する必要があります。

最も可能性が高いのはIMHO - 私はコードを見ていない)

 

どこを修正すべきか教えてください。

M30以上のタイムフレームでは、スケールが乱暴な数字を表示し始める。

 
fyords:

どこを修正すべきか教えてください。

M30以上のタイムフレームでは、スケールが乱暴な数字を表示し始めます。

同僚のDima_Sが 提案したように、インディケータを初期化する際に、バッファを何かで満たす価値があります。

そして、TickIndicator.mq5の コードがあります:

//+------------------------------------------------------------------+
//| OnInit()関数|
//+------------------------------------------------------------------+
void OnInit()
  {
// 配列BidBuffer[]は指示バッファ
   SetIndexBuffer(0,BidBuffer,INDICATOR_DATA);
// AskBuffer[]配列は指示バッファ
   SetIndexBuffer(1,AskBuffer,INDICATOR_DATA);
// 入札ラインのゼロ値は描画されない
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0);
// アスク・ラインのゼロ値は描画されない。
   PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,0);
  }

以下の行を挿入する必要があります:

ArrayInitialize(BidBuffer,0);
ArrayInitialize(AskBuffer,0);
 
denkir:

同僚のDima_Sが 示唆したように、インジケーターを初期化するとき、バッファを何かで満たす価値がある。そうしました:

ArrayInitialize(BidBuffer,EMPTY_VALUE);
ArrayInitialize(AskBuffer,EMPTY_VALUE);

そうしましたが、役に立ちませんでした。

ArrayInitialize(BidBuffer,0.0);
ArrayInitialize(AskBuffer,0.0);
この方法も。