発注メソッドの引数になる列挙型
発注メソッドのパラメータについて補足します。文字列や小数のほかにcAlgo特有の型が2つ含まれています。
とはいっても、TradeTypeはエントリー方向を文字通りBuyかSellどちらか選択するだけですし、StopTriggerMethodはほとんどの場合、指定する必要がないため迷うことはないと思います。
TradeType
発注時に必ず渡す引数の一つです。売りか買いかを表します。
Buy | 買い |
Sell | 売り |
StopTriggerMethod
ストップ注文の執行方式(というか発注タイミング)を指定します。
stopLossTriggerMethod引数に指定した場合はストップロスに引っ掛かった時の決済方式、PlaceStopOrderのstopOrderTriggerMethodに指定した場合は注文執行方式となります。下記は決済を例に説明します。
Trade | 既定値。普通です。買いポジションはBidが指定したストップロス値を下回ったら、売りポジションはAskが指定したストップロス値を上回ったら決済されます。 |
Opposite | 反対。買いポジションはAskが指定したストップロス値を下回ったら、売りポジションはBidが指定したストップロス値を上回ったら決済されます。 |
DoubleTrade | 1度指定した値を超えただけでは決済されず、2回連続で指定した値を超えたら決済されます。 |
DoubleOpposite | Oppositeの基準で、2回連続で指定した値を超えたら決済されます。 |
使いどころは?
Double系は1瞬値をつけただけでは執行されたくない注文などには使えるかもしれません。ただし2回連続で超えるまで待つため、たいていはDoubleの方が1ティック不利な値で執行される形になります。
値動きの激しい場面では思いがけない損失にもつながりかねませんのでご注意ください。個人的には注文ならともかくストップロスで使うのは怖いです。
Oppositeの使いどころとしては、例えば「(Bidで表示されてる)チャート上でここまでいったら損切したい」といった場合、売りのストップロスにOpposite指定をするのはありかもしれません。
あとお勧めはしませんが、人によっては「早朝時間帯にスプレッドが広がったせいで決済されるのが嫌だ!」という場合に使うこともあるかもしれません。
どちらにせよ当然スプレッド分の損失はのむことになるため、スプレッドが広がってた場合は思わぬ損失になりかねません。そこだけ認識の上、利用しましょう。
バグ注意
なお、バックテスト上ではOppositeで決済された場合の決済価格の処理にバグがありそうです。例えば買いポジションはAskがストップロスを下回ったときに執行されるのですが、決済価格までAskで計算されてしまいます。スプレッド分得しちゃいます。DoubleOppositeでは大丈夫そうでした。(cTrader Ver3.8で確認。)
もしかしたら環境やバージョン次第で再現されないかもしれませんが、「stopTriggerMethodをOppositeにしたら結果がよくなったぜ!yeeeeeeah!」ということがありましたら、ぬか喜びする前に決済価格が本当に正しく記録されてるかビジュアルモードで確認することをお勧めします。