条件が満たされた1本後のローソク足でストラテジーの注文が処理されます

デフォルトでは、ストラテジーの計算は1バーにつき1回、バーの終値で行われます。この計算中に、ストラテジーは新しい注文を出したり、既存の注文を更新することができます。しかし既にバーがクローズしている場合、そのバーではもう取引ができませんので、ストラテジーの注文が約定される最も早いタイミングは、次のバーのオープン時となります。この為デフォルトでは、ストラテジーはエントリー条件が満たされた1本後のバーでポジションをオープンします。

この動作は、process_orders_on_close 引数で変更することができ、ストラテジーはバーのクローズ時に注文を約定することができます。これを行うには以下のように、strategy() 関数の宣言に process_orders_on_close 引数を追加して、trueに設定します:

//@version=4
strategy(..., process_orders_on_close=true, ...)

こちらは、process_orders_on_close 引数が無い場合のストラテジーの動作です:

//@version=4
strategy("process_orders_on_close example")
strategy.entry("EN", strategy.long, when = bar_index == 20650)
strategy.close("EN", when = bar_index == 20655)

こちらは、process_orders_on_close 引数を有効にした場合のストラテジーの動作です:

//@version=4
strategy("process_orders_on_close example", process_orders_on_close = true)
strategy.entry("EN", strategy.long, when = bar_index == 20650)
strategy.close("EN", when = bar_index == 20655)

エントリー EN は、bar_index が20650のバーで条件が true になりますが、実際のエントリーはその1つ後の20651のバーで行われます。クローズについても同様で、20655のバーで条件が満たされますが、その次のバーでエントリーがクローズされます。process_orders_on_close 引数を追加して true に設定することで、ストラテジーはバーの終値で注文を約定させることができるようになり、成行注文 EN は、1バー早く約定されるようになります。