質問: ストラテジーでエントリーをクローズする際に‘from_entry’引数が無視されます
回答: *strategy.exit()* 関数では、*from_entry* パラメーターを使用して特定のエントリーをエグジットすることができます。 ストラテジーが複数のエントリーを持つ場合(ピラミッディング)、ストラテジーテスターのトレード一覧でマーケットポジションがクローズされる順番が不明瞭になることがあります。 デフォルトでは、ストラテジーが送信する最初のエグジット注文は、最も古いエントリー注文をクローズします。そして次のエグジット注文は、次に古いエントリーをクローズするといった流れになります。基本的に、ストラテジーは「先入れ先出し (FIFO)」の原則に基づいてトレードをクローズします。 次の例では、*strategy.exit* の呼び出しを特定のエントリーに結びつけるために *from_entry* 引数を使用しています: ``` //@version=4 strategy("close_entries_rule_example", overlay=true, pyramiding = 2) strategy.entry("EN2", strategy.short, when= bar_index == 20650) strategy.entry("EN1", strategy.short, when= bar_index == 20652) if bar_index == 20655 strategy.exit(id = "EX1", from_entry = "EN1", profit = 1, loss = 1) if bar_index == 20657 strategy.exit(id = "EX2", from_entry = "EN2", profit = 1, loss = 1) ``` まず *strategy.entry* は、インデックスが20650のバーでショートポジション *EN2* をオープンし、その2つ後のバーで *EN1* をエントリーします。 そして、bar_indexが20655になった時、*id=EX1* の *strategy.exit()* 関数がエントリー *EN1* をエグジットし、その2バー後に *EX2* が *EN2* をエグジットします。 しかし、ストラテジーテスターの結果は次のようになります: !20657のバーで *EX2* が *EN2* をクローズするようにコーディングされていますが、 IDが *EN2* の最初のトレードは、エグジット注文 *EX1* によってクローズされており、*EN1* は、*EX2* によってクローズされています。つまり最初のエグジット注文が最初のエントリー注文をクローズし、2番目のエグジット注文が2番目のエントリーを閉じています。これは典型的な *FIFO* の動作です。 ストラテジーが任意の順序で注文を閉じることができるようにするには、*strategy()* 関数の *close_entries_rule* 引数を(デフォルトの *FIFO* ではなく)*ANY* に設定する必要があります。例: ``` //@version=4 strategy(..., close_entries_rule="ANY", ...) ``` *ANY* の値を指定する事で、ストラテジーはどのエグジット注文がどのポジションを閉じるかを決定することができます(*close_entries_rule* 引数が指定されていない場合でも、*FIFO* が暗黙のうちにデフォルトとして設定されていることにご注意ください)。 *strategy()* の呼び出しを以下のように変更すると、 ``` strategy("close_entries_rule_example", close_entries_rule="ANY", overlay=true, pyramiding = 2) ``` ストラテジーテスターの結果が変わります: !このケースでは、(時系列的に)最初のエグジット注文 *EX1* が2番目のエントリー *EN1*を閉じ、2番目のエグジットが最初のエントリーを閉じています。