本連載は、まだ取引を開始して間もない方や、現在勉強中だという方を対象に、毎回、ある1つのテクニカル指標をピックアップし、知識編・実践編の2回に分けてご紹介していきます。実践編では、知識編でご紹介したテクニカル指標を売買ルールとして用いて、システムトレードのプログラミングに挑戦していきます。
なお、本連載内で使用されるプログラミングのプラットホームには、ひまわり証券が提供しているシステムトレード用高機能ツール「トレードシグナル」を使います。
前回お届けした「知識編」では、テクニカル指標の代表格とも言える、買われ過ぎや売られ過ぎを判断するオシレーター系指標の一つ、「RSI」をご紹介いたしました。この「RSI」指標を売買ルールとして用いて、[RSI値が70%に達したら売り注文・30%に達したら買い注文]となる自動売買システムを作製していきます。
■プログラム構築ルール
- Cutler氏考案の単純移動平均を用いたRSIを売買ルールに使用
- 対象期間は14日間
- RSI値が70%以上に達したら売り注文、30%以下に達したら買い注文
≪使用公式(CutlerのRSI)≫
RSI(%) = 100-( 100÷( 1+( N日間の値上がり幅合計 ÷ N日間の値下がり幅合計 ))
■プログラム内容
{①プログラムの概要}
Meta: Synopsis( "単純移動平均を用いたCutler氏の「RSI」" );
{②変数の宣言}
Inputs: Price( Close ),
Period( 14, 1 ), //対象期間を14日間と指定
HigherZone( 70, 0, 100 ), //RSIの一般的な買われすぎライン
LowerZone( 30, 0, 100 ), //RSIの一般的な売られすぎライン
ContractsNum(1); //取引枚数のデフォルト値を設定
{③プログラム内で使用される変数の定義}
Variables:
i , up , down , longSig , shortSig , CutlerRSI ;
{④RSI計算式}
up=0;
down=0; //upとdownは0から始まると指定
For i = 1 To Period Begin //Forループによって指定された回数の繰り返し[Inputsで指定した14日分]
If Price[i-1] > Price[i] Then Begin //[もし、終値が一つ前のバーの終値よりも高かったら]の意
up = up + Price[i-1] - Price[i] ;End //N日間の値上がり幅合計の算出
Else If Price[i-1] < Price[i] Then Begin //[もし、終値が一つ前のバーの終値よりも低かったら]の意
down = down + Price[i] - Price[i-1];End;End; //N日間の値下がり幅合計の算出
If down = 0 Then CutlerRSI = 0 //N日間の上昇又は下落が"0"だった場合、RSI値は計算不可となり
Else If up = 0 Then CutlerRSI = 100 //参考数値として、0%や100%として置き換えることとする
Else
CutlerRSI = 100 - ( 100 / ( 1 + up / down ) ); //RSIの算出公式
{⑤売買ロジック作成;1つ前のバーでRSIの値が30を下回ったら"買い"、70を上回ったら"売り"}
shortSig =(CutlerRSI Crosses Over HigherZone); //A crosses over B ; AがBを下からクロスした場合Trueを返す
longSig =(CutlerRSI Crosses Under LowerZone); //A crosses under B: AがBを上からクロスした場合Trueを返す
If longSig Then
Buy("買い") ContractsNum Contracts Next Bar at Market //30を下回ったら"買い"
Else If shortSig Then
Short("売り") ContractsNum Contracts Next Bar at Market; //70を上回ったら"売り"
//****≪ちょっと応用≫****
//**【For…To…Step…】の使用。For Loopは指定された回数、ステートメントを繰り返して適用することができます。
//**上記プログラムでは、For Loopを使用することで、14日分の計算式を1つに短縮しています。
※さらに詳しいプログラミング言語「エキーラ」の解説ガイドはこちら
■プログラム適用後
※チャート上、プログラム内容を確認するため、RSIを表すインディケータを適用しています。
※ここで記載のプログラムは過去データによる検証用として書かれています。実際の自動売買用プログラムとしては、口座やツールの仕様上、このままではお使いいただけません。
参考URL
― 第1回 RSI編 おわり―