指标名称:Waka Waka EA
版本:MT4 ver. 2.12(EA)
Waka Waka EA 由国外Valeriia Mishchenko 开发并运行,已经在实盘中稳定运行接近7 年。这是一款先进的网格交易EA,专为外汇市场设计,兼具稳定性与盈利性。
支持的货币对
推荐货币对:AUDCAD、AUDNZD、NZDCAD
推荐时间范围:M15(15 分钟图表)
使用建议
1. 安装图表:
仅需将 EA 附加在一张 M15 图表上,推荐使用 AUDCAD 货币对。
2. 起始资金要求:
最低建议资金:1000 美元,交易手数:0.01 手。
3. 默认设置:
无需额外设置文件,EA 默认参数已优化完成。
4. 环境要求:
不依赖特殊环境,无版本限制,支持所有MT4 平台,但我建议使用ECN账户。
5. 运行特点:
下单条件严苛,通常每天仅下少量订单,稳定可靠。
若短时间内未下单,请保持耐心,不要调整设置。
核心交易算法
Waka Waka EA 的设计基于对市场低效率的充分利用,而非单纯地盲目构建订单网格,这显著提高了盈利可能性。
1. 多货币交易能力:
可附加在任意货币对图表上,但交易范围以设置中指定的货币对为主。
2. 批量管理设置:
支持固定批次、高风险批次及动态批次。
3. 指标逻辑:
EA 使用布林带指标和 RSI 指标作为核心信号生成机制:
布林带:信号基于布林带通道线的突破。
RSI:充当过滤器,剔除低潜力交易信号。
安装步骤
1. 文件复制:
将 EX4 文件复制至 MT4 平台的 `MQL4/Experts` 文件夹中。
2. 平台重启:
关闭并重新启动MT4 平台。
或者在 MT4 平台内依次操作:【显示】→【导航器】→右键单击【EA 交易】→选择“刷新”。
产品亮点
稳定性:实盘运行近7 年,经过长时间验证。
高效性:智能化交易算法,依赖严谨的指标逻辑。
易用性:即装即用,无需额外环境或复杂设置。
性价比:官网售价高达几千美元,但我这里提供免费源码学习!
温馨提示
1. EA 的核心交易信号较为谨慎,避免盲目下单,请保持耐心等待开仓机会。
2. 建议在模拟账户中测试运行,熟悉EA逻辑。
参数:
MM & 风险设置
-
Allow Opening a new Grid 开启/关闭新网格的开单功能。不影响已打开的网格订单。
-
Lot-sizing Method 选择下单手数计算方式,根据风险偏好决定:
-
Fixed Lots 使用固定手数,需在参数“Fixed Lot”中设置。
-
Dynamic Lots 使用动态手数,需在参数“Dynamic Lot”中设置。
-
Deposit Load 按账户余额百分比计算手数。
-
预设模式 系统自动计算风险。
-
Fixed Lot 固定手数,适用于初始订单。
-
Dynamic Lot (Balance/Equity based) 每 0.01 手所需的余额或净值。
-
Deposit Load % 初始订单所用的账户余额百分比。
-
Maximum Lot 最大允许交易手数。
-
Maximum Spread, in pips 最大允许点差(单位:点)。
-
Maximum Slippage for a non-ECN acc, in pips 非 ECN 账户允许的最大滑点(单位:点)。
-
Maximum Symbols at a time 同时允许打开的最大交易品种数量。
-
Allow Hedging 是否允许在同一品种上开多方向单。
-
Allow Trading on Holidays 开启/关闭节假日(圣诞节/新年)交易功能。
-
Allow to Buy/Sell 开启/关闭买入/卖出功能。
-
Maximum Drawdown Percent 如果当前浮动亏损超过指定百分比,EA 将关闭所有持仓。
策略设置
-
Symbols 交易品种,以逗号分隔(留空为自定义)。
-
Bollinger Bands Period 布林带周期,用于计算上下轨道。
-
RSI Period RSI 指标周期,用于过滤潜力较小的交易。
-
Maximum RSI Value RSI 指标过滤的最大值。
-
TakeProfit for Initial Trade, in pips 初始订单的止盈点(单位:点)。
-
TakeProfit for Grid, in pips (weighted if zero) 网格的止盈点。如果设置为 0,则按加权计算(以金额为基准而非点数)。
-
StopLoss for Grid, in pips (1000 pips if zero) 网格的止损点。如果设置为 0,默认为 1000 点。
-
Hide StopLoss 开启/关闭止损隐藏功能。
网格设置
-
Trade Distance 网格订单之间的最小距离(单位:点)。
-
Smart Distance 根据市场波动自动调整订单间距。
-
2nd Trade Multiplier 第二单的手数倍数。
-
3rd-5th Trade Multiplier 第三至第五单的手数倍数。
-
6thTrade Multiplier 第六单及以后订单的手数倍数。
-
Maximum Trades 网格订单的最大数量。
其他设置
-
Trade Comment 订单备注。
-
UID (0...9) EA 实例的唯一编号,通常无需修改。
-
ShowPanel 开启/关闭信息面板显示。
该参数说明可根据个人需求灵活调整,但建议在实际交易前进行全面测试以确保参数设置与交易策略匹配。
部分代码展示:
//+------------------------------------------------------------------+
//| Waka Waka EA.mq4 |
//| Copyright © 2009-2024, www.QChaos.com |
//| https://www.qchaos.com/ |
//+------------------------------------------------------------------+
#property version "2.12"
#property strict
#include <Canvas\Canvas.mqh>
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
enum LotSizingEnum {LowRiskPreset = 5,//Low Risk Set 20% annual (0.25% load)
MidRiskPreset = 4,//Mid Risk Set 40% annual (0.5% load)
HighRiskPreset = 3,//Significant Risk Set 80% annual (1.0% load)
ExtremeRiskPreset = 7,//High Risk Set 120% annual (1.5% load)
LotsEquity = 2,//Dynamic Lot based on Equity
LotsBalance = 1,//Dynamic Lot based on Balance
LotsDepositLoad = 6,//Lots based on Deposit load
FixedLots = 0//Fixed Lot
};
enum AllowBuySellEnum {AllowSell2 = 2,//Sell only
AllowBuy1 = 1,//Buy only
AllowBuySell0 = 0//Buy and Sell
};
enum eMaxDrawdownAction {IgnoreNewUntilRestart = 3,//Prohibit opening new grids until restart
IgnoreNewSignals = 2,//Prohibit opening new grids
CloseStopTradingUntilRestart = 1,//Close trades & stop trading until restart
CloseStopTradingFor24h = 0//Close trades & stop trading for 24h
};
enum eDrawdownCalculation {ThisStrategy = 1,//This strategy
TheAccount = 0//The account
};
//------------------
class CCanvasX : public CCanvas
{
public:
// CCanvasX(void);
bool CCanvasX_12(string Para_0_st);
};
// CCanvasX::CCanvasX(void){m_style=0xFFFFFFFF;m_style_idx=0;m_chart_id=0;m_objname=NULL;m_objtype=-1;m_rcname=NULL;m_width=0;m_height=0;m_format=0;m_fontname="arial";m_fontsize=-120;m_fontflags=0;m_fontangle=0;};
class SymbolInformation
{
public:
string st_1;
datetime da_2;
datetime da_3;
int in_4;
bool bo_5;
bool bo_6;
datetime da_7;
datetime da_8;
double do_9;
bool bo_10;
bool bo_11;
double do_12;
double do_13;
int in_14;
int in_15;
long lo_16;
double do_17;
bool bo_18;
bool bo_19;
bool bo_20;
int in_21;
double do_22;
double do_23;
double do_24;
double do_25;
double do_26;
datetime da_27;
datetime da_28;
void SymbolInformation_13();
void SymbolInformation_14();
void SymbolInformation_15();
void ~SymbolInformation();
};
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
class CutTrade
{
public:
long lo_1;
double do_2;
bool bo_3;
void CutTrade_17();
void CutTrade_18();
void CutTrade_19();
void ~CutTrade();
};
extern string MM_Setting="Select the risk settings" ; //------> MM & Risk settings <------
extern bool AllowOpeningNewGrid=true ; //Allow Opening a new Grid?
extern LotSizingEnum LotSizingMethod=5 ; //Lot-sizing Method
extern double LotSizingValueFixed=0.01 ; //Fixed Lot
extern double LotSizingValueDynamic=10000 ; //Dynamic Lot (Balance/Equity based)
extern double LotSizingDepositLoadPercent=0.25 ; //Deposit Load %
extern bool FixedInitialDeposit=false ; //Fixed Initial Deposit? (Tester only)
extern double MaximumLot=100 ; //Maximum Lot
extern bool AutoSplit=false ; //Auto Split?
extern double MaximumSpread=10 ; //Maximum Spread, in pips
extern int MaximumSlippage=10 ; //Maximum Slippage for a non-ECN acc, in pips
extern int MaximumSymbols=2 ; //Maximum Symbols at a time
extern bool AllowHedging=true ; //Allow Hedging?
extern bool AllowTradingOnHolidays=false ; //Allow Trading on Holidays?
extern AllowBuySellEnum AllowToBuySell=0 ; //Allow to Buy/Sell
extern double MinimumFreeMargin=0 ; //Minimum Free Margin % [0-disabled]
extern double MaximumDrawdown=100 ; //Max Floating Drawdown %
extern double MaximumDrawdownMoney=0 ; //Max Floating Drawdown in Money [0-disabled]
extern eMaxDrawdownAction MaximumDrawdownAction=0 ; //Max Drawdown Action
extern eDrawdownCalculation DrawdownCalculation=1 ; //Max Drawdown Calculation
extern string Strategy_Setting="Select the strategy settings and symbols used" ; //------> Strategy settings <------
extern string Symbols="AUDNZD,AUDCAD,NZDCAD" ; //Symbols separated by comma (custom if empty)
extern int HourToStartTrading=0 ; //Hour to Start Trading (broker\'s time)
extern int HourToStopTrading=23 ; //Hour to Stop Trading (broker\'s time)
extern int BollingerBandsPeriod=35 ; //Bollinger Bands Period
extern int RSI_Period=20 ; //RSI Period
extern int RSI_Value=15 ; //Maximum RSI Value
extern string Strategy_Setting_TP="Select TP settings" ; //------> TakeProfit settings <------
extern double InitialTP=10 ; //TakeProfit for Initial Trade, in pips
extern bool WeightedTP=true ; //Weighted TakeProfit?
extern double GridTP=0 ; //TakeProfit for Grid, in pips (can also be zero or negative)
extern int BreakEvenAfterThisLevel=0 ; //Break Even after this Level [0-disabled]
extern bool HideTP=false ; //Hide TakeProfit?
extern bool Use_OPO_Method=false ; //Use OPO method to handle TP
extern ENUM_TIMEFRAMES OPO_TimeFrame=15 ; //TF for OPO method
extern bool SmartTP=false ; //Smart TakeProfit?
extern bool DoNotAdjustTPUnlessNewGrid=false ; //Do not adjust TP unless new grid level opened
extern string Strategy_Setting_SL="Select SL settings" ; //------> StopLoss settings <------
extern double GridSL=0 ; //StopLoss for Grid, in pips (1000pips if zero)
extern bool HideSL=false ; //Hide StopLoss?
extern string Grid_Setting="Adjust the grid distance and multipliers" ; //------> Grid settings <------
extern int TradeDistance=35 ; //Trade Distance
extern bool SmartDistance=true ; //Smart Distance?
extern double TradeMultiplier_2nd=1 ; //2nd Trade Multiplier
extern double TradeMultiplier_3rd=2 ; //3rd-5th Trade Multiplier
extern double TradeMultiplier_6th=1.5 ; //6th- Trade Multiplier
extern int MaximumTrades=9 ; //Maximum Trades
extern int GridLevelToStart=1 ; //Grid Level to Start (1-initial trade)
extern bool KeepOriginalProfitLotSize=false ; //Keep Original Profit Level & Lot Size
extern string Additional_Setting="Change the comment and UID if needed" ; //------> Additional settings <------
extern string TradeComment="V:QChaos001" ; //Trade Comment
extern int UID=0 ; //UID (0...9)
extern bool ShowPanel=true ; //ShowPanel
string Global_1_st = "::W2.12LD_bmp\\WakaWakaEA.bmp";
string Global_2_st = "2.12";
long Global_3_lo = 0;
string Global_4_st = "";
int Global_5_in = 0;
//string Global_6_st = "";
datetime Global_7_da = 0;
int Global_8_in = 0;
CCanvasX Global_10_a_167;
bool Global_11_bo = true;
int Global_12_in = 3000;
bool Global_13_bo = false;
int Global_14_in = 50000;
CutTrade Global_15_a_169_ko[];
int Global_16_in = -1;
double Global_17_lo_ko[];
double Global_18_do_ko[];
int Global_19_in = -1;
int Global_20_in = 0;
int Global_21_in = 15;
SymbolInformation Global_22_a_168_ko[];
ushort Global_23_sh = 0;
int Global_24_in = 84570;
double Global_25_do = 0.0000001;
int Global_26_in = -1;
long Global_27_lo = 0;
int Global_28_in = 0;
bool Global_29_bo = false;
int Global_30_in = 0;
bool Global_31_bo = false;
int Global_32_in = -1;
long Global_33_lo = 0;
long Global_34_lo = 0;
bool Global_35_bo = false;
string Global_36_st = "Select pair";
bool Global_37_bo = true;
double Global_38_do = 0.0;
bool Global_39_bo = true;
int Global_40_in = 0;
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int OnInit()
{
//int Local_1_in;
int Local_2_in;
int Local_3_in;
int Local_4_in;
int Local_5_in;
int Local_6_in;
int Local_7_in;
int Local_8_in;
int Local_9_in;
int Local_10_in;
int Local_11_in;
int Local_12_in;
int Local_13_in;
int Local_14_in;
int Local_15_in;
int Local_16_in;
int Local_17_in;
int Local_18_in;
int Local_19_in;
int Local_20_in;
int Local_21_in;
//uchar Local_22_uc;
//uchar Local_23_uc;
//uchar Local_24_uc;
int Local_25_in;
int Local_26_in;
bool Local_27_bo;
string symb[];
int Local_29_in;
int Local_30_in;
double Local_31_do;
double Local_32_do;
int Local_33_in;
int Local_34_in;
//----- -----
string tmp_st_1;
string tmp_st_2;
string tmp_st_3;
double tmp_do_4;
double tmp_do_5;
int tmp_in_6;
int tmp_in_7;
double tmp_do_8;
string tmp_st_9;
double tmp_do_10;
double tmp_do_11;
int tmp_in_12;
int tmp_in_13;
double tmp_do_14;
int tmp_in_15;
Print(TradeComment + " " + "->",": Initializing...");
Global_30_in = 0 ;
Global_31_bo = false ;
Local_2_in = 0 ;
Local_3_in = 1 ;
Local_4_in=1 + 1;
Local_5_in=Local_4_in + 1;
Local_6_in=Local_4_in + Local_4_in;
Local_7_in=Local_5_in + Local_4_in;
Local_8_in=Local_5_in + Local_5_in;
Local_9_in=Local_6_in + Local_5_in;
Local_10_in=Local_8_in + Local_4_in;
Local_11_in=Local_8_in + Local_5_in;
Local_12_in = 0 ;
Local_13_in = 1 ;
Local_14_in = Local_4_in ;
Local_15_in = Local_5_in ;
Local_16_in=Local_5_in + 1;
Local_17_in=Local_6_in + 1;
Local_18_in=Local_17_in + 1;
Local_19_in=Local_4_in + Local_17_in;
Local_20_in=Local_16_in + Local_16_in;
Local_21_in=Local_20_in + 1;
/*
for (Local_22_uc = Local_19_in * Local_21_in + Local_4_in ; Local_22_uc < Local_21_in * Local_11_in + Local_21_in + Local_3_in ; Local_22_uc ++)
{
Global_6_st +=CharToString(Local_22_uc);
}
for (Local_23_uc = Local_8_in * Local_10_in ; Local_23_uc < Local_19_in * Local_10_in + Local_14_in ; Local_23_uc ++)
{
Global_6_st +=CharToString(Local_23_uc);
}
for (Local_24_uc = 97 ; Local_24_uc < 123 ; Local_24_uc ++)
{
Global_6_st +=CharToString(Local_24_uc);
}
Global_6_st +=CharToString(32); //" !,.:/--"
Global_6_st +=CharToString(33);
Global_6_st +=CharToString(44);
Global_6_st +=CharToString(46);
Global_6_st +=CharToString(58);
Global_6_st +=CharToString(47);
Global_6_st +=CharToString(45);
Global_6_st +=CharToString(95);
*/
Local_25_in = 1 ;
Local_26_in = 0 ;
Global_3_lo = AccountInfoInteger(ACCOUNT_LOGIN) ;
Global_4_st = AccountInfoString(ACCOUNT_NAME) ;
Sleep(500);
if(!(IsTesting()))
{
EventSetTimer(5);
}
Global_27_lo = TimeCurrent() ;
Global_29_bo = false ;
Global_23_sh = StringGetCharacter(",",0) ;
Global_16_in = -1 ;
Local_27_bo = IsTesting() ;
Local_29_in = StringSplit(Symbols,Global_23_sh,symb) ;
if(Local_29_in > 0 && !(Local_27_bo))
{
ArrayResize(Global_22_a_168_ko,Local_29_in,0);
for(Local_30_in = 0 ; Local_30_in < Local_29_in ; Local_30_in ++)
{
tmp_st_1 = StringTrimLeft(symb[Local_30_in]);
tmp_st_2 = StringTrimRight(StringTrimLeft(symb[Local_30_in]));
Global_22_a_168_ko[Local_30_in].st_1 = StringTrimRight(StringTrimLeft(symb[Local_30_in]));
if(Global_22_a_168_ko[Local_30_in].st_1 == "")
{
Global_22_a_168_ko[Local_30_in].st_1 = "??????";
Print(TradeComment + " " + Global_22_a_168_ko[Local_30_in].st_1,": List of Symbols is incorrect! Check it for extra commas!");
Global_35_bo = true ;
}
Global_22_a_168_ko[Local_30_in].da_2 = 0;
Global_22_a_168_ko[Local_30_in].in_4 = 0;
Global_22_a_168_ko[Local_30_in].bo_5 = false;
Global_22_a_168_ko[Local_30_in].bo_6 = false;
Global_22_a_168_ko[Local_30_in].da_7 = 0;
Global_22_a_168_ko[Local_30_in].da_8 = 0;
Global_22_a_168_ko[Local_30_in].do_9 = 0.0;
Global_22_a_168_ko[Local_30_in].bo_10 = false;
Global_22_a_168_ko[Local_30_in].bo_11 = false;
Global_22_a_168_ko[Local_30_in].do_12 = 1.0;
Global_22_a_168_ko[Local_30_in].do_13 = 0.0;
Global_22_a_168_ko[Local_30_in].in_14 = 0;
Global_22_a_168_ko[Local_30_in].in_15 = 0;
Global_22_a_168_ko[Local_30_in].lo_16 = 0;
Global_22_a_168_ko[Local_30_in].do_17 = 0.0;
Global_22_a_168_ko[Local_30_in].bo_18 = true;
Global_22_a_168_ko[Local_30_in].bo_19 = true;
Global_22_a_168_ko[Local_30_in].bo_20 = true;
Global_22_a_168_ko[Local_30_in].in_21 = 0;
tmp_st_3 = Global_22_a_168_ko[Local_30_in].st_1;
tmp_do_4 = 0.1;
tmp_do_5 = 0.1;
tmp_in_6 = 1;
for(tmp_in_7=MaximumTrades - 1 ; tmp_in_6 <= tmp_in_7 ; tmp_in_7=MaximumTrades - 1)
{
tmp_do_5 = tmp_do_5 + lizong_36(tmp_st_3,tmp_do_4,tmp_in_6,0.0);
tmp_in_6=tmp_in_6 + 1;
}
if(tmp_do_4>Global_25_do)
{
tmp_do_8 = tmp_do_5 / tmp_do_4;
}
else
{
tmp_do_8 = 0.0;
}
Global_22_a_168_ko[Local_30_in].do_22 = tmp_do_8;
Global_22_a_168_ko[Local_30_in].do_23 = 0.0;
Global_22_a_168_ko[Local_30_in].do_24 = 0.0;
Global_22_a_168_ko[Local_30_in].do_25 = 0.0;
Global_22_a_168_ko[Local_30_in].do_26 = 0.0;
}
}