datetimefrom_date = time_current-60*60*24; // time one day agodatetimeto_date = time_current+60*60*24; // time from the future :)double last_profit = LastProfitForPeriod(from_date,to_date);
Comment("Last profit: ",DoubleToString(last_profit,2));
last_timeとresultが扱う変数であることは正しく理解しています。その結果、線をどれだけ未来にシフト(再描画)させるかが決まります。そして、"Move the vertical line" ブロックの前に "Profit for theperiod" というコードブロックを置き、最後の取引のデータを考慮してラインを移動させます。 正しいですか、それとも私が何かを勘違いしているのでしょうか?
ラスト・トレード」という言葉を明確にしたい。
現在の日中の最後の取引か?それとも直近のN日間?
24時間以内の最後の取引 - あなたはさらに歴史をさかのぼる必要はありません。
24時間以内に最後のトランザクションが行われるため、これ以上話を進める必要はありません。
その仕組みはこうだ。
このインジケータは、OBJ_VLINE ヘルプから垂直線を作成、移動、削除するコードを使用します。(今のところインジケータではライン作成のみ動作します)。ライン名は入力パラメータ"Vertical line name"で設定する。
縦線はOnOnit()で作成さ れます。
負荷を最小限にするため、1分間に1回、履歴を照会しています。そのために、プログラムのグローバル変数の領域(この場合はインジケータ)で変数ExtLastMoveを 宣言しましょう
- この変数には、取引履歴への最後のリクエストの時刻が格納されます。
そしてOnCalculate()で、現在の時刻(任意のTimeCurrent シンボルを使って最後に引用した時刻)から保存した時刻ExtLastMoveを 引き、その差が60秒未満であれば終了 します。
が大きい場合、ExtLastMoveに新しい時刻を 記録 する。
取引履歴は、LastProfitForPeriod()を使用してアクセスします。
ここでは、fromとtoの2つの日付が使われています。Toは未来(現在時刻+1日)、Fromは 現在時刻から24時間 引いた時刻に設定されます
とりあえず以上です、文字数が多いですね...。
ただ、なぜto_dateが未来と等しい必要があるのかが理解できない。もしかして、今現在まで?今後、取引の 結果を判断することはできないようです :)それとも、未来の時間の中で線引きをするために、この日が必要なのでしょうか?
ループについてもう一つ質問です。
私が理解している限りでは、取引に関するデータを配列にロードし、0件の取引から最後の取引までループさせ、最後に書き込まれた時刻と比較し、取引時刻が遅ければ、変数 last_time を上書きしています。それとも逆で、配列の末尾から検索できるのでしょうか?実際、配列の最後の要素は、データが必要な最後のクローズドトランザクションになるのでしょうか?
もしかしたら、論理的に間違っているかもしれませんが、あまり厳しく判断しないでください :)
そのように必要なのです。現在時刻までの 保証を得るため。
あるいは、配列の末尾から検索することも可能なのでしょうか?
もし、最後の取引を見つけることがタスクなら、配列はその時間を正確に調べなければならない。万が一、何かが起こったり、内部のカーネルロジックが変更されたりして、取引が異なる時間にリセットされることを想定している。
これが、その方法です。から」「現在時刻まで」の取得を保証すること。
もし、最後の取引を見つけることがタスクであるなら、アレイは正確な時間を調べなければならない。何かが起こったり、内部のカーネルロジックが変わったりして、取引がランダムに破棄される場合に備えてだ。
OK、了解です。原理的には、履歴が24時間という制約があるため、データを見る際に大きな負荷がかからないことは明らかです :)
OK、了解です。原理的には、24時間の履歴制限を考えると、データを調べる際に大きな作業負荷がかからないことは明らかです :)
そこで、最後の仕上げとして、儲けに応じてラインを移動させる。
そこでの引越しのルールを覚えていますか?
正しいですか、それとも私が何かを勘違いしているのでしょうか?
ここで、"before "パラメータを今後行うべき理由を説明します。
トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム
エラー、バグ、質問
レナート・ファットフーリン さん 2016.11.04 12:43
TimeCurrent()を終了日として使用せず、TimeCurrent()+86400とし、すべての終了トレードを確実に捕捉するようにします。
TimeCurrentは正確な最終時刻ではなく、「更新中の最後の既知の サーバー時刻」であり、100%正確ではありません。特にスタート時は。