ローソク足(陽線・陰線)は、 裁量トレードでもEA開発でも 最も基本となる価格情報です。
本記事では、 「陽線・陰線が何本続いたら、どう判断するのか?」 という考え方を、 MT4(MQL4)のEAロジックとして 具体的なサンプルコードで解説します。
「ローソク足の見方をEAで再現したい」 「インジケーターに頼らないロジックを理解したい」 という方に向けた、 ロジック理解・検証用の記事です。
はじめに
ローソク足の情報だけで 相場の流れをロジック化できるかを検証するため、 陽線・陰線の連続を条件にしたEAを作成しました。
トレード時に陰線陽線使ってエントリーする際の確認や、ローソク足周りの処理をEAに取り入れる際の参考になればと思います!
EAの仕様
それでは、今回のソースコードのエントリー/決済/パラメータ設定についての仕様を説明します。
エントリータイミング
ロングエントリー
ローソク足(バー)の陽線が3連続かつ高値を更新していらロングでエントリーします。また、ローソク足の陽線が4連続していた場合はエントリーしません。
ショートエントリー
ローソク足(バー)の陰線が3連続かつ安値を更新していたらショートでエントリーします。また、ローソク足の陰線が4連続していた場合はエントリーしません。
※連続数はパラメータ設定で変更できます
決済タイミング
損切40pips、利確90pipsです。
※共にパラメータ設定で変更できます
その他の仕様
設定値は以下の通りです。
- BarLoopCnt = 4 ⇒ 陽線・陰線が何回続いたらエントリーするかを設定する
- Lots = 1 ⇒ ロット数です(0.01=1000通貨)
- TP= 900 ⇒ 利確までのポイント(900で90pips)
- SL = 400 ⇒ ストップロスまでのポイント(400で40pips)
既に建玉がある場合は追加でエントリーはしません。
新しい足(バー)が出来た際に1度だけ処理を行います。※1時間足の場合だと1時間に1回処理する
EAレポート結果

2020年~2024年5月期間の1時間足でバックテスト確認してみました。
あくまでロジック検証用のバックテスト結果ですが、 ローソク足の連続性を条件にすることで、 一定の傾向が確認できました。
ダウンロード
EAファイルのダウンロードはこちら👇
📥 ローソク足判定EA をダウンロード \ 国内最大級のEAプラットフォーム /
GogoJungle(ゴゴジャン)で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関数や実装例を紹介していきます。
気になる機能やロジックがあれば、用途別に整理した関連記事もぜひあわせてご覧ください。









コメント