mql5 - 最後の取引から一定時間後の垂直線 - ページ 3

 
renatmt5:
last_timeとresult変数が求めている値であることは正しく理解できました。その結果、線をどれだけ未来にシフト(再描画)させるかが決まります。そして、コードブロック「Profit for the period」をブロック「Move the vertical line」の前に置いて、最後の取引で得られたデータを考慮してラインを移動させる必要があります。
これは正しいのでしょうか、それとも私が何か勘違いしているのでしょうか?

LastProfitForPeriod関数の内部変数です。

最後のトレードの利益の 値を取得したいのですよね?ここで、LastProfitForPeriod()は、最後の取引の利益を教えてくれます。あとは、この利益に応じて縦線を動かすだけである。

 
Vladimir Karputov:

そこで、仕上げに儲かった利益に応じてラインを移動させるのです。

引越しのルールを覚えていますか?

oops, sorry - just to clarify:

- 最後のトレードの結果がマイナスで、その日の結果がマイナスであれば、24時間(24時間)先の未来に縦線を 引きます。
- 最後の取引の結果がマイナスで、当日の結果がプラスの場合、2時間先の未来に縦線を引きます。
- 最後の取引の結果が正であれば、1時間先の未来に縦線を引きます。

 
Vladimir Karputov:

ここでは、「before」パラメータを今後行う必要がある理由を説明します。


ありがとうございました。

 

条件は、最後に取引を行った日(その日に複数の取引があった場合)の結果を要求しています。

 
renatmt5:

おっと、すみません - はっきり言って。

- 最後のトレードの結果がマイナスで、その日の結果がマイナスであれば、24時間(1日)先の未来に縦線を 引くことになります。
- 最後の取引の結果がマイナスで、当日の結果がプラスの場合、2時間先の未来に縦線を引きます。
- 最後の取引の結果が正であれば、1時間先の未来に縦線を引きます。

あ、じゃあ、今日の分の利益も別途取得する必要があるんですね。


LastProfitForPeriod()に修正を加えるために - 我々は、入力時間パラメータ "から "と "を削除し、関数内でこれらのパラメータを形成する:フォーム一日の始まりの時間(それは "から "になります)、および "に我々は現在の時間+日を取得する"。


その結果、LastProfitForPeriod()に2つのパラメータを参照で渡すことになります:その日の利益と最後の取引の利益です。


1日の始まりはiTimeで 取得する

   datetime from_date=iTime(Symbol(),PERIOD_D1,0);

- すなわち、現在の日足バーの開始時刻である。

ファイル:
 

コンパイル済み-素晴らしい
問題点はいくつかあるだけです。
1) インジケータを実装する際、変数Profit last dayの値は、最後の取引の最終日に割り当てられるのではなく、一般的に口座の最終利益に割り当てられます。しかし、その後、インジケータを再計算すると(1~2分程度)、正しい値(最後の取引を行った日の合計利益)に変化しています。今日最後の取引があった口座でしか判断していません。
2)チャートからインジケータを削除する場合、左上の コメントは削除されません。オブジェクトのリストをクリアしても、それらは削除されません。値を消すために端末を再起動するのですが、当然ながら不便です。どうすればもっと簡単にできるのか、私には分かりませんが......。)

最後の取引(期中利益)の計算ブロックの後に、線の作成、線の移動、線の削除のコード(縦線の作成、縦線の移動、縦線の削除)のブロックを配置する方が合理的かもしれませんね。profit_last_dayとprofit_last_dealをもとに計算したn時間分の未来のずれを考慮したラインを引くこと。

のように

if (profit_last_day<=0 and profit_last_deal<=0){n=24;}.

else (profit_last_day>0 and profit_last_deal<=0){n=2;}.

さもなければ{n=1;}。
//---
time = last_time + n;
//---
で、計算した時間値を使って、最後の取引から相対的に時間をずらして線を引く...。

 

バージョン1.002では、保護機能を導入しました。日足バーの開始時刻が「0」を返した場合、それは運命ではなく、我々は終了 します。

//+------------------------------------------------------------------+
//| Profit for the period                                            |
//+------------------------------------------------------------------+
void LastProfitForPeriod(double &profit_last_day,double &profit_last_deal)
  {
   datetime from_date=iTime(Symbol(),PERIOD_D1,0);
   if(from_date==D'1970.01.01 00:00')
      return;
   datetime to_date=TimeCurrent()+60*60*24;

   long last_time=0;


これで、取引口座の存続期間中は要求がなくなります。

ファイル:
 
ウラジミールさん、今回も本当にありがとうございました。
良心と練習で病まないように、自分でコードを書いてみます :) 結果があれば、報告します
 
renatmt5:
ウラジミールさん、今回も本当にありがとうございました。
良心と練習で病まないように、自分でコードを書いてみます :) 結果があれば、報告します

よかったです。

 
ところで、今回追加されたプロテクトには、次のようなポイントがあります。正しい値が計算されるまでに1~2分の遅れがあり、その間は変数がゼロになるので、現在のタイムフレームを別のものに切り替えて素早く更新すると、値はすぐに再計算されます。おそらく、この原理で何かソフトウエアを作ることができるのでは?