« 2005年06月 | メイン | 2005年08月 »

2005年07月14日

MetaTrader4 バックテストできます!

MetaTrader4(以下、MT4)がバージョンアップして、ついにバックテストが使えるようになりました!
(ネット旅人さん、情報提供ありがとうございます)

ダウンロード先http://www.metatrader4.com/

MT4の旧バージョンをお使いの方は、自動アップデート機能では、最新版にならない場合があるので、サイトから直接最新版をダウンロードして下さい。上書きインストールでOKです。

MT4のバックテスト機能は、SBFXよりもかなり性能が良くなっているようなので、これからはMT4をメインにシステムを作るようにします。
解説についても順次書き換えていきますので、よろしくお願いします。


投稿者 kawarobo : 06:15 | コメント (0) | トラックバック

2005年07月13日

フォーラム はじめました

フォーラムサイトをオープンしました!
自動売買システムに関する情報交換や、プログラミングの依頼など、
いろいろ使っていただけると嬉しいです。
カワロボ フォーラムhttp://forum.kawarobo.com/


投稿者 kawarobo : 23:59 | コメント (0) | トラックバック

2005年07月11日

為替ロボットの作り方(FXCM用) 出来上がり

PreGCDCをチャートにセット【システムの運用】
以上でシステムが完成しました!

BJD、HO、SBFXを立ち上げた状態で、
SBFXのドル円日足チャートを開き、MAPreGCDCをドラッグアンドドロップ、
Settingsタブの、「Allow Live trading」にチェックを入れて、OK。

StrategyBuilderFX enabled ExpertAdvisorEnable Expert AdvisorをONにして、ニッコリマークが表示されれば運用開始です。
あとはそのまま放っておくだけで、シグナル発生時に自動的にオーダーを実行してくれます。

HyperOrderでFXCMのポジションを確認FXCMでのポジションの状態や残高を確認したいときはHOの画面を開き、
Local Server>Activity> FXCM/RefcoFX/...
から、画面下のタブPositionsAccountを見てください。

【自分のシステムを作ろう】

今回作成したMAPreGCDCの売買ルールでは、バックテストで見たように、成果を得るまで、かなりの期間が必要だと思われます。
実際に自動売買システムを運用をする場合には、もっと効率良く、安定した成果を得られるルールを見つけ出さなければいけません。

満足のいくものを作り上げるのは大変ですが、うまくいけば、寝ていても儲かる夢のようなシステムになる可能性もあります。
是非、自分だけの為替ロボットに挑戦してみましょう!

売買ルールを色々試しながら、独自の儲かる手法を見つけ出すこと自体も楽しいと思いますし、思いつかなければネットや書籍などで紹介されているもの用いても良いでしょう。

プログラミングが苦手な方は、プログラミング依頼用の掲示板を作成しますので、そちらで依頼してみて下さい。


なお、このサンプルではFXCMの口座で売買するためにHyperOrderとBlackJumboDogを利用しましたが、HyperOrderが対応していない他のいろいろなブローカー(外為どっとコム等)でも自動化することができます。
(SBFXのエキスパートプログラムはそのままで、HOとBJDを変更するだけですので簡単です。)
その方法については随時紹介していきますので、ご希望のブローカーがあればどんどんリクエストして下さい。


投稿者 kawarobo : 13:58 | コメント (10) | トラックバック

為替ロボットの作り方(FXCM用) 仕上げ

 [プログラム最終版]
最後に、
シグナル発生時にSBFXがオーダーを(メールに見せかけて)書き出すよう、コードに追加します。

MAPreGCDCを以下のように書き換えます(最終バージョン)
(売買ルールは、
  • GC前になったら買い、DC前は売り
  • 短期移動平均の傾きが反転したらポジションを閉じる
  • ストップロスは150pips
)
*この最終バージョンでバックテストを行う場合は、必ずHyperOrderを停止しておいて下さい。テストによって出力された過去のオーダーが大量に実行されてしまいます。
また、テスト終了後には忘れず、アカウント名(.csv)ファイルを削除して下さい。
 *a メールオーダー用のユーザーファンクションを呼び出します
   参考:UserFunction()


さらに一つ、mailorderというユーザーファンクションを追加します。

*ユーザーファンクションは、Expertプログラム中から呼び出すことのできる外部ファイルです。繰り返し行なう処理や、他のExpertプログラムでも使用したいものをユーザーファンクションにしておくと、あとから修正や拡張したい時に便利です。
今回は、BJDのメール保存フォルダにオーダーを書き出す処理をユーザーファンクションにしました。これは他のExpertプログラムからも呼び出して使うことができます。

UserFunction mailorderの設定MetaEditor
File>new から、「User Function」を選びます。
Nameをmailorderと入力して、OK。
新規ウィンドウが表示されます。

以下のコードを記入して、*3filenamepassの部分を書き換えます。
 filenemaはBJDで設定したメールのアカウント名(.csv付き)
 passはHOで設定した、オーダー用のパスワードです。
 例:アカウント名kawarobo.csv、パスワードorderpassの場合、
  vars: filename("kawarobo.csv"),pass("orderpass");

Verifyボタンあとは、Verifyボタンで保存、コンパイルして出来上がりです。
(ファイル名はmailorder.mql

 *1 inputsでファンクションの引数を宣言。宣言した順に、UserFunction()からの引数が渡される。参考:UserFunction()
 *2 lotmultipleはロット数の単位を調整するための変数。一万通貨はSBFX上では0.1なのに対し、FXCMでは10なので、100倍する。
 *3 アカウント名,オーダー用パスワード。環境に合わせて書き換えが必要
 *4 SwitchでSymbolごとに処理を振り分ける。SBFXではEURUSDのような記述であるのに対し、HOではEUR/USDのように間に「/」が必要。
 *5 ここから、ファイルの読み書き。FileOpen()でcsvファイルを開く。";"は列の区切り文字。今回は「列」を使用しないので関係ない。FileWrite()で一行ずつ書き込み、FileClose()でファイルを閉じる。
 *6 ファイルの最後に読み書きポイントを移動。他の通貨との同時運用の場合を考慮して、オーダーを上書きではなく追記するため。

投稿者 kawarobo : 12:24 | コメント (0) | トラックバック

為替ロボットの作り方(FXCM用) 設定の確認

 [設定の確認]
設定が終わったところで、メールによるオーダーがきちんと通るか確認してみましょう。

*実際にオーダーを出しますので、必ずデモ口座で行なって下さい

BJDとHOを立ち上げた状態で、
以下の文をBJDのアカウント名(メールのアカウント名)をつけてSBFXのExpertsフォルダに保存して下さい。
*太字部分のアカウント名とオーダー用パスワードは適宜書き換えてください

例:ファイル名= kawarobo.csv 
 保存先=C:\Program Files\StrategyBuilderFX\experts

From kawarobo.csv@localhost kawarobo.csv@localhost Mon Jun 27 17:22:04 2005

$HOCOMMAND$,orderpass,BM,EUR/USD,Forex,Cash,,,,EUR,10,0,0


HyperOrderでFXCMのポジションを確認オーダーが通っていれば、HyperOrderの画面、
Localserver> Activity> FXCM/RefcoFX....
を開き、画面下のタブPositionsに、EURUSD買いポジションが表示されているはずです。

*ポジションが表示されない場合はOrdersタブを開き、オーダーが認識されているか、認識されていればその右端にあるInformationの欄でエラーメッセージを確認してください。
Ordersにも表示されていない場合は、
LocalServer> Management> Journal
を見てください。メールが認識されていればここに何らかのメッセージが出ているはずです。

もう一つ、ポジションを閉じるメールも試してみましょう。
以下の文を同じようにBJDのアカウント名をつけてSBFXのExpertsフォルダに保存して下さい。
*太字部分を適宜書き換えてください

例:ファイル名= kawarobo.csv 
 保存先=C:\Program Files\StrategyBuilderFX\experts

From kawarobo.csv@localhost kawarobo.csv@localhost Mon Jun 27 17:22:04 2005

$HOCOMMAND$,orderpass,CP,EUR/USD,Forex,Cash,,,,EUR,,,,


これで、ポジションが閉じられるはずです。


投稿者 kawarobo : 10:09 | コメント (0) | トラックバック

2005年07月10日

為替ロボットの作り方(FXCM用) メール-オーダーの設定

 [BlackJumboDogの設定]
以上を踏まえたうえで、BJDの設定をしましょう。
BJDを立ち上げ、設定>メールサーバ から、メールサーバ設定ダイアログを開きます。

まず、「メールサーバを使用する」にチェックをいれます。
ドメイン名を localhost として、
メールを保存するディレクトリに、SBFXのExpertsフォルダ
 (私の場合はC:\PROGRAM FILES\STRATEGYBUILDERFX\EXPERTS\
を指定します。

次に、利用者タブを開いて、アカウントを追加します。
このときアカウント名には必ず「.csv」を付けてください。
私はアカウント kawarobo.csv 、パスワード mailpass としました。

このようにアカウント名に.csvをつけておくことで、メール保存先となるファイルが見かけ上、.csvファイルになりますので、SBFXから読み書きすることができるようになります。

あとは「OK」を押して、メールサーバ設定ダイアログを閉じて下さい。
以上でBlackJumboDogの設定は終わりです。

ユーザー登録入力画面 [HyperOrderの登録]
次はHyperOrderです。

HOをはじめて起動する時は、ユーザー登録が必要です。
入力は全てアルファベットです。ここで入力したメールアドレス宛てに認証コードが送られますので、正確に記入してください。

HyperOrder認証コードOnline registration」を選択して次へ進み、しばらく待つと、認証コードがメールで届きます。

メールにある認証コードを入力欄にコピペして認証完了です。
HyperOrder認証コード入力

HyperOrderを開く [HyperOrderの設定]
HOが起動すると広告が表示されますが、
それは消さずに、タスクトレイにあるアイコンをダブルクリックして、ウインドウを開きます。

ブローカー設定を開くまずはFXCMと連携するための設定を行います。
LocalServer >Management >BrokerFeeds
にあるFXCM/Refco....右クリックPropertiesを選択します。

ブローカー設定Datafeedタブから
Type=Demo
であることを確認して、Login、Passwordに FXCMデモ口座のIDとパスワードを入力します。

ブローカー設定を有効化
OKでウインドウを閉じ、再び
LocalServer >Management >BrokerFeeds
にあるFXCM/Refco....を右クリックして、
今度はActivateをクリック。
しばらく待つと、FXCMとの接続が完了し、Connected欄にチェックが入ります。
メール設定を開く
次はオーダーメールを受け取る設定をします。
メニューの
 Tools>Email Dispatcher
を開きます。

メール設定Inbox」にチェックを入れて、各項目を入力します。

  • POP3Server= localhost
     (BJDを使うので、localhostで固定です)
  • Account=(BJDで作成したアカウント名)
     例:kawarobo.csv
  • Password=(アカウントのパスワード)
     例:mailpass
  • Check email every=2(ここで指定した秒数ごとにメールチェックします)
  • Ignore older than=0(ここで指定した分数より古いメールは無視。0は全て受け入れる)

  • Process email commands which contain:
    オーダーメール用のパスワードを設定します。オーダーメールにはここで決めたパスワードを記入するようにしてください。
     Password= 例:orderpass
     Confirm password=(確認のためもう一度)
OKで閉じれば設定完了です。


投稿者 kawarobo : 13:38 | コメント (0) | トラックバック

FileClose(csvファイルを閉じる)

 FileOpenで呼び出していたファイルを閉じる。

書式:
FileClose(ファイルハンドル)

 ファイルハンドル= 閉じる対象のファイルハンドル。FileOpen時に得られる

例:
vars: fh1(0),filename1("data1");

fh1=FileOpen(filename1,",");
FileWrite(fh1,"test");
FileClose(fh1);


投稿者 kawarobo : 12:36 | コメント (0) | トラックバック

FileWrite(csvファイルに書き込む)

FileOpenで呼び出したファイルに、値を書き込む。
書き込みは行単位。
FileOpen後、そのままFileWriteした場合は最初の行から上書きされるでの、ファイルの末尾から追記したい場合は、FileSeekで書き込み地点を末尾に移動しておく。

書式:
FileWrite(ファイルハンドル,引数1[,引数2][,...])

 ファイルハンドル= 書き込み対象のファイルハンドル。FileOpen時に得られる
 引数= 書き込む値。「,」に続けて複数指定すると、FileOpenで指定した区切り文字で区切って、一行に書き込む。

例:
vars: fh1(0),filename1("data1"),filename2("data2");

fh1=FileOpen(filename1,",");
FileWrite(fh1,"time","open","high","low","close");
FileWrite(fh1,TimeToStr(time[0]),open[0],high[0],low[0],close[0]);
FileClose(fh1);

fh1=FileOpen(filename2,",");
FileWrite(fh1,"time","open","high","low","close");
FileSeek(fh1,0, SEEK_END);
FileWrite(fh1,TimeToStr(time[0]),open[0],high[0],low[0],close[0]);
FileClose(fh1);
---出力結果---
(data1.csv)
time,open,high,low,close
2005.07.11 00:00,112.18,112.28,111.85,111.92
//常にファイル先頭から上書きしている

(data2.csv)
time,open,high,low,close
2005.07.11 00:00,112.18,112.28,111.85,111.94
2005.07.11 00:00,112.18,112.28,111.85,111.93
2005.07.11 00:00,112.18,112.28,111.85,111.92
//1行目書き出し後、末尾に追記している


投稿者 kawarobo : 12:34 | コメント (0) | トラックバック

FileOpen(csvファイルを開く)

Expertsフォルダ内にあるCSVファイルを呼び出し、ファイルハンドルを返す。
拡張子が.csvとなっているファイル以外は呼び出せない。
ファイルハンドルは、現在呼び出し中のファイルを特定するためのIDのようなもの。読み込みや書き出しなどはこのファイルハンドルで対象ファイルを指定して行なう。
FileOpenで呼び出し、処理した後は必ずFileCloseで閉じなければならない。

書式:
FileOpen(ファイル名,区切り文字)

 ファイル名= expertsフォルダ内の.csvファイルに限る。.csvは省略可
 区切り文字= 列の区切り文字。

例:
vars: fh1(0),fh2(0),filename1("data1");

fh1=FileOpen(filename1,";");
fh2=FileOpen("data2.csv",",");

FileWrite(fh1, Close, Close[1], Close[2]);
FileWrite(fh2,TimeToStr(time[0]),open[0],high[0],low[0],close[0]);
FileClose(fh1);
FileClose(fh2);
---出力結果---
(data1.csv)
111.91;112.16;112.09
//直近3本ぶんの終値

(data2.csv)
2005.07.11 00:00,112.18,112.28,111.86,111.88
//直近の時間と4本値


投稿者 kawarobo : 12:32 | コメント (0) | トラックバック

UserFunction(ユーザー定義のファンクション)

外部ファンクションを呼び出す。
外部ファンクションは、多言語の関数のようなもので、別途ユーザーが作成できる。
入力値(引数)を得て、処理の結果、出力値(返り値)を返す。
呼び出し側で返り値を受け取る記述をしていないと警告が出る。
ファンクションファイルは、Expertフォルダのfunctionsフォルダ内に保存しておく。

書式:
UserFunction(ファンクション名[,引数1][,引数2][,...])

 ファンクション名=
  外部ファンクションのファイル名。拡張子は不要

 引数=
  ファンクションの入力値。必要なければ省略できる。
  数値のみで文字列は不可。
  引数は「,」に続けて複数指定可能。

例:
---呼び出し側(test.mql)---
vars: input1(0),input2(0),theoutput(0);

input1=2;
input2=4;
theoutput= UserFunction("testfunc",input1,input2);

Print("output=",theoutput);// ファンクションの出力値を表示

---ユーザーファンクション(functions/testfunc.mql)---
inputs: i(0),j(0);
//inputs:で宣言した順に引数が割り当てられる。
//この例では、iにinput1(=2)、jにinput2(=4)の値が入る。
var: k(0);

k= i*j;

return(k);

---出力結果---
output=8


投稿者 kawarobo : 12:29 | コメント (0) | トラックバック

2005年07月07日

HyperOrderのデモ警告について

デモ警告旧バージョンのHyperOrderを使っていると、画像のようなデモ警告が表示され、製品版の購入を促すメッセージがでることがあります。

しかし、開発元のサイトではフリーソフトとしてありましたし、フォーラムでもそのように書かれていますので、このデモ警告は旧バージョンの名残(?)かバグだと思って良さそうです。

この警告が出てしまった場合は、一度HyperOrderをアンインストールしてから、最新バージョンをインストールし直すと、使えるようになります。
最新バージョンはこちらのフォーラムにあります。


投稿者 kawarobo : 12:42 | コメント (0) | トラックバック

為替ロボットの作り方(FXCM用) オーダーの仕組み

【自動売買の設定をする】

できあがったプログラムを使って、FXCMの口座で自動売買をするように設定しましょう。

FXCMで自動売買を行う流れは、
 シグナル発生時にSBFXからHyperOrder(HO)にオーダーメールを送り、
 それによってHOがオーダーを実行する
というものです。

メールの送受信部分をもう少し詳しく言うと、
 SBFXから送られたメールをメールサーバーが受信して保管、
 HOメールサーバーに問い合わせて、届いていたメールを引き出す
となります。

ところが、SBFXにはメールを送信する機能はありません。これは困りました。。
どうしたら良いのでしょうか?


 [BlackJumboDogの利用]
そこで、BlackJumboDog(以下、BJD)の登場です。
BJDのメールサーバーの仕組みを、利用させてもらうことにします。

BJDでは、管理するアドレス宛てに届いたメールを、受信用のフォルダに保存します。
その時メールは、あて先のアカウントごとに分けられ、アカウント名の付いたテキストファイル(拡張子なし)として保存されます。
さらにメールが届いた場合は、そのファイルに追記していきますので、アカウントごとに一つずつファイルがあり、そのファイルの中にメールがまとめて保存される形になります。
つまり、アカウント名kawaroboなら、保存フォルダ内の「kawarobo」というファイル(拡張子無し)にkawarobo宛てのメールがまとめて記録されます。


一方、SBFXはメールの送信はできませんが、ファイルを読み書きすることができます。
このファイル読み書き機能を使って、BJDの保存フォルダ内のアカウント名ファイル(先ほどの例で言えば「karawobo」ファイル)に直接書き込めば、あたかもメールを送ったかのように見せかけることができます。

これで、HOがBJDに問い合わせると、BJDは、SBFXによって書き込まれたファイルをメールとして、HOに渡してくれます。

ただし、ここで注意があります。
SBFXが扱えるのは.csvの拡張子がついたCSVファイル限定です。
またファイルの場所はSBFXインストールフォルダ内のExpertフォルダに限られているのです。


投稿者 kawarobo : 11:47 | コメント (0) | トラックバック

2005年07月06日

HyperOrderの入手先変更

これまでのメインページだったwww.hypertrader.itが見れなくなってしまいましたので、HyperOrderは直接、フォーラムからダウンロードするようになります。
復活しました。一時的なダウンだったようです。。

詳しい入手方法はこちらです。


投稿者 kawarobo : 18:10 | コメント (0) | トラックバック

2005年07月05日

為替ロボットの作り方(FXCM用) 変更結果

 [変更版の結果]
それでは、テストをしてみましょう。
チャートはUSDJPY日足で、資金10,000$、手数料0、スプレッド0、every 1 pointです。

結果は+80,318$!
かなりいい数字が出てきました。
ただし、最大ドローダウンが40.6%もあり、実用化するにはかなり気合が要りそうです。。

Typeを1に変えるつづけて、テスター画面のSettingsからTypeをに変えて、Type1のテストをします。

結果、+95,519$、さらにいい値が出ました!
最大ドローダウン26%と、Type0よりはかなりマシになりました。(それでもまだ少し気合の入った数字ですが。。)

type1-100結果Type1はルール上、ポジションが閉じられやすくなっているので、ストップロスにもう少し余裕を持たせてもよさそうです。
StopLoss150200でそれぞれテストしてみました。

結果、ストップ150の時は+111,127$ 最大ドローダウン19.3%
ストップ200の時は+124,176$ 最大ドローダウン24.2%

type1-150結果どちらもトレード数は700~800程度、ロットは1に固定なので、トレード1回あたりの平均値は+150$ぐらいになります。

テストに使用したヒストリカルデータは1978年5月から2005年6月まで27年分
それで7~800回のトレードということは、月に2,3回の割合でシグナルが発生するという、かなり悠長なシステムということになります。


type1-200結果トレイリングストップを付けたり、パラメーターをいじったり、まだまだ手の加えようはあると思いますが、そろそろ次の手順に移りたいので、Type1のストップ150を採用することにします。

次からはいよいよHyperOrderとBlackJumboDogを使ってFXCMのデモ口座での自動売買をセットすることにしましょう。

(ここまでのチャートを見ていた中で、おかしな位置に矢印が出ていることがあり、調べたところ、実はMAPreGCDCのコードのミスがあったことに気が付きました。ルールでは、仕掛けのシグナル発生は「終値が長期線と短期線の間に入りこんだ時」でしたが、その部分をうっかり
 MaShortCurrent < Current and MaShortCurrent < MaLongCurrent
としてしまいました。これでは終値が短期線を越え、さらに長期線も越えてしまった状態も含んでしまいます。本来は、
 MaShortCurrent < Current and Current < MaLongCurrent
としなくてはいけないところです。
ところが、ここを訂正すると成績がかえって悪くなってしまいました。
そこで、あえて間違えたままこの部分を残すことにしました。怪我の功名というのでしょうか。。)


投稿者 kawarobo : 06:14 | コメント (0) | トラックバック

為替ロボットの作り方(FXCM用) ルールの見直し

 [修正の結果]
修正したところで再度バックテストをしてみます。
資金100,000$、手数料、スプレッドは0、modelはevery 1 point、Arrows in the chartにチェックを入れます。

結果、矢印の重なりはなくなりました。

とは言え-15,190$と相変わらずマイナスのままですので、これでは使えません。 他の通貨で様子を見てみましょう。
ドル円日足チャートを開き、MAPreGCDCを適用してテストします。
同じように、資金100,000$、手数料、スプレッドは0、modelはevery 1 point、Arrows in the chartにチェック。
結果、-31,920$とますます悪い結果に。。パラメーターをいろいろいじってみてもよさそうですが、ここではもう一度チャートの様子を見ることにします。

 [チャートに移動平均を表示]
移動平均表示前チャートには売買ポイントを示す矢印が出ていますが、これだけではいまいち分かりません。
MAPreGCDCのルールは、移動平均の長期線と短期線の間に入った時にポジションを取り、GC,DCで閉じるというものでした。
なので、チャート上にも見やすいように移動平均線を表示します。

移動平均を適用NavigatorウインドウのIndicatorsからMovingAverageをチャートにドラッグ。 バックテストでは長期21、短期5(MaLongPeriod(21),MaShortPeriod(5) )としていましたので、Period=21, Method=Simple, Applyto=Close, Shift=0で赤色の長期線(21日)を表示、同じようにして今度はPeriod=5、色をに変えて短期線(5日)を書き出します。

 [ルールの見直し]
移動平均表示後 これで見やすくなりましたが、かなり「だまし」にやられているようです。 しかしそれ以上に、せっかくいいタイミングで入っているときでも、ストップが狭すぎて、損をしているようです。
また、これまではGC、DCで閉じるようにしていましたが、チャートでみると、もう少し粘った方が利益を伸ばせるようにも見えます。
ここをどうにかできないでしょうか。
問題部分
トレーディングシステム入門という本を見たところ、ディレクショナルスロープ法というやり方が載っていました。
ディレクショナルスロープ法とは、短期と長期、2本の移動平均線を使って、クロスではなく、その傾きをもとにシグナルを出す方法で、2本の移動平均両方が上昇(下降)すれば買い(売り)、短期線の向きが反転したところでポジションを閉じるというものでした。
この方法の一部を拝借することにしましょう。
GCやDCで閉じる代わりに、短期線が反転したところで閉じることにします。

コードは以下のようにしました。


新たにTypeという定数を用意しました。
Typeが0のときは、ポジションを閉じる時の条件が「短期線が長期線を越えてから、短期線の向きが反転した時点」となります。
Typeを0以外にすると単に「短期線の向きが反転した時点」となって、長期線を越える前でも即、ポジションを閉じてしまうようになります。

ポジションを閉じる条件とは独立して、ストップロスが設定してありますので、一定額の損失が出たところで強制的に損切りされます。
ストップロスの初期値は少し余裕をもたせて100pipsにしてあります。

投稿者 kawarobo : 06:06 | コメント (0) | トラックバック

為替ロボットの作り方(FXCM用) バックテスト

VerifyボタンMetaTraderボタン

Verify」ボタンを押すと、保存&エラーチェック&コンパイルがされて準備が整います。(ファイル名はMAPreGCDCにしました)
MetaTrader」ボタンでSBFXに戻ります。


【バックテストをする】

mapreを適用とりあえずプログラミングができたので、テストをしてみます。

NavigatorウィンドウのExpertAdvisorsから先ほど作成したMAPreGCDCをEURUSD1時間足チャートにドラッグ。

Strategy TesterタブからStartボタンでバックテストを開始します。

最初の結果結果は、開始直後から-92%と惨敗です。。
時間足で試したのがだめなのでしょうか?日足に変えてやってみましょう。

日足に変更 テスト画面を閉じて、チャート画面に戻り、「D1」ボタンで日足チャートに変えます。
F6キーでテスター画面を出し、もう一度「Start」

結果はやはり-90%と無惨な結果になりました。

 [チャートで確認する]
矢印を表示するシグナルがどのような状態で出ているのか、チャート上で確認してみましょう。
テスター画面の「Arrows in the chart」にチェックを入れて、シグナルの状況がチャート上に表示されるようにします。
先ほどは資金不足で途中で止まってしまいましたので、資金は10倍の100,000ドルにし、手数料やスプレッドは両方0にして純粋な売買結果を見ることにします。
Modelを「every 1 point(slow)」として、スタート。
結果が出たらOKでチャートに戻ります。

多重の矢印ここでおかしな状態が目に付きました。
一本のBarに矢印が大量に重なっています。

これは、ストップロスでポジションが消えたところで、すぐ新たなポジションを取り、またストップに引っかかるということをBar1本の中で何回も繰り返してしまうためのようです。

また、「every 1 point(slow)」でテストをする際、日足のデータを基にランダムで作成した仮想のデータを使用しているというのも影響しているようです。
始値と終値は順番がはっきりしていますが、高値と安値はどちらが先に来るか元の4本値からだけではわかりませんし、高値と安値を何往復もしたのか、安値から高値に一方的に上がっただけなのかもわかりません。

これでは結果の信頼性がありませんので、Bar1本の中で何度もポジションをとらないようにコードを改良します。

 [コードの修正]
MetaEditorに戻って、MAPreGCDCのコードを以下のように書き換えます。

14、16、51、58行目が変更部分。

openbarという変数を作り、ポジションを持った時のBarを記録。そのBar内ではそれ以降の処理をスキップします。
bars」はその時の合計Bar数を得るものです。

投稿者 kawarobo : 05:48 | コメント (0) | トラックバック

2005年07月01日

トップページテスト中

只今、実験的にトップページのデザインを変えてみています。

他のページは全然変わっていませんが。。


投稿者 kawarobo : 03:28 | コメント (0) | トラックバック