記事「過去のポジションをチャート上に損益図として表示する」についてのディスカッション

 

新しい記事「過去のポジションをチャート上に損益図として表示する」はパブリッシュされました:

今回は、取引履歴に基づいて、過去のポジションの情報を入手するオプションについて考えてみたいと思います。その他、各バーにおけるポジションのおおよその損益を図として表示する簡単な指標を作成します。

この関数は、ポジションの利益ポイント数を取得する相対価格(バーの終了)と、ポジションの存在を確認する時間(バーの開始時間)を取得します。次に、過去ポジションの各オブジェクトから受け取ったすべてのポジションの利益を合計して返します。

コンパイル後、多くの未決済ポジションがある銘柄のチャート上で指標を実行すると、過去のすべてのポジションの利益チャートが描画されます。

作者: Artyom Trishkin

 
興味深い記事だ!
 
重い話題MT5。
 
そうだね...。本当に興味深く、役に立つ作品だ。今のところちらっと読んだだけだけどね。しっかり読み直すつもりだ。自分の開発にコード部分を使うつもりだ。
ありがとう。
 
MQがHistory関数のリストにHistoryPositionGet関数を 追加しなかったのは残念だ。それがあればもっと簡単だっただろう。
Документация по MQL5: Торговые функции
Документация по MQL5: Торговые функции
  • www.mql5.com
Торговые функции - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
fxsaber #:
MQがHistory関数のリストにHistoryPositionGet関数を 追加しなかったのは残念だ。それがあればもっと簡単だっただろう。

だから私たち自身でやらなければならないのです

 

こんにちは、

インジケーターに、すべての損益を表示させるのではなく、累計を表示させるにはどうすればよいでしょうか?

また、可能であれば、線で表示することはできますか?

 
Roman Kutemov #:

こんにちは、

インジケーターにすべての損益ではなく、累計を表示させるには?

また、可能であれば、線で表示できますか?

直感で、確認するまでもなく、すでに受け取った利益に追加するだけで、ポジションから取った利益を毎回記録する必要はありません。

そういう ことだ:

//+------------------------------------------------------------------+
//| カスタム・インジケータ反復関数
//+------------------------------------------------------------------+
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[])
  {
//--- 時系列と同様に、配列closeとtimeのインデックスを設定する。
   ArraySetAsSeries(close,true);
   ArraySetAsSeries(time,true);
//--- アイテムリストの作成に成功したことを示すフラグ
   static bool done=false;
//--- 位置データオブジェクトが作成された場合
   if(history!=NULL)
     {
      //--- 項目リストがまだ作成されていない場合
      if(!done)
        {
         //--- 現在の商品のポジションリストが正常に作成された場合、
         if(history.CreatePositionList(Symbol()))
           {
            //--- ジャーナルにポジションを表示し、ポジションリストの作成に成功したことを示すフラグを設定する。
            history.Print();
            done=true;
           }
        }
     }
//--- インジケータの計算に必要なバーの数
   int limit=rates_total-prev_calculated;
//--- 制限値が1より大きい場合は、これが最初の実行であるか、履歴データに変更があることを意味する。
   if(limit>1)
     {
      //--- 計算に使用するバーの数を、利用可能なすべての履歴と同じに設定し、バッファを「空」の値で初期化する。
      limit=rates_total-1;
      ArrayInitialize(BufferFilling1,EMPTY_VALUE);
      ArrayInitialize(BufferFilling2,EMPTY_VALUE);
     }
//--- シンボル履歴バーのループ
   static double profit=0;
   for(int i=limit;i>=0;i--)
     {
      //--- サイクルインデックスiのバーに存在するポジションの利益を取得し、得られた値を最初のバッファに書き込む。
      profit+= Profit(close[i],time[i]);
      BufferFilling1[i]=profit;
      //--- 2番目のバッファには常にゼロを書き込む。最初のバッファの値がゼロより大きいか小さいかによって決まる、
      //--- 描画された塗りつぶしの色は、インジケータバッファの配列1と配列2の間で変更されます。
      BufferFilling2[i]=0;
     }
//--- 次の呼び出しのためにprev_calculatedの値を返す
   return(rates_total);
  }

まあ、そしてバッファをラインとして - それは自分自身です。フィルは常に2つのバッファを使用するため、1つの余分なバッファを削除する必要があります。そしてラインには1つ必要です。

 

うまくいっていると思う。

あなたの変更を加え、タイプ-ライン・グラフィックを指定しただけです。

バッファは削除していません。

https://www.mql5.com/ru/charts/18738352/nzdcad-d1-roboforex-ltd

График NZDCAD, D1, 2024.01.03 16:11 UTC, RoboForex Ltd, MetaTrader 5, Real
График NZDCAD, D1, 2024.01.03 16:11 UTC, RoboForex Ltd, MetaTrader 5, Real
  • www.mql5.com
Символ: NZDCAD. Период графика: D1. Брокер: RoboForex Ltd. Торговая платформа: MetaTrader 5. Режим торговли: Real. Дата: 2024.01.03 16:11 UTC.
ファイル:
 
通貨はすべて順調のようだが、銀は なぜか常に再描画される。
 
Roman Kutemov #:
通貨では問題ないように見えますが、銀ではなぜか常に再描画されます。

インジケータがどのようなデータを受け取り、なぜ計算されないのかを調べる必要があります。再描画の原因は、リミット値が1より大きいことです。この値は rates_total と prev_calculated の差として計算されます。これらの値を見て、各ティックに何が含まれているかを確認する必要があります。