2008年2月の記事一覧

マネーマネジメント


今回も、前々回同様にエクセルを使って、複利と単利の利益率とドローダウンの比較が出来るものを作りました!

compound-interest.zip(エクセルファイル「複利と単利の利益率とドローダウンの比較」)


黄色いセルにそれぞれ、

システムの勝率
1取引あたりのリスクに対する利益の比率
1取引あたりの資産に対するリスクの比率
(単利にはリスクの値そのものを入力)
初期資産

を入力します。

すると、取引1000回分の勝敗が勝率を元にランダムに決定されます。

そして、その取引1000回分の勝率と、複利単利それぞれの利率、最大ドローダウン、期待値が計算されます。

設定変更や、空いているセルにアクションを起こす度に再計算されます。

同じ設定で、何度も再計算したときに1度でも利率が-100%になってしまったら、破産リスクがあるということになります。


いろいろと、試してみてくださいね!


でわ、このへんで。


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

2008年2月18日|コメント (15)

カテゴリー:EAの作成方法

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


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

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

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

今回は、マネーマネジメントを除いた、
・ランダムエントリー
・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)

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

ポジションサイジングについて


今回は、ポジションサイジングについてのお話です!

エクセルで勝敗を自由に決められるドル円のバーチャル取引で
資金の推移がわかるものを作ってみました!

まずは、ダウンロードしてみてください。

position-sizing-test.zip(エクセルファイル「PSに対する資金の推移」)

使い方は
黄色くなっているセルを自由に設定します。

まずは、1ドルあたりいくらかを入力します。
資金と書いてある下には、初期資金、右には、取引一回あたりの資金配分率を設定します。

レバレッジと書いてある下には、配分された資金の何倍の取引をするかを入力します。
すると、その列には、何万通貨取引するのかが表示されます。

そして、リミット、ストップ、スプレッドを設定します。
この3つから、値動きがランダムウォークとした場合の勝率理論値が
計算されます。

仮(0=利,1=損)と書いてある列に、自由に勝敗を書き込んでいきます。
利食いしたときは「0」、損切りになってしまったときは「1」と入力します。

仮取引勝率の右のセルに30回の取引の勝率が表示されます。
勝率理論値と仕掛けの優位性を考慮して妥当な仮取引勝率にしてみてください。

グラフは、トレードごとの資金の推移です。

その下には、資金配分とレバレッジでテーブル機能を使い、
最終資金が算出されます。


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

のなかで説明されている、ポジションサイジングの話や、雪合戦の話、確率を味方につけるなどなど、
エクセルで実際に設定してみると分かり易いかもですね!

この本の中にも、ランダムエントリーに勝る仕掛けのシステムはほとんど存在しないと書いてあります。
勝率理論値と仮取引勝率の差を広げすぎると信頼性が低下していまいますので、注意してくださいね!

まだ、読んだことがない方は、
今年、新版が出たのでこちらの方がいいかもですね!

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


でわ、今回はこの辺で。

応援ありがとうございます!
→FXシステムトレード派
→rank応援クリック
→人気ブログランキング

2008年2月 6日|コメント (4)

カテゴリー:EAの作成方法