おそらく、多くのストラテジーには利確と損切の設定が組み込まれているはずです。特に損切の設定がないと自動売買させるわけにはいかないレベルの重要さだと思います。この記事では即時に損切を行ってくれる便利な予約語を用いた自動売買プログラムを記述してみます。
ビルトインストップとは
EasyLanguage は予め定義した損切や利確(ビルトインストップ)の予約語をいくつか持っています。設定に関わらずビルトインストップは現在足で条件が発生したら直ちにストップをかけてくれます。つまり、イントラバーで損切りを即かけてくれるという優れものです。多くの自動売買ストラテジーではこの逆指値(ストップ)が入っていることと思います。
ビルトインストップは、1 つの予約語で決済売りと決済買いの両方を実行します。ビルトインストップの計算をポジション単位にするか、1株単位にするか設定する予約語でまず宣言します。デフォルトではポジション全体(SetStopPosition)で行います。
SetStopPosition :ポジション全体に対して何円で計算する[1]。デフォルトではこちらの方が設定されています。
SetStopShare または SetStopContract:どちらも同じ意味。どちらかを宣言すると1株あたり何円で計算します[1]。
5つのビルトインストップの予約語
SetBreakEven – 同値降り。いったん指定した含み益以上が発生したとき発動する[4]。
例:ポジション全体で10000円の含み益が出たら同値降りする。
SetBreakEven(10000);
SetDollarTrailing – 金額トレーリングストップ。最大含み益から任意の金額分離れた価格にストップ注文を発注します。最大含み益が増えれば、それだけ逆指値価格も上がります(買いポジションの場合)[2]。
例:ポジション全体として最大含み益から1000円さがったところで決済する。
SetDollarTrailing(1000);
SetPercentTrailing – パーセントトレーリングストップ。任意の含み益到達後、最大含み益から任意のパーセント分離れた価格にストップ注文を発注します。最大含み益が増えれば、それだけ逆指値価格も上がります(買いポジションの場合)[3]。
例:1万5千円の含み益がポジション全体にあるときに発動し、最大含み益から15%下がったところで決済する。
SetPercentTrailing(15000, 15);
SetProfitTarget – 利益確定。欲しい利益に含み益が達したら利確する[5]。
例:ポジション全体で10000円の利益が出たら利確したい。
SetProfitTarget(10000);
SetStopLoss – 損切り。任意の含み損に達したとき、成行注文を発注します[6]。
例:ポジション全体で10000円の含み損が発生したら損切する。
SetStopLoss(10000);
ブレークアウトにビルトインストップを入れてみる
では8 期間の最高値から一定値の価格に買い指値注文を置く。また 8 期間の最安値から一定値の価格に売り指値注文を置き、ビルトインストップで決済を行うといったコードを書いてみましょう。ここでは株数単位でビルトインストップの計算を行う SetStopShare を加えます。1株当たり30円の逆行でロスカットし100円の利益で利確するとしましょう。
Input: Length(8);
Buy (“ブレーク買い”) next bar at Highest(High, Length) + 5 limit;
SellShort (“ブレーク売り”) next bar at Lowest(Low, Length) – 5 limit;
SetStopShare;
SetStopLoss(30);
SetProfitTarget(100);
上記のようにBuy や Sell の後ろに(“○”)をつけることで個別のシグナルに名前をつけることができます。
RSI を用いた自動売買ストラテジー
今度は期間 14 足 RSI が 50 より小さく直近の RSI の 7 期間の中で 3 足前以前に RSI の最安値を付けたとき買い、RSI が 50 より大きく直近の RSI の 7 期間の中で 3 足前以前に RSI の最高値を付けたとき売り。ビルトインストップを置くというストラテジーのコードを書いてみましょう。今度はビルトインストップはポジション全体に対して1万円の損切りで設定してみましょう。冒頭で述べたようにビルトインストップはデフォルトでポジション全体となっていますので特に宣言は要りません。利確はポジション全体が1万5千円以上の含み益に達したら30%下のトレーリングで利確してみましょう。
LowestBar と HighestBar は、それぞれ任意の期間の最安値と最高値を付けてからの経過足数を返す関数です。
Input: Length(14);
Vars: xRSI(0);
xRSI = RSI(Close, Length);
If xRSI < 50 and LowestBar(xRSI, 7) > 3 then
Buy next bar at market;
If xRSI > 50 and HighestBar(xRSI, 7) > 3 then
SellShort next bar at market;
SetStopLoss(10000);
SetPercentTrailing(15000, 30);
上記のようにストラテジーに利確と損切り条件を入れたことでひとまず自動売買を行うことが可能になります。損切の深さをバックテストで調整したいときはストップの数値をインプットにすることも便利かなと思います。実際のチャートにこのストラテジーを挿入してみましょう。初期資金100万円で同方向にはポジションを1に制限しています。売買の矢印やちゃんとストップロスもかかっているのが表示されています。
参考文献:
- help.tradestation.com SetStopLoss (Reserved Word)
- help.tradestation.com SetDollarTrailing (Reserved Word)
- help.tradestation.com SetDollarTrailing (Reserved Word)
- help.tradestation.com SetBreakEven (Reserved Word)
- help.tradestation.com SetProfitTarget (Reserved Word)
- help.tradestation.com SetStopLoss (Reserved Word)