多單進場方式 ~ (RVI_HDiv_01() && Close[1] > 流動性池底部價格 && Close[1] > a_KC_UPPER_B[1]) ;
// RVI高點背離+突破流動性池底部+突破Keltner上軌B
空單進場方式 ~ (BBUP_VTrend() && Close[1] < Close[2] && Close[1] < (High[1]+Low[1])/2) ;
// 布林帶V型收縮+價格下降+弱勢收盤
#include <MagicMT5_函數庫V1.mqh>
ENUM_TIMEFRAMES 時間週期 = PERIOD_M12 ;
ENUM_TIMEFRAMES 時間框架 = PERIOD_H1; //相對大週期
//+------------------------------------------------------------------+
//|
//+------------------------------------------------------------------+
int OnInit()
{
LoadEA = TimeCurrent();
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//|
//+------------------------------------------------------------------+
void OnTick()
{
if(AccountInfoDouble(ACCOUNT_BALANCE) < 資金風控)
{
Alert("********** 資金不足 *************");
return;
}
BarNumber = iBarShift(Symbol(),時間週期,LoadEA);
BarSinceExit = BarNumber-CloseOrderNo ;
if((BarNumber == 1 && BarNumber != JudgeNo))
{
多單進場單號 = Buy_at_MARKET(Symbol(),Lots,0,0,"1st_K",MagicNumber) ;
LX_CloseByTicket(多單進場單號,Lots) ;
CloseOrderNo = iBarShift(Symbol(),時間週期,LoadEA);
FastSma = MathMin(LenA1, LenB1);
SlowSma = MathMax(LenA1, LenB1);
}
if(BarNumber != JudgeNo)
{
換K棒();
交易時段賦值();
}
Ask=SymbolInfoDouble(Symbol(),SYMBOL_ASK);
Bid=SymbolInfoDouble(Symbol(),SYMBOL_BID);
AccountBalance=AccountInfoDouble(ACCOUNT_BALANCE);
Tickvalue=SymbolInfoDouble(Symbol(),SYMBOL_TRADE_TICK_VALUE);
SP = NormalizeDouble(MathAbs(Ask-Bid),Digits()) ;
//+------------------------------------------------------------------+
//|計算交易手數
//+------------------------------------------------------------------+
if(動態計算手數 == true)
{
Lots = get_dynamic_lot_size(是否偶數單,Symbol(),風險百分比,AccountBalance,SL) ;
Lots = MathMin(0.3,MathMax(0.01,Lots)) ;
}
if(隔日沖 == true)
{
接近收盤 = (getTM_hour(TimeCurrent()) >= 22 || getTM_hour(TimeCurrent()) <= 1) ;
允許交易時段 = (允許交易時段 && !接近收盤) ;
}
if(允許交易時段 == true)
{
//+------------------------------------------------------------------+
//|多單進場
//+------------------------------------------------------------------+
set_BuyCondition();
if(LE_Cond == true)
{
if(多單部位() == 0 && 空單部位() == 0 && BarNumber != OrderBarNo)
{
if(BarSinceExit > 1 && EntriesToday(MagicNumber,Symbol()) < 1)
{
// 空手+市價單買入
多單進場單號 = Buy_at_MARKET(Symbol(),Lots,TP,SL,"BUY MARKET",MagicNumber) ;
OrderBarNo = iBarShift(Symbol(),時間週期,LoadEA);
} // end of BarSinceExit > 1
} // end of 空手且不同根K棒() == true
} // end of LE_Cond == true
//+------------------------------------------------------------------+
//|空單進場
//+------------------------------------------------------------------+
set_ShortCondition() ;
if(SE_Cond == true)
{
if(多單部位() == 0 && 空單部位() == 0 && BarNumber != OrderBarNo)
{
if(BarSinceExit > 1 && EntriesToday(MagicNumber,Symbol()) < 1)
{
// 空手+市價賣出
空單進場單號 = Short_at_MARKET(Symbol(),Lots,TP,SL,"Short Market",MagicNumber) ;
OrderBarNo = iBarShift(Symbol(),時間週期,LoadEA);
} //end of BarSinceExit > 1
} // end of 空手且不同根K棒() == true
} // end of SE_Cond == true
} //end of 允許交易時段 == true
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
if(隔日沖 == true && getTM_hour(TimeCurrent()) == 隔日沖出場時間)
{
if(多單部位() > 0 || 空單部位() > 0)
{
隔日沖平倉();
}
}
交易時段外也可停損停利();
JudgeNo = iBarShift(Symbol(),時間週期,LoadEA);
} //end of onTick
//+------------------------------------------------------------------+
//| 自訂函數庫 |
//+------------------------------------------------------------------+
int 多單部位()
{
int count;
count = get_TradeCounts(Symbol(), MagicNumber,POSITION_TYPE_BUY) ;
return count ;
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int 空單部位()
{
int count;
count = get_TradeCounts(Symbol(), MagicNumber,POSITION_TYPE_SELL) ;
return count ;
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void 換K棒()
{
Set_OHLC_Bar_Series(); //保留
Set_OHLC_Day_Series(); //保留
Get_OHLC_Bar(30) ; //保留
Get_OHLC_BigBar(15) ; //保留
Get_OHLC_Day(15) ; //保留
set_BarInfo(); //保留
set_ATR(); //保留
set_BBAND();
set_RVI();
// ***************
set_KELTNER_CHANNEL() ;
Day5Range = ((HighD[1] - LowD[1])+(HighD[2] - LowD[2])+(HighD[3] - LowD[3])+(HighD[4] - LowD[4])+(HighD[5] - LowD[5]))/5;
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void 交易時段賦值()
{
允許交易時段 = (getTM_hour(TimeCurrent()) >= 6 && getTM_hour(TimeCurrent()) < 10) || (getTM_hour(TimeCurrent()) >= 14 && getTM_hour(TimeCurrent()) < 18);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void 隔日沖平倉()
{
if(getTM_hour(TimeCurrent()) == 隔日沖出場時間)
{
if(多單部位() > 0 && BarNumber != CloseOrderNo)
LX_CloseByTicket(多單進場單號,Lots) ;
if(空單部位() > 0 && BarNumber != CloseOrderNo)
SX_CloseByTicket(空單進場單號,Lots) ;
CloseOrderNo = iBarShift(Symbol(),時間週期,LoadEA) ;
}
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void 交易時段外也可停損停利()
{
// 交易時段外也可停損停利
if(多單部位() > 0)
{
// 多單進場價格 = get_position_info_double((ulong)多單進場單號, POSITION_PRICE_OPEN);
//+------------------------------------------------------------------+
//| Buy Exit Method RSI 高檔背離+固定停損
//+------------------------------------------------------------------+
double 多單最小停利 = 0.0;
bool LX_MinPF = false ;
多單進場價格 = LE_EntryPrice(MagicNumber,多單進場單號);
多單最小停利 = NormalizeDouble(多單進場價格 + SP*3,Digits()) ;
LX_MinPF = Bid > 多單最小停利 ;
// LX_MinPF = true ;
多單停利價格 = NormalizeDouble(多單進場價格 + TP * Point(),Digits()) ;
多單停損價格 = NormalizeDouble(多單進場價格 - SL * Point(),Digits()) ;
if(多單出場方式 == 21)
{
LX_Cond = ((LX_MinPF == true && (RSI_HDiv_02() == true)) || (Close[1] >= 多單停損價格 && Bid < 多單停損價格)) ;
}
//---------------------------------------------------------多單出場
if(LX_Cond == true && BarNumber != CloseOrderNo && LE_BarsSinceEntry(MagicNumber,多單進場單號,時間週期) > 0)
{
LX_CloseByTicket(多單進場單號,Lots) ;
if(多單部位() == 0)
{
CloseOrderNo = iBarShift(Symbol(),時間週期,LoadEA) ;
}
}
} // end of 多單部位() > 0
if(空單部位() > 0)
{
//+------------------------------------------------------------------+
//| Short Exit Method 移動停利+固定停損
//+------------------------------------------------------------------+
double 空單最小停利 = 0.0;
bool SX_MinPF = false ;
空單進場價格 = SE_EntryPrice(MagicNumber,空單進場單號);
空單最小停利 = NormalizeDouble(空單進場價格 - SP*3,Digits()) ;
SX_MinPF = Ask < 空單最小停利 ;
// SX_MinPF = true ;
空單停利價格 = NormalizeDouble(空單進場價格 - TP * Point(),Digits()) ;
空單停損價格 = NormalizeDouble(空單進場價格 + SL * Point(),Digits()) ;
if(空單出場方式 == 13)
{
空單停利價格 = NormalizeDouble(空單進場價格 - (TP+Day5Range) * Point(),Digits()) ;
SX_Cond = ((Close[1] >= 空單停利價格 && Ask < 空單停利價格) || (Close[1] <= 空單停損價格 && Ask > 空單停損價格)) ;
}
//---------------------------------------------------------空單出場
if(SX_Cond == true && BarNumber != CloseOrderNo && SE_BarsSinceEntry(MagicNumber,空單進場單號,時間週期) > 0)
{
SX_CloseByTicket(空單進場單號,Lots) ;
if(空單部位() == 0)
{
CloseOrderNo = iBarShift(Symbol(),時間週期,LoadEA) ;
}
}
} // end of 空單部位() > 0
} // end of 交易時段外也可停損停利()
//+------------------------------------------------------------------+
//|多單模組編號
//+------------------------------------------------------------------+
void set_BuyCondition()
{
LE_Cond = (RVI_HDiv_01() && Close[1] > 流動性池底部價格 && Close[1] > a_KC_UPPER_B[1]) ; // RVI高點背離+突破流動性池底部+突破Keltner上軌B
}
//+------------------------------------------------------------------+
//| 空單模組編號
//+------------------------------------------------------------------+
void set_ShortCondition()
{
SE_Cond = (BBUP_VTrend() && Close[1] < Close[2] && Close[1] < (High[1]+Low[1])/2) ; // 布林帶V型收縮+價格下降+弱勢收盤
}
//+------------------------------------------------------------------+
//| RVI 高檔背離
//+------------------------------------------------------------------+
bool RVI_HDiv_01()
{
if((ArrayMaximum(High) !=0 && ArrayMaximum(High) <= 2) && (ArrayMaximum(a_RVI_1) > 2) && a_RVI_1[1] < 0.5)
{
return true;
}
return false;
}
// 流動性池價格計算 (ICT 概念)
double 流動性池頂部價格 = Highest_OHLC(Symbol(), 時間週期, MODE_HIGH, 20, 5);
double 流動性池底部價格 = Lowest_OHLC(Symbol(), 時間週期, MODE_LOW, 20, 5);
交易商品 XAUUSD 樣本內區間 2019/1/1 ~2023/6/30 交易手數 固定 0.1手
隔日沖
現在就加入《外匯實戰 MT5 EA基礎班》,用量化思維,開啟你的交易新紀元!
報名連結 =>> 外匯實戰 MT5 EA基礎班
★ ~~~ 早鳥優惠 ( 2025/11/13 前報名) ~~~ ★
🎁限量加碼 贈送 實戰EA *2
(XAUUSD *1 + NAS100 * 1)
(XAUUSD *1 + NAS100 * 1)
可攜伴2位參加文創手作聖誕樹 DIY才藝班


沒有留言:
張貼留言