基礎から学ぶシステムトレード
シストレブログ人気ランキング  

シストレ徹底攻略シストレマスターへの道ワールド・トレーディング・エッジ基礎から学ぶシステムトレードシストレニュースシストレツールシストレナビTOPへ

 

著書のご紹介

2010年06月28日(月)

ランダムウォークとランダムトレード(6) [ランダムウォーク]

前回、MT4の最適化の機能を使ってランダムトレードを繰り返して実行させてみました。

今回は、同じEAを違う期間に対して適用させてみます。

通貨ペアは同じくUSDJPYで、日足チャートに対してのテストですが、期間は1995年7月から1998年6月の3年間と、2007年1月から2009年12月の3年間を選んでみました。

それぞれのチャートは以下の通りです。

画像(450x274)・拡大画像(671x409)
画像(450x274)・拡大画像(671x409)

見てわかるように、明らかに上昇局面と下降局面です。

これらの期間で、ランダムトレードを各1000回繰り返してみます。

方法は前回と同じなので省略します。結果は、どちらの期間も、プロフィットファクター(PF)が1を超えた、つまり、利益が出た回数が283回となりました。

さらにPFの最高値も前者が1.43、後者が1.68となりました。

前回テストした期間では、利益223回、PFの最高値1.38でしたから、今回のテストの方が結果がよくなっています。

これはどういうことかというと、前回テストした期間と今回テストした期間では、1日あたりの平均価格変動が違っているのです。

前回のテストでは、途中で価格の上下はありますが、最終的に期間の終わりで価格は戻ってきています。つまり、テスト期間での変動が0に近いので、1日あたりの平均価格変動は0に近くなっています。

それに対して、今回のテストでは、上昇局面では平均価格変動はプラスに、下降局面ではマイナスとなっています。

ここで、ランダムトレードの性質について考えてみます。

ランダムトレードはいくらランダムと言っても、買いと売りの回数が常に全く同じではなく、どちらかに偏ることがあります。

平均価格変動が0であれば、売買が偏っても損益に大きな差はありません。極端な話、全部買ったり、全部売ったりしても、平均が0なので、結局損益も0に落ち着くということになります。

ところが、平均価格変動が0から外れているとどうでしょう?

平均価格変動がプラスであれば、買いの方が多い場合、利益になります。逆にマイナスであれば、売りの方が多い場合に利益となります。

もちろん、平均価格変動がプラスで、売りの方が多い場合と、平均価格変動がマイナスで、買いの方が多い場合は損失となりますから、絶対的に有利になるわけではありません。

しかし、パフォーマンスの上下のブレが大きくなり、たまたま現れる利益、損失の範囲が広くなります。

ランダムトレードでもこれくらいの結果が出るということを知っておくと、実際のシステムのバックテスト結果がたまたまかどうかの目安になるのではないかと思います。

Posted at 18時31分 パーマリンク


2010年06月21日(月)

ランダムウォークとランダムトレード(5) [ランダムウォーク]

前回作成したランダムにトレードするEAですが、ランダムだけあって毎回結果は違います。

この毎回の違いを1回ずつ手動で見るのはなかなか大変です。

そこで、これをまとめて実行するために、メタトレーダーの最適化の機能を利用します。

但し、最適化と言っても、何かのパラメータを本当に最適化するのではなく、単に同じEAを繰り返して実行させるだけです。

簡単には、プログラムの最初に、

extern int Count = 0; // カウンター

という文を追加するだけです。

本来ならこれだけでいいのですが、1回あたりのバックテストにかかる時間が非常に短い場合、乱数の開始点を設定するMathSrand()で指定したGetTickCount()が同じ値を返してしまうことがあります。

そこで、GetTickCount()+Count として、毎回違う開始点になるように細工しました。
int init()
{
MathSrand(GetTickCount()+Count);
}

次に、テスターの画面の右上の「Expert Property」というボタンを押して次のような画面でCount を変化させる範囲を設定します。

画像(450x194)・拡大画像(667x288)

>>この記事の続きを読む

Posted at 18時50分 パーマリンク


2010年06月14日(月)

ランダムウォークとランダムトレード(4) [ランダムウォーク]

前回、MQL4のプログラムで乱数列を発生させる方法を紹介しました。

乱数列を使うとランダムウォークが作れるのですが、MT4でランダムウォークを作っても面白くないので、ここではトレードをランダムに行うランダムトレードをプログラムしてみます。

ランダムトレードといっても色々と考え方があると思いますが、今回は簡単に次のようなルールにします。

各バーの始値で買うか、売るかをランダムに決めトレードを行い、終値で決済する。

この程度の売買ルールであれば、EasyLanguageだったら簡単に書けると思うのですが、MQL4ではちょっと厄介になります。

まずは、各バーの始値で売買オーダーをランダムに送信するところだけをEAとしてプログラムしてみます。バックテストできるだけの簡易版です。
extern int Magic = 12345678; // マジックナンバー
extern double Lots = 0.1; // ロット数
extern int Slippage = 3; // スリッページ

// 初期化関数
int init()
{
MathSrand(GetTickCount());
}

// スタート関数
int start()
{
// 新しいバーの始値でオーダー
if(Volume[0] == 1)
{
int signal = MathRand() % 2;

// 買いオーダー
if(signal == 1)
{
OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, "", Magic);
}
// 売りオーダー
else
{
OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, "", Magic);
}
}

return(0);
}

ここで、前回紹介したMathRand()、MathSrand()について説明しておきます。

MathSrand()はプログラムの最初に1回だけ実行すればよいので、EAの場合、init()関数で実行します。

MathRand()では2で割った余り、つまり、0か1をランダムで求めます。このシステムでは必ず買いか売りかを実行するので、1を買い、0を売りにしています。

ただ、このままでは決済の条件が書かれていないので、正しく動作しません。

>>この記事の続きを読む

Posted at 18時51分 パーマリンク


過去の記事へ

ページのトップへ ページのトップへ

Sponsor AD

シストレナビモバイル

シストレナビモバイル
ケータイでバーコードを読み取りアクセス(詳細はこちら

プロフィール

豊嶋久道

2003年よりFX取引を始め、システムトレードの道へ。最近ではFXオプション取引も含めたトレーディングシステムの研究を行っている。システムトレードを基礎から正しく理解するための情報を発信する予定。

活動状況・Website

ToyolabFX
Toyolab FX-手ぶらで為替取引
FXトレーディング研究所。
FXメタトレーダー入門
FXメタトレーダー入門
最先端システムトレードソフト使いこなし術。
FXメタトレーダー実践プログラミング
FXメタトレーダー実践プログラミング
システム開発過程を段階的に学ぶ。

2017/6

        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30  

PHOTO

実際の相場におけるランダムウォーク

実際の相場におけるランダムウォーク

カテゴリーリスト

最近の記事

スポンサードリンク

検索


上記の検索結果のRSS情報です RSS1.0

当サイトコメントについて

当コメントは情報提供のみを目的として作成されたものであり、投資に関してはご自身でご判断くださいますようお願い致します。また、当資料は著作物であり著作権法により保護されております。無断で全文または一部を転載することはできません。

RSS1.0

[Login]


powered by a-blog
Copyright (C) 2008 PhiConcept,Inc. All rights reserved.