前回の記事【メタボリック社長のNewNice戦略】で、RCIのフィルターを付け加えたいという意見がありましたので、RSIのフィルターを追加してその他改良した内容を書いていきます。
RCIには、インジケーターSpearmanRankCorrを使用します。EA名を【MetaboNewNiceRCI】としました。
EAとインジケーターが入った【MetaboNewNiceRCI.zip】をダウンロード
EAをカスタマイズ
カスタマイズ内容
今回の変更点は、RCIのフィルターを付け加えたのはもちろんですが、ボラティリティ確認のためのバンド幅の初期値を少し広めにとり、シャフのへばりつきの定義を少し和らげました。
その他次の改良をしています。
・ドル口座または円口座を選択可能に
・複数の通貨ペア同時稼働可能に
・残高によるストップ機能追加(まだ使いづらい部分があるのでそれぞれ改良してください。)
追加パラメーター
次のパラメータを追加しています。
extern int RCIPeriod = 52; extern string setsumei2 = "【time】時までに残高【border】を割ったらストップ"; extern bool StopSystem = false; extern int time = 23; extern double border = 0;
start()関数内の処理
残高によるストップ機能
次のように、残高によるストップ機能を追加しています。
if (StopSystem == true && TimeHour(TimeCurrent()) < time && AccountBalance() < border) return(0);
もしStopSystemがtureで、現在時刻がtime未満で、残高がborder未満なら処理終了
仮に、timeを12にしたときは現地の午前中だけ有効なシステムになる感じです。
RCIの値取得
iCustom関数でRCIの1つ前と2つ前の値を取得します。
//RCIの値 double RCI1 = iCustom(NULL, 0, "SpearmanRankCorr", RCIPeriod, 0, RCIPeriod, 0, 1); double RCI2 = iCustom(NULL, 0, "SpearmanRankCorr", RCIPeriod, 0, RCIPeriod, 0, 2);
インジケーターのパラメータがRCIPeriod,0,RCIPeriod,と3つあるのは、1つ目のパラメーターが3つ目のパラメーターの値より大きい場合は計算されないため、1つ目と3つ目を同じ値になるようにしています。
エントリー条件
次のよう買い条件にRCI上昇という条件も加えました。
if (STC[2] < 5 && STC[1] > 5 && RCI1 > RCI2)
シャフのへばりつきとみなす値を次のように5未満としています。
for(i=2; i<=SchaffHebariPeriod; i++) { if(STC[i] < 5) STCcnt = STCcnt + 1; }
売り条件も同様に変更しています。
ロット算出
次のように、クロス円に限り円口座を選択できるようにしました。
double mantuka; if (USD1JPY2 == 1) mantuka = AccountBalance() / 10000; if (USD1JPY2 == 2) mantuka = AccountBalance() / Ask / 10000; int baituka = mantuka * Leverage; double lots = baituka * 0.1; if (lots < = 0.1) lots = 0.1; if (lots >= 1000) lots = 1000;
複数通貨ペア同時稼働可能に
次のように、取引通貨ペアの識別も加えました。
OrderSelect(cnt, SELECT_BY_POS); if (OrderSymbol() == Symbol() && OrderMagicNumber() == 999) CurrentPosition = cnt;
感想
個人的な感想として、RCIとの相性は若干薄いのではといったところです。
また、いい方法があったら教えてくださいm(..)m