EAで陽線・陰線が続いたらエントリー(サンプルソース)

EA
スポンサーリンク

FXで売買タイミングとして使うローソク足(バー)の陽線又は陰線が数回続いたらエントリーする、簡単なMT4のEAサンプルです。

概要

ローソク足の情報だけでプラス収支にできるか興味があったので作ってみたのですが、恐ろしい程のマイナスを叩きだすEAを作ってしまいました。

今回、以下の記事では陽線の連続でロング、陰線の連続でショートいう感じでエントリーしています。マイナス収支のためあまり使えるEAではありませんが、陰線陽線の確認や処理をEAに取り入れる際のご参考になればと思います!

エントリータイミング

ローソク足(バー)の陽線が2連続かつ高値を更新していらロングでエントリーします。逆に、ローソク足(バー)の陰線が2連続かつ安値を更新していたらショートでエントリーします。

※input int BarLoopCnt = 2; の2の部分を3に変える事で、3連続に変更できます

決済タイミング

損切、利確共に10pipsです。

その他の仕様

設定値は以下の通りです。

  1. BarLoopCnt = 2 ⇒ 陽線・陰線が何回続いたらエントリーするかを設定する
  2. Lots = 1 ⇒ ロット数です(0.01=1000通貨)

既に建玉がある場合は追加でエントリーはしません。

新しい足(バー)が出来た際に1度だけ処理を行います。※1時間足の場合だと1時間に1回処理する

EAレポート結果

※サンプルEAの作り上、始値のみの確認となっています

2005年~2020年の期間の1時間足でバックテスト確認してみました。10万通貨運用でマイナス約5000万円でした。

ダウンロード

上記のEAファイルになります。

“陽線と陰線を見るEA” をダウンロード

13_InYou.ex4 – 2408 回のダウンロード – 8.45 KB

以下サンプルソースコードになります。
※丸々コピペでコンパイルできます

ソースコード

//+------------------------------------------------------------------+
//|                                                          ASI.mq4 |
//|                                    Copyright 2020, mef Software. |
//|                                             https://fx-prog.com/ |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, mef Software."
#property link      "https://fx-prog.com/"
#property version   "1.00"
#property strict
     
input int BarLoopCnt = 2;
input double Lots = 1;
 
datetime prevtime;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//---
         
//---
   return(INIT_SUCCEEDED);
  }
      
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
int start()
{
//---
int orderPtn=0; //0:何もしない 1:買い 2:売り
int total=0;
     
int errorcode;               // エラーコード
int ea_ticket_No,ea_order_entry_Type=0,ea_order_MagicNo;  // チケットNo,エントリタイプ,マジックNo.
double ea_order_stop_price=0,ea_order_good_price=0,ea_order_entry_price=0; //ストップロスレート,利確レート,エントリーレート
     
//---
   //新しい足ができた時だけやる
        
   if(Time[0] != prevtime){
      prevtime = Time[0];
   }else{
      return(0);
   }
     
     
 //***売買判断箇所***//
      
   //バーの陽線(陰線)がBarLoopCnt分続いている事をチェック
   for(int i=0; i < BarLoopCnt; i++){
           
      //ループ1回目は無条件
      if(i==0){
         //陽線の場合
         if(iOpen(NULL, 0, i+1) < iClose(NULL, 0, i+1)){
            orderPtn = 1;
         }
         //陰線の場合
         else if(iOpen(NULL, 0, i+1) > iClose(NULL, 0, i+1)){
            orderPtn = 2;
     
         //条件合わずで抜ける(ありえない)
         }else{
            orderPtn = 0;
            break;
         }
      //ループ2回目以降は同じ線         
      }else{
         //陽線 かつ 高値を切り上げている場合
         if(orderPtn == 1 && iOpen(NULL, 0, i+1) < iClose(NULL, 0, i+1) && iHigh(NULL, 0, i) > iHigh(NULL, 0, i+1)){
            orderPtn = 1;
         }
         //陰線 かつ 安値を切り下げている場合
         else if(orderPtn == 2 && iOpen(NULL, 0, i+1) > iClose(NULL, 0, i+1) && iLow(NULL, 0, i) < iLow(NULL, 0, i+1)){
            orderPtn = 2;
         //条件合わずで抜ける
         }else{
            orderPtn = 0;
            break;            
         }
      }
   }
     
     
     
        
//***売買判断箇所***//
      
//***決済判断箇所***//
   total=OrdersTotal();
   if(total == 0 && orderPtn > 0)   
   {
      if(orderPtn == 1)
      {
         ea_order_entry_price = Ask;               // 現在の買値でエントリー
         ea_order_entry_Type = OP_BUY;             //OP_BUY
         ea_order_stop_price = Ask - 100 * Point;  //損切りポイント(-10銭)
         ea_order_good_price = Ask + 100 * Point;  //利喰いポイント(+10銭)           
      }
      else if(orderPtn == 2)
      {
         ea_order_entry_price = Bid;               // 現在の売値でエントリー
         ea_order_entry_Type = OP_SELL;            //OP_SELL
         ea_order_stop_price = Bid + 100 * Point;  //損切りポイント(-10銭)
         ea_order_good_price = Bid - 100 * Point;  //利喰いポイント(+10銭)   
      }
            
      ea_order_MagicNo=0000;  //マジックナンバーは0000固定とする
      
      ea_ticket_No = OrderSend(   // 新規エントリー注文
            NULL,                     // 通貨ペア
            ea_order_entry_Type,      // オーダータイプ[OP_BUY / OP_SELL]
            Lots,                     // ロット(0.01単位,FXTFは1=10Lot)
            ea_order_entry_price,     // オーダープライスレート
            20,                       // スリップ上限
            ea_order_stop_price,      // ストップレート
            ea_order_good_price,      // リミットレート
            "テストオーダー",             // オーダーコメント
            ea_order_MagicNo,         // マジックナンバー(識別用)
            0,                        // オーダーリミット時間
            clrRed                    // オーダーアイコンカラー
          );
              
      if ( ea_ticket_No == -1)           // オーダーエラー
      {
         errorcode = GetLastError();      // エラーコード取得
         if( errorcode != ERR_NO_ERROR)   // エラー発生
         {
             printf("エラー");
         }
      }
      else {    // 注文約定
         Print("新規注文約定。 チケットNo=",ea_ticket_No);
      }
   }
      
      
   return(0);
}

主な構文

iOpen()、iClise()で陽線と陰線を判断できるので特に特別な構文は使っていません。

あと、何連続でも対応できるようにしたかったのでfor文で作っています。

さいごに

以上、陽線と陰線を使ったEAのサンプルソースでした。

陰線と陽線を見るだけでは中々利益をあげられないという事が分かりました。もっと色々な工夫が必要そうです。

普段チャートを見ていると勝てそうな気はするんですけどね!

※ MT4・EAが使えるFX会社のおすすめ

※ EAのサンプルソースを一覧表にまとめました


コメント