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

076d306b95f969329327686f47d94eee_s
EAサンプル・ノウハウ
記事内に商品プロモーションを含む場合があります
スポンサーリンク

ローソク足(陽線・陰線)は、 裁量トレードでもEA開発でも 最も基本となる価格情報です。

本記事では、 「陽線・陰線が何本続いたら、どう判断するのか?」 という考え方を、 MT4(MQL4)のEAロジックとして 具体的なサンプルコードで解説します。

「ローソク足の見方をEAで再現したい」 「インジケーターに頼らないロジックを理解したい」 という方に向けた、 ロジック理解・検証用の記事です。

はじめに

ローソク足の情報だけで 相場の流れをロジック化できるかを検証するため、 陽線・陰線の連続を条件にしたEAを作成しました。

トレード時に陰線陽線使ってエントリーする際の確認や、ローソク足周りの処理をEAに取り入れる際の参考になればと思います!

EAの仕様

それでは、今回のソースコードのエントリー/決済/パラメータ設定についての仕様を説明します。

エントリータイミング

ロングエントリー

ローソク足(バー)の陽線が3連続かつ高値を更新していらロングでエントリーします。また、ローソク足の陽線が4連続していた場合はエントリーしません。

ショートエントリー

ローソク足(バー)の陰線が3連続かつ安値を更新していたらショートでエントリーします。また、ローソク足の陰線が4連続していた場合はエントリーしません。

※連続数はパラメータ設定で変更できます

決済タイミング

損切40pips、利確90pipsです。
※共にパラメータ設定で変更できます

その他の仕様

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

  1. BarLoopCnt = 4 ⇒ 陽線・陰線が何回続いたらエントリーするかを設定する
  2. Lots = 1 ⇒ ロット数です(0.01=1000通貨)
  3. TP= 900 ⇒ 利確までのポイント(900で90pips)
  4. SL = 400 ⇒ ストップロスまでのポイント(400で40pips)

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

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

スポンサーリンク

EAレポート結果

EAで陽線・陰線が続いたらエントリー(サンプルソース)
※サンプルEAの作り上、始値のみの確認となっています

2020年~2024年5月期間の1時間足でバックテスト確認してみました。

あくまでロジック検証用のバックテスト結果ですが、 ローソク足の連続性を条件にすることで、 一定の傾向が確認できました。

ダウンロード

EAファイルのダウンロードはこちら👇

📥 ローソク足判定EA をダウンロード

\ 国内最大級のEAプラットフォーム /
GogoJungle(ゴゴジャン)でEAの評価・レビューをチェック!

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

ソースコード

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

//+------------------------------------------------------------------+
//|                                                          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 = 3;
input double Lots = 1;

input int TP = 900;
input int SL = 400;

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+1; 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(i != BarLoopCnt && i != 0){
         //陽線 かつ 高値を切り上げている場合
         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;
         }
      //ループ最終
      }else{
         //陽線 かつ 高値を切り上げている場合
         if(orderPtn == 1 && iOpen(NULL, 0, i+1) < iClose(NULL, 0, i+1)){
            orderPtn = 0;
         }
         //陰線 かつ 安値を切り下げている場合
         else if(orderPtn == 2 && iOpen(NULL, 0, i+1) > iClose(NULL, 0, i+1)){
            orderPtn = 0;
         }                            
      }
      Print("ptn:",orderPtn);
      Print(i);
   }
     
     
     
        
//***売買判断箇所***//
      
//***決済判断箇所***//
   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 - SL * Point;  //損切りポイント(-10銭)
         ea_order_good_price = Ask + TP * Point;  //利喰いポイント(+10銭)           
      }
      else if(orderPtn == 2)
      {
         ea_order_entry_price = Bid;               // 現在の売値でエントリー
         ea_order_entry_Type = OP_SELL;            //OP_SELL
         ea_order_stop_price = Bid + SL * Point;  //損切りポイント(-10銭)
         ea_order_good_price = Bid - TP * 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()、iClose()で陽線と陰線を判断できるので、特に特別な構文は使っていません。

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


本記事で紹介した 陽線・陰線の連続判定は、 EAにおける「バー(ローソク足)ロジック」の一例です。

バー本数のカウント、新バー判定、時間制御などを含めて EAの実行タイミングを体系的に整理したまとめ記事はこちら👇

【MQL4】バー(ローソク足)本数・新バー判定を使ったEA処理まとめ

さいごに

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

ローソク足(陽線・陰線)の並びだけでも、 相場の流れをロジックとして表現できる点は EA開発・裁量トレード双方の理解に役立ちます。


✅ 今回のロジックをベースにしたEAサンプルも多数公開中

今回紹介したようなEAの売買ロジック・考え方をベースに、
当サイトではさまざまなFX自動売買EAのサンプルコードを公開しています。

ロジックの違いや設計の考え方を比較しながら、
自分に合ったEA構成を探したい方はぜひチェックしてみてください。


📊 EA運用・検証フェーズに進みたい方へ

今回のような仕組みを理解したうえで、
「実際にどのEAが安定しているのか」、「検証データではどんな差が出ているのか」
を確認したい方は、以下の記事も参考になります。


EA開発初心者向けに、今後も実践的に使えるMQL4関数や実装例を紹介していきます。
気になる機能やロジックがあれば、用途別に整理した関連記事もぜひあわせてご覧ください。

コメント

タイトルとURLをコピーしました