Bootstrap

“Waka Waka EA“源码, 作者稳定盈利接近7年的EA 限时免费!

指标名称: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 选择下单手数计算方式,根据风险偏好决定: 

  1. Fixed Lots 使用固定手数,需在参数“Fixed Lot”中设置。  

  2. Dynamic Lots 使用动态手数,需在参数“Dynamic Lot”中设置。  

  3. Deposit Load 按账户余额百分比计算手数。  

  4. 预设模式 系统自动计算风险。  

  • 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;
        }
     }

;