文系人間のためのシステムトレーダー養成所 メタトレーダー講義第13回 初めてのエキスパートアドバイザー
--------

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
2009-03-29

メタトレーダー講義第13回 初めてのエキスパートアドバイザー

この文章はCodersGuruさんのMQL4Lesson4の訳文です。(翻訳しての転載に本人の許可はとってあります)  
                             MQL4講座          
                             Coders'guru         
                              www.forex-tsd.com/                   
                                  -13-

前回の講義では、初めてのインディケーターを作成しました。そのインディケーターはトレーダーとしてはそんなに役立つものではありませんでしたが、プログラマーとしてはとても役立つものでした。

一般的にインディケーターはマーケットの将来の値段を予想するのを試みるテクニカル分析において大変重要なものです。
しかし、私たちはインディケーターと共にチャートを観察して、自分の手を使って売り買いをし、手動で注文を調整します。貴方は画面の前に座っていないといけませんし、目を凝らし続けなければなりません。

もし貴方が疲れたり、お茶を飲みたくなったり、まとまった休日を取るような時、貴方は今から上げていく解決策の一つを考えなければなりません。

貴方はチャートを見てくれる誰かを雇って、5分おきに相場で何が起きているか携帯に連絡させることをするかもしれません。もしこの雇った人がプロなら、費用は貴方が稼いだPipsを要求するでしょう。そしてもし雇った人が初心者なら、その費用は貴方の資本金を要求するでしょう。

二つ目の解決策は貴方のトレードを自動化するプログラムを使うことです。
これがエキスパートアドバイザの存在意義になります。

エキスパートアドバイザーはMQL4に記述されたプログラムで、貴方の好きなインディケーターを使い、あなたのトレード方法で注文を自動で行ってくれます。
エキスパートアドバイザーは貴方のために買い注文も、売り注文も、注文の修正も行わせることができます。貴方はこれでお茶を飲むことも、雇った人に渡す給料を節約することも、貴方のアシスタントである妻に花束を持っていくこともできるようになります。

今日は、初めてのエキスパートアドバイザーを作成していきます。さぁ始めましょう。

最初の二つのステップ

ステップ1

もし貴方がメタエディターをまだ開いていませんでしたら、起動させてください。
メタエディターのFileメニューからNewをクリックしてください。(CTRL+Nのホットキーを使うか、スタンダードツールバーのNewアイコンをクリックすることでも起動できます。) そうすると、初めてのインディケーターを作成した時にも見た新しいプログラム操作ガイドが出てきます。(図1)

今回は、"Expert Advisor program"の項目をクリックして、次へを押してください。
expertad.png
図1-ステップ1の操作ガイド

ステップ2


次へをクリックすると、general properties操作ガイドが出てきます(図2)
この操作ガイドはあなたのエキスパートアドバイザーの属性を指定することができ、そして貴方がエキスパートアドバイザーで使うexternal(外部)変数を指定することができます。

このステップでは、以下の属性を指定できます。

   1-エキスパートアドバイザーの名前。今回はMy_First_EAを使用します。
   2-プログラムの著者名。貴方の名前を入力してください(サンプルでは私の名前を使ってます)
   3-あなたのウェブサイトへのリンク
   4-External(外部)変数のリスト
 
   以下が貴方が自分で作ったエキスパートアドバイザーを、Expert propertyウィンドウか
   らユーザーが変更することを可能にさせる外部変数のリストです。
   新しい変数を加えたかったら、Add ボタンをクリックしてください。クリックすると、新しい外部変数
   リストが登録されます。すべてのリストは三つの設定値をもちます。

   Name:この設定値をダブルクリックすると変数の名前(識別子)を指定できます。
   Type:この設定値をダブルクリックすると、変数のデータタイプを指定できます。
   Initial value:この設定値をダブルクリックすると、その変数の初期値を与えることができます。
   この設定値は任意なもので、何も設定しないで次に行くこともできます。

   今回のサンプルでは、三つの設定値を加えます。

   Varaible→Type→initial value
   ________________________________________
   TakeProfit→double→240
   Lots→double→0.1
   TrailingStop→double→30

Wizars.png
図2-ステップ2の操作ガイド

それでは完了ボタンをクリックして操作ガイドを閉じてください。メタエディターは操作ガイドによって作られたコードを貴方に提供し、My_First_EA.mq4MetaTrader4/expertsパスの所に保存することになります。

メモ:エキスパートアドバイザーをMetaTrader4/expertsのパスに入れなくてはなりません。またインディケーターはMetaTrader4/experts/indicatorsのパスに入れてください。そうでなければ起動しません。

以下が操作ガイドから得られるコードです。

//+------------------------------------------------------------------+
//| My_First_EA.mq4                    |
//| Coders Guru                    |
//| http://www.forex-tsd.com                  |
//+------------------------------------------------------------------+

#property copyright "Coders Guru"
#property link "http://www.forex-tsd.com"

//---- input parameters
extern double TakeProfit=240.0;
extern double Lots=0.1;
extern double TralingStop=30.0;
//+------------------------------------------------------------------+
//| expert initialization function                    |
//+------------------------------------------------------------------+

int init()
{
//----

//----

return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function                    |
//+------------------------------------------------------------------+

int deinit()
{
//----

//----

return(0);
}
//+------------------------------------------------------------------+
//| expert start function                    |
//+------------------------------------------------------------------+

int start()
{
//----

//----

return(0);
}
//+------------------------------------------------------------------+

上記をみればわかるように、操作ガイドによって生み出されたコードは直接主要な関数を入力する手間を省き、あなたがコードを付け加えることができるテンプレートです。

さぁコードを付け加えていきましょう。

//+------------------------------------------------------------------+
//| My_First_EA.mq4 |
//| Coders Guru |
//| http://www.forex-tsd.com |
//+------------------------------------------------------------------+

#property copyright "Coders Guru"
#property link "http://www.forex-tsd.com"

//---- 埋め込まれた設定値
extern double TakeProfit=250.0;
extern double Lots=0.1;
extern double TrailingStop=35.0;
//+------------------------------------------------------------------+
//| expert initialization function                    |
//+------------------------------------------------------------------+

int init()
{
//----

//----

return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function                   |
//+------------------------------------------------------------------+

int deinit()
{
//----

//----
return(0);
}
int Crossed (double line1 , double line2)
  {
   static int last_direction = 0;
   static int current_direction = 0;

   if(line1>line2)current_direction=1; //アップ
   if(line12; //ダウン

   if(current_direction !=last_direction) //変化
   {
      last_direction = current_direction;
      return(last_direction);
   }
   else
   {
     return (0);
   }
 }
//+------------------------------------------------------------------+
//| expert start function                     |
//+------------------------------------------------------------------+

int start()
 {
 int cnt, ticket, total;
 double shortEma,longEma;

 if(Bars<100)
 {
  Print("bars less than 100");
  return(0);
 }
 if(TakeProfit<10)
 {
  Print("TakeProfit less than 10");
  return(0); //check TakeProfit
  }

 shortEma=iMA(NULL,0,8,0,MODE_EMA,PRICE_CLOSE,0);
 longEma=iMA(NULL,0,13,0,MODE_EMA,PRICE_CLOSE,0);

 int isCrossed = Crossed(shortEma,longEma);

 total = OrdersTotal();
 if(total < 1)
  {
  if (isCrossed == 1)
   {
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,
"My EA",12345,0,Green);
     if(ticket>0)
     {
     if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("BUY order operand : ",OrderOpenPrice());
     }
    else Print("Error opening BUY order : ",GetLastError());
     return(0);
     }
    if(isCrossed == 2)
    {

     ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,
     Bid-TakeProfit*Point,"My EA",12345,0,Red);
      if(ticket>0)
        {
        if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
      Print("SELL order opened ; ",OrderOpenPrice());
        }
      else Print("Error opening Sell order : ",GetLastError());
       return(0);
       }
       return(0);
    }
     for(cnt=0;cnt<total;cnt++)
     {
     OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
     if(OrderType()<=OP_SELL && OrderSymbol()==Symbol())
    {
    if(OrderType()==OP_BUY) //ロングポジションでエントリー
    {
    //手仕舞うか?
   if(isCrossed ==2)
      {
         OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet);
  //手仕舞い
     return(0); //次へ
      }
    if(TrailingStop>0)
     {
     if(Bid-OrderOpenPrice()>Point*TrailingStop)
       {
       if(OrderStopLoss()<Bid-Point*TrailingStop)
        {
         OrderModify(OrderTicket(),OrderOpenPrice(),Bid-
          Point*TrailingStop,OrderTakeProfit(),0,Green);
         return(0);
         }
        }
       }
      }
     else//ショートポジションへ
      {
     //手仕舞うべきか
      if(isCrossed ==1)
      {
      OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet);
  //手仕舞い
     return(0); //決済
      }
     //トレイリングストップのチェック
      if(TrailingStop>0)
       {
        if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
        {
         if((OrderStopLoss()>(Ask+Point*TrailingStop)) ||
      (OrderStopLoss()==0))
             {

    OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,
     OrderTakeProfit(),0,Red);
            return(0);
             }
            }
           }
          }
         }
       }
 return(0);
 }
//+------------------------------------------------------------------+

メモ:コピー&ペーストはなさらないでください。メタエディターが停止してしまいます。コード文はファイルとしてありますので、必要な方はこちらの方からダウンロードしてください(無料登録する必要があります。)

怖い?

上述の160行の文に恐れないでください。私たちは一行一行のすべてのコードの意味を理解することができるようになります。これは簡単な課題であるということを約束します。

エキスパートアドバイザーを試してみよう。

エキスパートアドバイザーのコードを勉強する前に、これは利益を出せるものなのかどうか確認してみましょう。

メモ:このエキスパードアドバイザーはEURUSD4時間足で試してください。
それではF5を押してコンパイルをし、メタトレーダーを起動させましょう。

エキスパートアドバイザーは二つの方法でテストすることができます。

1-自動売買

自動売買では結果がより正確に出ますが、そのエキスパートアドバイザーが利益を出すかどうかを知るには数日(もしくは数カ月)かかります。

エキスパートアドバイザーが自動でトレードをできるように設定しなければなりません。
それを可能にするために、Tools→オプションをクリック(もしくはCTRL+Oのホットキーを使用)してください。そうするとオプションウィンドウが現れるはずです(図3)Expert Advisorsタブをクリックして以下のオプションを可能に設定してください。

Enable Expert Advisors
Allow Live trading

そしてOKをクリックしてください。
おぷと
図3-自動売買が可能になるように設定

次に、Navigatorタブ→ExpertAdvisorをクリックし、My_First_EAをダブルクリックしてください。そうするとエキスパートアドバイザーの名前の隣にスマイルのマークが表示されると思います。これは、エキスパートアドバイザーが働いており、トレードする用意ができていることをしめすマークです。
KIIRo.png
図4-エキスパートアドバイザーが自動売買モードになっています。

2-ストラテジーテスター
二番目のエキスパートアドバイザーのテスト方法は少し精度が落ちるかもしれませんが、時間をとりません。この方法がストラテジーテスターです。ストラテジーテスターについては、そのうち全て分かるようになります。Strategy Testerのタブからストラテジーテスターを起動させましょう。(図5)
ウィンドウが開いたら、以下の設定に変更してください。

Symbol:EURUSD(4hours)
Period:H4(4Hours)
Model:Open price only
これ
図5-ストラテジーテスターウィンドウ

さぁスタートボタンをクリックしてエキスパートアドバイザーをテストしてみましょう。

現在進行形のバー(ローソク足)と、二つのタブ(セッティングと操作履歴)から5つのタブになったことが確認できると思います。私たちが最も興味深いところはレポートです(図6)クリックして損益を確認してみましょう。
kekka.png
図6-ストラテジーテスターの検証結果

次の講義ではたくさんの説明ややることがあります。挑戦する準備は整いましたでしょうか。


それでは。


Coder'sGuru




本日もお疲れ様でした。コードの記述が大変でしたね!僕はコンパイルに失敗しまくりました(笑)それでも自動売買モードが動くとなんだか嬉しくなってきませんか?
皆さんの自動売買のきっかけになってくれたら幸いです。

本日も訪問頂き大変ありがとうございました。


押していただけると凄く励みになります。よろしくお願いします。
人気ブログランキングへ

theme : FXでシステムトレード
genre : 株式・投資・マネー

コメントの投稿

管理者にだけ表示を許可する

MT4の講義の翻訳ご苦労さまでした。

大変ためになりました。

コード文のDLのところですが、リンクが、間違っている様で、世界時計が表示されます。
修正していただけるとありがたいです。

よろしくお願いします。

Re: タイトルなし

そういっていただけると大変うれしいです。ありがとうございます。

リンクの方修正しておきました。 すいません。

教えて頂きありがとうございました。

これからも時々遊びにきてくださいね^^
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。