一昨日(東京時間1月13日)の記事で格安EA"SteadyWinner"がカスタマイズ次第で、現在絶好調の24時間スキャルEA"White Tiger"を超える可能性を書いた。その実現のために、少しずつエントリー条件の変更を試している。
今回は"SteadyWinner"のエントリー条件に使用されているRSIを「コナーズの短期売買入門」にあった累積RSIにリプレースしてみた。デフォルトで使用されているRSIは通常の13期間に比べ、かなり短い期間に設定されていたが、短期間RSIは変動が激しすぎるので、累積RSIを使って調整しようというものだ。
今回は"SteadyWinner"のエントリー条件に使用されているRSIを「コナーズの短期売買入門」にあった累積RSIにリプレースしてみた。デフォルトで使用されているRSIは通常の13期間に比べ、かなり短い期間に設定されていたが、短期間RSIは変動が激しすぎるので、累積RSIを使って調整しようというものだ。
まず、RSIの算出は"SteadyWinner"のソースコードでは、「// indicators」のコメントアウト下に並ぶテクニカル指標関数の最下段にある。
double diRSI93 =iRSI(NULL, int timeframe, int period, PRICE_CLOSE, int shift);
※「int timeframe」「int period」「int shift」に当たる数値はソースコードを確認してください。
これを次のように変更し、累積RSIとします。
double diRSI93 = (
iRSI(NULL, int timeframe, 2, PRICE_CLOSE, int shift)
+ iRSI(NULL, int timeframe, 2, PRICE_CLOSE, int shift +1)
+ iRSI(NULL, int timeframe, 2, PRICE_CLOSE, int shift +2)
)/3;
次に「// Stop SteadyWinner from trading if...」のコメントアウト下にあるエントリー条件のうち、「lFlagBuyOpen」と「lFlagSellOpen」の行にあるdiRSI93の条件を次のように変更します。
lFlagBuyOpen = ( ...略... && diRSI93 < 20 ...
lFlagSellOpen = ( ...略... && diRSI93 > 80 ...
これで累積2期間RSIが20未満の時にロング、80超の時にショートのエントリーすることになります。この設定でのバックテスト結果が次のとおり。
期間 1時間足 2007.01.02 01:00 - 2011.01.06 23:00
Initial deposit 1000.00
Total net profit 3218.82
Gross profit 6632.44
Gross loss -3413.62
Profit factor 1.94
Expected payoff 2.99
Absolute drawdown 2.50
Maximal drawdown 183.41 (7.17%)
Relative drawdown 9.29% (154.11)
Total trades 1076
Short positions (won %) 492 (79.27%)
Long positions (won %) 584 (83.05%)
Profit trades (% of total) 875 (81.32%)
Loss trades (% of total) 201 (18.68%)
Largest profit trade 59.10 / loss trade -92.41
Average profit trade 7.58 / loss trade -16.98

前回記事のカスタマイズ結果に比べて、総利益、プロフィットファクター、最大ドローダウン幅、勝率など全てが向上してる。なお、エントリー条件のRSI値は、ロングとショート時で変えた方がバックテストの結果は向上するようだ。ただ、過剰最適化の恐れがあるので同設定にしておいた方が良いでしょう。
最大ドローダウン幅の減少を踏まえて、デフォルト時と同等のリスクを覚悟すれば、ロット数を1.5〜2倍程度に引き上げることが可能だと思う。そうすれば、実質的には"White Tiger"を既に超えているかもしれない。
double diRSI93 =iRSI(NULL, int timeframe, int period, PRICE_CLOSE, int shift);
※「int timeframe」「int period」「int shift」に当たる数値はソースコードを確認してください。
これを次のように変更し、累積RSIとします。
double diRSI93 = (
iRSI(NULL, int timeframe, 2, PRICE_CLOSE, int shift)
+ iRSI(NULL, int timeframe, 2, PRICE_CLOSE, int shift +1)
+ iRSI(NULL, int timeframe, 2, PRICE_CLOSE, int shift +2)
)/3;
次に「// Stop SteadyWinner from trading if...」のコメントアウト下にあるエントリー条件のうち、「lFlagBuyOpen」と「lFlagSellOpen」の行にあるdiRSI93の条件を次のように変更します。
lFlagBuyOpen = ( ...略... && diRSI93 < 20 ...
lFlagSellOpen = ( ...略... && diRSI93 > 80 ...
これで累積2期間RSIが20未満の時にロング、80超の時にショートのエントリーすることになります。この設定でのバックテスト結果が次のとおり。
期間 1時間足 2007.01.02 01:00 - 2011.01.06 23:00
Initial deposit 1000.00
Total net profit 3218.82
Gross profit 6632.44
Gross loss -3413.62
Profit factor 1.94
Expected payoff 2.99
Absolute drawdown 2.50
Maximal drawdown 183.41 (7.17%)
Relative drawdown 9.29% (154.11)
Total trades 1076
Short positions (won %) 492 (79.27%)
Long positions (won %) 584 (83.05%)
Profit trades (% of total) 875 (81.32%)
Loss trades (% of total) 201 (18.68%)
Largest profit trade 59.10 / loss trade -92.41
Average profit trade 7.58 / loss trade -16.98
前回記事のカスタマイズ結果に比べて、総利益、プロフィットファクター、最大ドローダウン幅、勝率など全てが向上してる。なお、エントリー条件のRSI値は、ロングとショート時で変えた方がバックテストの結果は向上するようだ。ただ、過剰最適化の恐れがあるので同設定にしておいた方が良いでしょう。
最大ドローダウン幅の減少を踏まえて、デフォルト時と同等のリスクを覚悟すれば、ロット数を1.5〜2倍程度に引き上げることが可能だと思う。そうすれば、実質的には"White Tiger"を既に超えているかもしれない。
改造記事楽しみにしてました!
エントリートリガーを変えることで、すごい性能UPですね!
とても参考になりました
ありがとうございます(^-^)/