システムトレード研究所 〜FXで完全自動売買〜

このサイトでは、FXで完全自動売買を行うために必要な情報を書いていこうと思っています。システムを自分で作りたい方、システムトレードをやってみたい方は御覧になっていって下さい。
<< テクニカル分析 | main | Visual modeの簡単な使い方 >>
最適化を利用する
こんばんはDCです


今回はMetaTrader4を使った最適化についてお話します。




皆さんは自分の作ったシステムなどの最適な数字に興味がありませんか?

例えばMACDのゴールデンクロスとデッドクロスでポジションを取るシステムがあったとします。
MACDのパラメーターはどの様な数値が一番利益が出るのでしょうか?

そんな疑問を有る程度解決してくれるのが最適化です。





MetaTrader4にデフォルトで「MACD Sample」というシステムがあると思います。最適化を使って過去の相場における最適な数字を探してみましょう。

みなさんは、調べてみたいシステムを選んでください。ただし、パラメーターが変更できるタイプのものを選んでくださいね。




まず、バックテストで使うテスター画面を表示しましょう。

テスターの出し方が分からない方は、以前こちらでも説明させて頂いてます。




テスター画面





上の画像の赤い○で囲っている部分をクリックしてパラメーターを呼び出してください。




パラメーター画面




上の画像の赤い○で囲っている部分に注目してください。



左側の赤い○はチェックボックスになっています。最適化したいパラメーターはここにチェックを入れます。
上の画像では、「MACDOpenLevel」「MACDCloseLevel」「MATrendPeriod」の三種類を最適化します。


右側の赤い○はパラメータの設定になります。

スタートの数字からストップの数字までを調べます。その際、ステップで決めた数値をスタートに足していきます。
MACDOpenLevel」の場合、2〜7までを1ずつ増やしながら調べます。

設定が出来たら、OKボタンを押します。




Optimizationにチェック




次は上の画像の赤い○で囲っている「Optimization」にチェックをしてください。

後は、バックテストの時と同じように調べる期間などを決めてスタートを押すだけです。




しかし気をつけて頂きたいのが、最適化の数です。

あまり欲張って、パラメーター画面のスタート、ストップ間を広げたり、調べるパラメーターの種類を増やしたりすると終了までにものすごい時間がかかるだけでなく、
パソコンのスペックしだいでは全然動かなくなるぐらい動作が重くなったり、終了間際にメモリーが足りませんといわれて結果が見れなかったりします。

何事もほどほどがいいようです(笑)




この作業はパソコンの処理能力をすごく使いますので、パソコンのスペックと相談しながら、有効に利用してください。




テスター画面2




最適化が終わると、赤い○の場所に今までには無かった「Optimization Results」「Optimization Graph」というタブが出てくると思います。



Optimization Results




Optimization Resultsタブでは、最適化の結果が表示されます。一番右のパラメーターの入力という場所には、最適化された内容の数値が分かるようになっています。
左側の損益、Total Trades、Protit factor、Expected Payoff、Drawdoun $、Drawdown %、などを見て気に入った数値を探しましょう。




Optimization Results




Optimization Graphタブでは、Optimization Resultsに書いてあるPassナンバーをグラフで表しています。成績の良いパラメーターを探す参考にしてください。




この結果を元に、自分の気に入ったパラメーターを探し出してください。

一つ一つパラメーターを変えながらバックテストするよりもずっと時間を短縮できると思います。

ですが、あまりやり過ぎるとカーブフィッティングになります。



あくまで数値を相場にあわせる作業ですので、その事をよく考えて利用したほうがいいと思います。

結果を分析して、参考にしてください。




今回は、これで終了です。

また機会があれば、もう少し詳しくご紹介したいと思います。






システムトレード研究所〜FXで完全自動売買〜INDEXへ


オーダーシステム





---------------------------------------注意---------------------------------------


 内容には注意を払っていますが、保障は出来ません。
 実際に運用する場合は、自己責任でお願いします。


| 小松 | システムトレード実践編 | 11:16 | comments(3) | - |
管理者の承認待ちコメントです。
| - | 2009/12/11 6:10 AM |

いつもご質問に答えていただいてありがとうございます。
メタトレーダーのEAの自作に挑戦しているのですが
うまく動作せず困っています。(注文が執行されない)。

EAの内容は、
ストップロスでポジションが無くなったあと、
5分間ウェイト時間をおいてから、
次の買いの条件になったら(BB下を割ったら)
買い注文を出す、というものです。

すいませんが何か
ヒントを教えてくださいませんでしょうか?
Sleep関数を使ってもうまくいきませんでした…

// ポジションチェック 無し
if(CurrentPosition == -1){
  
if (BarCount != Bars) {
BarCount = Bars;

if (WaitTime != 0)
WaitTime--;
}

  if(WaitTime <= 0)  {
    //買いサイン
     if(iClose(NULL,0,0) < iBands(NULL,0,20,2,0,PRICE_CLOSE,MODE_LOWER,0)){
      //買いポジション
      Ticket = OrderSend(Symbol(), OP_BUY, 1, Ask, 3, Ask-(200*Point), Ask+(400*Point), "Buy", 0, 0, Blue);
     //ストップロスかかったとこでWaitTimeを5分にセットする
WaitTime = 5;
 }
  }
}
| kopi | 2009/12/11 4:39 PM |
>kopiさん
5分間経過させる方法でしたら、TimeCurrent()というものを利用するのは如何でしょうか。この関数が現在の時間を取得してくれます。

例えば、専用の変数を用意しておき、ポジションを持っている間はこのTimeCurrent関数を使って変数に数値を入れて、ポジションが無くなったら(例えば変数をLastTimeなどにした場合)

(LastTime + 5 * 60) <= TimeCurrent()

という条件が成立すれば5分過ぎていることになります。
変数の型はintでもdatetimeでも大丈夫です。

解りにくいヒントで申し訳無いのですが、ご健闘を祈ります。
| DC | 2009/12/11 7:47 PM |









      1
2345678
9101112131415
16171819202122
23242526272829
30      
<< April 2017 >>



このページの先頭へ