NewNiceイメージ

前回の記事【メタボリック社長のNewNice戦略】で、RCIのフィルターを付け加えたいという意見がありましたので、RSIのフィルターを追加してその他改良した内容を書いていきます。

前回記事【メタボリック社長のNewNice戦略】へ

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