●買いポジションの場合、その日の安値がストップ以下であれば、手仕舞う
●買いポジションの手仕舞いは、始値がストップを割っていれば寄り付きに始値で、
そうでなければザラ場中にストップの値段で行う●売りポジションの場合、その日の高値がストップ以上であれば、手仕舞う
●売りポジションの手仕舞いは、始値がストップを越えていれば寄り付きに始値で、
そうでなければザラ場中にストップの値段で行う
という実装を行う。
実際は、損切りはロスカットラインを割ったら、
成り行きで手仕舞うことになると思われるが、
シミュレーション上は、設定したロスカットラインで運良く手仕舞えたことになる。
日足データだけでやってるのだから、そこは仕方ない。目安としては妥当。
シミュレーションより実際は少し成績悪くなるものと想定しとかなきゃいけない。
では、ソース見てみよう。
ん、これStopじゃなくてExitなのか、この区別分かりにくいな。
ま、それはされおき、
./lib/rule/exit/stop_out_exit.rb
メソッドcheck_long,check_shortを実装する。
インジケータ使わないからcalculate_indicatorsは実装しない。
ロスカットラインの値はTradeに格納されているので、それを使う。
return unless stop >= price[:low]
のところは、
return if stop < price[:low]
と書くのと意味は同じ、
ちょっと分かりにくいが、上記の定義どおりの実装。
ライン割り込んでなければ手仕舞わない。
あと、
Rubyらしい邪魔くさい書き方も披露。二項目に値を設定してる。
price, time = if stop >= price[:open]
[price[:open], :open]
else
[stop, :in_session]
end
意味は、
寄りで割り込んでたら、寄り値で即手仕舞い、
そうでなければ、(どこかで割り込んでるから)ザラ場でストップの値段で。
値段とタイミングの設定を併記してる。
シミュレーション上はスリッページ考えようがないのだから、
逆差しのストップ設定をしておけば、順調ならこうなる。
売りの時は逆にして実装。
ここは、書き方は若干トリッキーだが、
やってることは、至極合理と思う。
質問コーナー、お問い合わせは、sanpome.net@gmail.com まで。