投資戦術の検証

利益を出すランダムエントリーシステム!?


魔術師たちの心理学 ― トレードで生計を立てる秘訣と心構え

新版 魔術師たちの心理学―トレードで生計を立てる秘訣と心構え

の中で、紹介しているトム・バッソが行なったランダムエントリーの
実験
の一部を再現してみようかと思います。

今回は、マネーマネジメントを除いた、
・ランダムエントリー
・3倍のボラティリティ・トレイリングストップ

を再現してみましょう!


まずは、パラメータ用の変数を宣言します。

extern int ATRperiod=10;
extern double stoplevel=3;

ATR(average true range)の期間と、
3倍という部分を変えられるようにしました。


つぎに、

int init()
{
//----
MathSrand(TimeLocal());
//----
return(0);
}

乱数を使うときにはMathSrand関数で始まりをセットするのがお決まりのようです。


int start()
{

スタート関数の中身を書いていきましょう!


double atr3=iATR(NULL,0,ATRperiod,0)*stoplevel;

まずは、iATR関数を使って、ATRのstoplevel倍の値を
atr3という小数変数に代入するという文です。


つぎに、

if(OrdersTotal()<1)
{
int sign = MathRand() % 2; //0 or 1
if(sign==0)
OrderSend(Symbol(), OP_BUY, 0.1, Ask, 3, Ask-atr3, 0, "ATR3", 1000, 0, Blue);
if(sign==1)
OrderSend(Symbol(), OP_SELL, 0.1, Bid, 3, Bid+atr3, 0, "ATR3", 1000, 0, Red);
}

として、ポジションが無いときにしてもらうことを書きます。
今回は、このEA以外での取引はしないという前提で書きますね。

内容は、

もし、ポジションや注文中のものが、1より小さい(0の)場合、
乱数を2で割った時の余りをsignという整数変数に代入します。
もし、signが0のとき
買い注文(ストップをAsk-atr3に)します。
もし、signが1のとき
売り注文(ストップをBid+atr3に)します。


といった感じです。
これで、買いか売りかは、半々で決められますね!


つぎに、

else
{
OrderSelect(0, SELECT_BY_POS, MODE_TRADES);

として、ポジションがあるときにしてもらうことを書きます。

内容は、

それ以外の(ポジションや注文中のものがある)場合、
そのポジションを選択します。


今回は、一度に複数のポジションを持つことがないので、インデックスは
常に0ということになりますね。


次に

if(OrderType() == OP_SELL)
{
if(OrderStopLoss() > Ask + atr3)
{
OrderModify(OrderTicket(), OrderOpenPrice(), Ask + atr3, OrderTakeProfit(), 0, Purple);
return(0);
}
}

とします。

内容は

もし、そのポジションが売りの場合、
もし、ストップが現在の買値+ atr3 より大きい時は、
注文変更(ストップを Ask + atr3にする)
終了


といった感じです。

買値やatr3の値が有利に動いたときに、ストップを引き下げていく感じですね。


つぎに、


if(OrderType() == OP_BUY)
{
if(OrderStopLoss() < Bid - atr3)
{
OrderModify(OrderTicket(), OrderOpenPrice(),Bid - atr3, OrderTakeProfit(), 0, Yellow);
return(0);
}
}
}

return(0);
}

として、ポジションが買いの場合も同様にします。

そして、start関数を終了させます。


これでランダムエントリーシステムの完成です!


早速、バックテストをしてみたのですが、
ATRの期間を14くらいにするとよさそうな感じでした。

また、取引機会を増やそうと1時間足で試してみましたが、
ATRの3倍だとすぐにノイズにやられてしまうので、
4.5倍あたりがよさそうな感じでした。


トレンドフォローのストップの目安になりそうですね!


でわ、今回はこのへんで。


応援お願いします!
→FXシステムトレード派
→rank応援クリック
→人気ブログランキング

2008年2月11日|コメント (9)

カテゴリー:投資戦術の検証

ポジションサイジングの検証


今日は、私が使用している売買ルール VolAve に、
前回作ったポジションサイジングの方法(こちらの記事)を適用した結果と
それに対するあれこれです。

VolAve の性質
・薄利を重ねて利益をあげていく
・勝率が高め
・頻度は1日に1回程度

バックテストはHistory Centerのデータを使用

というのを前提に読み進めてくださいね!

まずは、普通にレバレッジ10倍で2000年~2006年の結果を調べてみました。

レバレッジ10倍の結果

7年間で
損益 +9,277%
最大ドローダウン 23.04%

となります。

ここで、前回のポジションサイジングを取り入れると

新たなポジションサイジングでの結果

7年間で
損益 +33,313%
最大ドローダウン 29.41%

となります。


まあ、勝率が高いので基本レバレッジ10倍より利益が大きくなるのは
当たり前ですよね^^;
最大ドローダウンが約30%だとちょっとツライですね。


次に、一定レバレッジで11倍から14倍の損益、最大ドローダウンなどを
調べてみました。

こちら

上から順に11倍から14倍になってます。

これによると、一定レバレッジ13倍で取引したほうが利益があがり
最大ドローダウンもわずかに抑えられたといった結果になりました。

次に、短い期間でその性質をみていきましょう!


その前に一旦、CMです!


FX完全自動売買システム構築のための250の技 MetaTrader4逆引き大全集

↑プロのプログラマーが書いた辞書。本屋さんには売ってません!
MT4で独自の戦術を作るには持っておきたい一品!
今、発売から一ヶ月で300人が購入しています。

FXメタトレーダー入門―最先端システムトレードソフト使いこなし術

↑神奈川大学工学部教授が書いた本。今月発売されました!


魔術師たちの心理学 ― トレードで生計を立てる秘訣と心構え

↑リスク管理、ポジションサイジングの教科書みたいなもの。
システムトレードで自動売買する人は、大体読んでいますよね!
まだの人は、是非読んでください。


はい。
では、一定レバレッジ13倍のものと、新たなポジションサイジングでのものの
去年1年間の結果を見比べましょう!

一定レバレッジ13倍のもの

新たなポジションサイジングでのもの


損益グラフの動きを見てみると、新たなポジションサイジングでのものの
特徴として、
山がとんがっている
谷がまるい
というように、お椀型の連続のような感じになりますね!

連勝中は加速し、連敗中はブレーキをかける感じ。
結果、連勝や連敗が偏るシステムには向いているのかもしれません。

ps
ランキング増えました!
にほんブログ村 為替ブログ FX システムトレード派へポプログ人気fxブログランキング

2007年12月13日|コメント (6)

カテゴリー:投資戦術の検証

Dr.田平のテクニカル


今回は田平雅哉のFX「スイングトレード」テクニックで紹介されているテクニカルを私なりに改造して検証してみました。

本の内容は、Macdの性質やストキャスの性質、ローソク足の性質などを詳しく書いてあり、その組み合わせで利益が出るというもの。

検証といっても、ほんの表面的なところをパクりどんなもんかなぁ~程度に調べてみただけです^^;

今後は、もっと掘り下げて検証を続けていきたいと思います!!

では、どのようなロジックにしたかというと、

トレンドは、移動平均線(200日)の方向で決めます。
次にMacdとストキャスの条件でサインを決めます。
(期間は本の通り)
トレンドとサインが 1 になったら買いでサインが -1 になったら決済といった感じで取引します。
もちろん、一つのバーで2回取引しないようにしておきます。
一部公開

double ave2001=iMA(NULL,0,200,0,MODE_SMA,PRICE_CLOSE,1);
double ave2002=iMA(NULL,0,200,0,MODE_SMA,PRICE_CLOSE,2);
double Macd1=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1);
double Signal1=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1);
double sto1 = iStochastic(NULL, 0, 42, 3, 3, MODE_SMA, 0, MODE_MAIN, 1);

int trend;
if(ave2002 < ave2001)
{
trend=1;
}
if(ave2002 > ave2001)
{
trend=-1;
}

int sign;
if( Macd1>Signal1 && Macd1<0 && sto1<15) sign=1;
if( Macd1<Signal1 && Macd1>0 && sto1>85) sign=-1;

AUDJPYの一時間足で、2000年から七年間をバックテストした結果、
勝率100%でした。しかし、もっと使えるロジックにする必要があるようです・・・。
ロジックはほんの表面だけなので今後よりパワーアップしたいと思います。

また、成果を報告しますね!

2007年11月26日|コメント (8)

カテゴリー:投資戦術の検証