2009/02/19

Mizutori_EAの賞味期限


このEAの賞味期限を検討してみました。
対象バージョン:Mizutori20.1_Custom_EA(デフォルト)
使用データ:MQ(2006/1~2009/1)※問題はありますが検証用ということで。
添付グラフの説明:月別に取引回数と利益をまとめてみました。


参考資料:VIX指標(恐怖指数)http://chartpark.com/vix.html
参考資料(VIX指標5年)とグラフを見比べて頂くと類似しているような気がしませんか?
前々から気になっていたことですが、この指標を利用すればある程度このEAの賞味期限がわかってくると思っています。


例えば、VIX30以下になると、極端に取引回数が減少しそれに伴い利益も思うように上げることができなくなってきます。
それが、このEA(20.1)の賞味期限ではないでしょうか?
では、どうすればいいのでしょうか?
パラメータを変更して、取引回数を増やす?
たぶん得策ではありません。
私の考えでは、それを補うための新たなポジション取得条件の追加が必要だと考えています。
そのため、最近のバージョンは、新条件を追加したものが多数存在します。
また、新条件毎のPfの設定もできると面白いかもしれませんね。
もうひとつの賞味期限が、先に訪れるかもしれませんが・・・・・・
ご参考までに・・・・
追記
VIX指数が上限に近づくとどのような動きになるか?という質問がありましたので。
※この内容は、私の予測です。
まず、VIX指数とは、
将来の投資家心理を示す数値として利用されており、英語で「investor fear gauge」、日本語で「恐怖指数」という別名が付けられています。
VIX指数は、通常時10~20の範囲内動き、相場の先行きに不安が生じた時に数値が大きく上昇する特徴があります。 だそうです。 これから予測すると、 ①相場の先行きに不安があれば、投資家は、資金を引き揚げる。 ②引き揚げた資金を違う市場で運用する。(少なからず為替市場にも流れているはず。※市場の出来高がわかればある程度裏付けが取れるかもしれませんが、そのような立場にはいませんので確認が取れません。) ③市場での運用されている方のシステムは、ボラが大きくなれば利益が多くなるシステムだと聞いたことがあります。(順張のシステム?)資金量が増えれば行き過ぎた相場になる。これをウサギだとすると。 ④それを捕食するオオカミが増える。(荒れた相場では、乖離が有効とされているそうです。) ⑤VIXの数値が下がれば、資金が戻る。 ⑥ウサギの餌(資金)が減れば、ウサギも減りオオカミも減る。 ⑦オオカミが減れば、このEAの成績が下がる。 と予測しています。 つまり、このEAは、オオカミ的な要素のEAだと思っています。 ご参考までに・・・・・・

2009/02/13

Mizutori_EAのパラメーターの説明


いろいろなバージョンを作ってしまったので、今回は、25.4を基本に説明します。
共通事項
各パラメータに適用する価格は、極力初値(PRICE_OPEN)を使用しています。
理由は、バックテストした時の誤作動を防止するためです。
終値(PRICE_CLOSE)は、そのバーが確定するまで更新される値です。最新の決定された数値を得ようとすると、初値となります。
トレンドフィルター
double MaSS = iMA(NULL,0,25,0,MODE_EMA,PRICE_OPEN,0);
double MaSM = iMA(NULL,0,50,0,MODE_EMA,PRICE_OPEN,0);
double MaMS = iMA(NULL,0,100,0,MODE_EMA,PRICE_OPEN,0);
double MaMM = iMA(NULL,0,200,0,MODE_EMA,PRICE_OPEN,0);
double MaLM = iMA(NULL,0,300,0,MODE_EMA,PRICE_OPEN,0);
double MaLL = iMA(NULL,0,400,0,MODE_EMA,PRICE_OPEN,0);
上記6つの指数平滑平均線(EMA)を用いてトレンドの発生を監視しています。
各平均線がクロスすることなく、虹状態になった場合に『トレンドが発生した!』としています。
問題点
※『ダマシ』に弱いため、初期でフィルターが効かないことがある。
※『トレンドが発生していない(トレンドが消えた)部分を含んでしまう。』
メインエンジン
double Ma = iMA(NULL,0,MaPeriod,MaShift,MODE_SMA,PRICE_OPEN,0);
double Bands_Ma = iMA(NULL,0,10,0,MODE_SMA,PRICE_OPEN,0);
double Bands = Bands_Ma*(Percent/100);
double MaHi = Ma+Bands;
double MaLow = Ma-Bands;
上記の5つのコードでメインエンジンを構成している。
Maが軸となる移動平均線でデフォルト状態だと、期間5シフトをした期間10の単純移動平均線(SMA)。
Bands_Maは、バンドの巾を形成するための数値を得るための、期間0シフトの期間10の単純移動平均線(SMA)。
Bandsは、Bands_Maを用いて幅を形成しています。
MaHi・MaLowは、Maを軸にした上下の巾を形成したものです。
問題点
※Percentを固定しているため、極端な値動き、値動きが少ない時などの分別が付かない。また、USDJPYM5に特化した数値のため他の通貨ペアに対応しづらい。
サブエンジン
double MaHi_Tr = Ma*(1+Percent_Tr/100);
double MaLow_Tr = Ma*(1-Percent_Tr/100);
メインエンジンに同じ。ただし、使用目的に合わせるために、Percentをメインエンジンと異なる仕様にできるようにしてあります。
期間内の高値と安値の抽出
double HiLimt = High[iHighest(NULL,0,MODE_CLOSE,LimtPeriod,0)];
double LowLimt = Low[iLowest(NULL,0,MODE_CLOSE,LimtPeriod,0)];
LimtPeriod期間内の最も高い(低い)終値がついたバーの高値(安値)をHiLimt/LowLimtに格納
※敗戦処理及びXoxの計算に使用します。
期間内の最高値(最安値)を使用しない理由は、極度に長い髭(瞬間的に付けた値)を回避するためです。
問題点
現在のところ、特にありません。
その他のパラメーター
double RSI = iRSI(NULL,0,14,PRICE_CLOSE,0);
※終値を利用した、期間14のRSI(Relative Strength Index)(相対力指数)

double Dv = iStdDev(NULL,PERIOD_H4,Dv_Period,0,MODE_EMA,PRICE_CLOSE,0);
※終値を利用した、4時間足での標準偏差で、グローバルに値が動いた時のフィルターとして使用しています。
double ATR = iATR(NULL,0,ATRPeriod,0);
※突発的な値動きがあった時のフィルターとして使用しています。
問題点
以下のようなコードの指標のため、バックテストでフィルターが作用し、リアルでは効かない可能性があります。
※ATR (Average True Range)の内部コード
double high=High[i];
double low =Low[i];
double prevclose=Close[i+1];
TempBuffer[i]=MathMax(high,prevclose)-MathMin(low,prevclose)
【高値[0]と終値[1]の高い方から安値[0]と終値の低い方を引いた数値をTempBufferに格納
AtrBuffer[i]=iMAOnArray(TempBuffer,Bars,AtrPeriod,0,MODE_SMA,i);
【TempBufferの期間(デフォルトなら2)の平均がATRの数値となります。】
double stb = iMA(NULL,0,MaLimtPeriod,MaLimtShift,MODE_SMMA,PRICE_OPEN,0);
double st=(HiLimt-LowLimt)/(stb/100);⇒100×((HiLimt-LowLimt)/stb )と置き換えます。
※変動係数(本来は、標準偏差/平均値を意味します。)を求め変動係数が小さい時は、内部エネルギーが蓄積されたと判定し、トレードを制限するために使用します。
※stbは、期間(デフォルト500)の平滑移動平均線で、軸となる価格を抽出するために使用しています。
※stは、高低差を軸となる価格で割ったものを100倍した【変動係数】を格納するものです。
参考
下記の式が上記式に近似します。(添付Bora指標参照:青が下記の指標、白が上記指標です。)
double st=MathLog(HiLimt/LowLimt)*100;
※たぶん、logを使用した方が、本来の意味に近づくと思っています。(USDJPYでは、(HiLimt-LowLimt)/(stb/100)がフィットしています。)
ちなみに LogA=e^Aです。
まとめ
大きなトレンドを避けて、逆張りを行っていけばある程度の成績が可能になると思います。
また、追加もしくは削除しなければならない指標があることでしょう。
フィルターを締め付けると、ほとんど取引をしなくなり、緩めると大きな損益が発生しますので注意してください。
それでは・・・。