MetaTraderを使ってFXの完全自動売買をしています。FX業者はBroco。
スポンサーサイト

一定期間更新がないため広告を表示しています

| スポンサードリンク | - | | - | - | pookmark |
おそらく最も簡単なEAサンプル

EA BuilderでEAを作った例(その1),というより(その2)で言っていた,Expert Advisor Builderが作ったEAよりももっと簡単なEAのサンプルを自作してみました。

/*
 超簡単なEAサンプル
 
 《戦略》

 (1) 14本RSIが50を上回ったら、買い。
 (2) 14本RSIが50を下回ったら、売り。
 (3) 8Pipで利確する。
 (4) 損切りなし(!!!)
 (5) ロット数は0.05で固定。
 
 《注意》
 
 あくまでサンプルです。
 このままでも動作はしますが,本EAによる損益その他責任は一切持ちません。
 なお,改造はご自由にどうぞ。

*/

#property copyright "nonki"
#property link      "http://nonki777.jugem.jp/"

// あとで簡単に変更したいものを,extern宣言でここに書いておく

extern int RSIPeriod = 14;  // RSI計算時の本数
extern int TakeProfit = 8;  // 利確をpipで。
extern double Lots = 0.05;  // ロット数
extern int MagicNumber = 16384;  // マジックナンバー

int init() { return(0); }

int deinit() { return(0); }

int start()
{
  double rsinow = iRSI(NULL,0,RSIPeriod,PRICE_CLOSE,0);  // 現時点のRSI値
  double rsiprv = iRSI(NULL,0,RSIPeriod,PRICE_CLOSE,1);  // 1本前のRSI値

  if (rsiprv < 50 && rsinow > 50)  // 1本前のRSIが50より下で,かつ,今のRSIが50より上ならば,買い発注
  {
    OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,"Order Long",MagicNumber,0,Lime);
  }

  if (rsiprv > 50 && rsinow < 50)  // 1本前のRSIが50より上で,かつ,今のRSIが50より下ならば,売り発注
  {
    OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point,"Order Short",MagicNumber,0,Red);
  }

  return(0);
}


ためしにバックテストさせてみたら,EURUSD 1hrで,2ヶ月間右肩上がり,その後急降下! ホントにきれいなコツコツドカンでした(笑)。
コピー&ペーストして試してみたら面白いかもしれませんよ。


にほんブログ村 為替ブログ FX システムトレード派へ
にほんブログ村

FXランキング
FXランキング

人気ブログランキングへ
人気ブログランキング

| ☆のんき☆ | Expert Advisor Builder | 15:23 | comments(5) | trackbacks(0) | pookmark |
EA BuilderでEAを作った例(その2)
 EA BuilderでEAを作った例(その1)の続きです、、、と言いたいところなのですが…。

実は、EA Builderで作ったサンプルは、プログラミングに慣れていない人にとって非常に理解しにくいです。

以下、EA BuilderでEAを作った例(その1)で作ったシナリオをEA Builderで表現したサンプルEAの全文です。

(サンプルEAここから↓)

//+------------------------------------------------------------------+
//| This MQL is generated by Expert Advisor Builder                  |
//|                http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/ |
//|                                                                  |
//|  In no event will author be liable for any damages whatsoever.   |
//|                      Use at your own risk.                       |
//|                                                                  |
//+------------------- DO NOT REMOVE THIS HEADER --------------------+

#define SIGNAL_NONE 0
#define SIGNAL_BUY   1
#define SIGNAL_SELL  2
#define SIGNAL_CLOSEBUY 3
#define SIGNAL_CLOSESELL 4

#property copyright "Expert Advisor Builder"
#property link      "http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/"

extern int MagicNumber = 0;
extern bool SignalMail = False;
extern bool EachTickMode = True;
extern double Lots = 0.05;
extern int Slippage = 3;
extern bool UseStopLoss = False;
extern int StopLoss = 0;
extern bool UseTakeProfit = True;
extern int TakeProfit = 8;
extern bool UseTrailingStop = False;
extern int TrailingStop = 0;

int BarCount;
int Current;
bool TickCheck = False;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init() {
   BarCount = Bars;

   if (EachTickMode) Current = 0; else Current = 1;

   return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit() {
   return(0);
}
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start() {
   int Order = SIGNAL_NONE;
   int Total, Ticket;
   double StopLossLevel, TakeProfitLevel;

 

   if (EachTickMode && Bars != BarCount) TickCheck = False;
   Total = OrdersTotal();
   Order = SIGNAL_NONE;

   //+------------------------------------------------------------------+
   //| Variable Begin                                                   |
   //+------------------------------------------------------------------+


double Buy1_1 = iRSI(NULL, 0, 14, PRICE_CLOSE, Current + 1);
double Buy1_2 = 50;

double Sell1_1 = iRSI(NULL, 0, 14, PRICE_CLOSE, Current + 1);
double Sell1_2 = 50;

 

  
   //+------------------------------------------------------------------+
   //| Variable End                                                     |
   //+------------------------------------------------------------------+

   //Check position
   bool IsTrade = False;

   for (int i = 0; i < Total; i ++) {
      OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
      if(OrderType() <= OP_SELL &&  OrderSymbol() == Symbol()) {
         IsTrade = True;
         if(OrderType() == OP_BUY) {
            //Close

            //+------------------------------------------------------------------+
            //| Signal Begin(Exit Buy)                                           |
            //+------------------------------------------------------------------+

           

            //+------------------------------------------------------------------+
            //| Signal End(Exit Buy)                                             |
            //+------------------------------------------------------------------+

            if (Order == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
               OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen);
               if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy");
               if (!EachTickMode) BarCount = Bars;
               IsTrade = False;
               continue;
            }
            //Trailing stop
            if(UseTrailingStop && TrailingStop > 0) {                
               if(Bid - OrderOpenPrice() > Point * TrailingStop) {
                  if(OrderStopLoss() < Bid - Point * TrailingStop) {
                     OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);
                     if (!EachTickMode) BarCount = Bars;
                     continue;
                  }
               }
            }
         } else {
            //Close

            //+------------------------------------------------------------------+
            //| Signal Begin(Exit Sell)                                          |
            //+------------------------------------------------------------------+

           

            //+------------------------------------------------------------------+
            //| Signal End(Exit Sell)                                            |
            //+------------------------------------------------------------------+

            if (Order == SIGNAL_CLOSESELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
               OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, DarkOrange);
               if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Close Sell");
               if (!EachTickMode) BarCount = Bars;
               IsTrade = False;
               continue;
            }
            //Trailing stop
            if(UseTrailingStop && TrailingStop > 0) {                
               if((OrderOpenPrice() - Ask) > (Point * TrailingStop)) {
                  if((OrderStopLoss() > (Ask + Point * TrailingStop)) || (OrderStopLoss() == 0)) {
                     OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop, OrderTakeProfit(), 0, DarkOrange);
                     if (!EachTickMode) BarCount = Bars;
                     continue;
                  }
               }
            }
         }
      }
   }

   //+------------------------------------------------------------------+
   //| Signal Begin(Entry)                                              |
   //+------------------------------------------------------------------+

   if (Buy1_1 > Buy1_2) Order = SIGNAL_BUY;

   if (Sell1_1 < Sell1_2) Order = SIGNAL_SELL;


   //+------------------------------------------------------------------+
   //| Signal End                                                       |
   //+------------------------------------------------------------------+

   //Buy
   if (Order == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
      if(!IsTrade) {
         //Check free margin
         if (AccountFreeMargin() < (1000 * Lots)) {
            Print("We have no money. Free Margin = ", AccountFreeMargin());
            return(0);
         }

         if (UseStopLoss) StopLossLevel = Ask - StopLoss * Point; else StopLossLevel = 0.0;
         if (UseTakeProfit) TakeProfitLevel = Ask + TakeProfit * Point; else TakeProfitLevel = 0.0;

         Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, "Buy(#" + MagicNumber + ")", MagicNumber, 0, DodgerBlue);
         if(Ticket > 0) {
            if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {
    Print("BUY order opened : ", OrderOpenPrice());
                if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Open Buy");
   } else {
    Print("Error opening BUY order : ", GetLastError());
   }
         }
         if (EachTickMode) TickCheck = True;
         if (!EachTickMode) BarCount = Bars;
         return(0);
      }
   }

   //Sell
   if (Order == SIGNAL_SELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
      if(!IsTrade) {
         //Check free margin
         if (AccountFreeMargin() < (1000 * Lots)) {
            Print("We have no money. Free Margin = ", AccountFreeMargin());
            return(0);
         }

         if (UseStopLoss) StopLossLevel = Bid + StopLoss * Point; else StopLossLevel = 0.0;
         if (UseTakeProfit) TakeProfitLevel = Bid - TakeProfit * Point; else TakeProfitLevel = 0.0;

         Ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, StopLossLevel, TakeProfitLevel, "Sell(#" + MagicNumber + ")", MagicNumber, 0, DeepPink);
         if(Ticket > 0) {
            if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {
    Print("SELL order opened : ", OrderOpenPrice());
                if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Open Sell");
   } else {
    Print("Error opening SELL order : ", GetLastError());
   }
         }
         if (EachTickMode) TickCheck = True;
         if (!EachTickMode) BarCount = Bars;
         return(0);
      }
   }

   if (!EachTickMode) BarCount = Bars;

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

(サンプルEAここまで↑)

ね? 分かりにくいでしょ? だいたい、これを見てプログラムの流れを理解できる人は、リファレンスを見ながら自力で好きなEAを作成できるでしょう。

ですから次回は、もっと単純化したEA、そう、例えばC言語を覚える人なら必ず作るであろう「"Hello World"を出力するプログラム」みたいなのを作ってみます。
| ☆のんき☆ | Expert Advisor Builder | 21:43 | comments(0) | trackbacks(0) | pookmark |
EA BuilderでEAを作った例(その1)

 損得は2の次! まずはEA BuilderでEAのサンプルを作ってみます。

サンプルなので、売買戦略はシンプルに行きます。よくあるRSIでも使ってみましょうか。

《サンプル戦略》

(1) 14本RSIが50を上回ったら、買い。
(2) 14本RSIが50を下回ったら、売り。
(3) 8Pipで利確する。
(4) 損切りなし(!!!)
(5) ロット数は0.05で固定。

これだけです。では実際に起動させてみます。ここではMetaTraderを立ち上げる必要はありません。

1.Expert Advisor Builderの起動

起動と言っても、普通のブログと同じで、ただリンク先に飛ぶだけです。
飛ぶと画面は英語で表示されますが、日本語のほうが分かりやすいので、左上の「日本語」リンクを押します。するとこうなります。↓

日本語表示のExpert Advisor Builder

何やら難しそうなプログラムがずらずら出てきていますが、ここでは無視してかまいません。今回は戦略がシンプルなので、必要なのは赤い丸で囲ったタグだけです。

2.買い戦略の入力

上図で赤丸を付けた「買い戦略」のリンクをクリックします。すると、下のような図面が出ますので、「追加」ボタンを押します。



すると、下の図面が出てきます。ここでさきほど書いた戦略を入力します。



具体的には「RSI50を超える」という条件ですから、左側は「Relative Strength Index」、真ん中の不等号は「>」、右側は数字(50)を直接していするので「Number/Variable」を選びます。
最後に一番下の赤丸の欄にその「50」を入力します。

今までの入力を一時的に保存したいときは、下図の下にある「Save」をクリックすればOKです。

EAB買い戦略入力完了一時保存

続きはまた今度。


にほんブログ村 為替ブログ FX システムトレード派へ
にほんブログ村

FXランキング
FXランキング

人気ブログランキングへ
人気ブログランキング

| ☆のんき☆ | Expert Advisor Builder | 09:02 | comments(0) | trackbacks(0) | pookmark |
EA Builderを使ってEA をつくるには
EAを作るとき、何もないところから始めることは少なく、既成のソースを修正・改造する人がほとんどだと思います。

ところでEAのアルゴリズムには一定のマナーというか、作法があります。EAで自分の好きなロジックを組みたい人は、一度Expert Advisor Builderをのぞいてみることをオススメします。
全体のアルゴリズムの流れが良くわかります。

Expert Advisor Builder for MetaTrader 4
http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/index.html

ただし英語です^^;
| ☆のんき☆ | Expert Advisor Builder | 12:27 | comments(0) | trackbacks(0) | pookmark |
CATEGORIES
CALENDAR
SMTWTFS
     12
3456789
10111213141516
17181920212223
24252627282930
31      
<< March 2024 >>
おすすめリンク
PROFILE
SELECTED ENTRIES
ARCHIVES
RECENT COMMENTS
RECENT TRACKBACK
クリックお願いします
カウンター
SPONSORED LINKS
MOBILE
qrcode
RECOMMEND
このページの先頭へ