EA名称:套利精灵
版本:MT4 ver. 2.01
套利精灵这个EA曾经也是很多人在使用,以风险小,有底层理论依据著称。
今天,我们分享一套套利精灵源码。
注意,EA,指标仅供大家学习参考,研究策略使用!勿轻易用于实盘。
挂盘展示:
参数展示:
这EA代码实现了一个基于货币对RSI差值的套利策略,根据偏差值做逆势操作,思路具有一定的可行性。但在实际应用中,还需要对参数、风险管理、交易逻辑等方面进行优化。
注意事项:
- 主要交易货币对包括:欧美、澳美、镑美、美加、美元/挪威克朗、美日、美元/新加坡元。请确保平台支持这些货币对。
- 在“市场报价”栏目中,点击“显示全部”,以便EA能够读取所有报价。
- 请检查平台的货币对是否带有后缀,如有,请在参数中添加相应后缀。
- 加载EA时,请直接加载到“欧美”1分钟周期的图表中。
- 加载EA时,请勿立即启用自动交易按钮。等待加载完成后约30秒再开启,以确保EA有足够时间计算报价。当计算完成后,面板将显示正确的数据;若数据不准确,偏差值会显示为0或超过40。
- 修改手数时,请同时调整止盈参数,以适应手数的增加或减少。
- 交易时,仅需加载到“欧美”图表,周期设为1分钟。
- 在交易时,请确保所有交易货币对(1-8)均已加载,以便EA读取完整报价。
使用的时间周期:1分钟
加载的货币对:欧美
建议优化方案:
1.改进交易信号与过滤
结合多种指标: 除了RSI,增加MACD、布林带等指标,提高信号可靠性。
double MACD_Main = iMACD(Symbol(), 0, 12, 26, 9, PRICE_CLOSE, MODE_MAIN, 0);
double MACD_Signal = iMACD(Symbol(), 0, 12, 26, 9, PRICE_CLOSE, MODE_SIGNAL, 0);
引入趋势过滤器: 使用移动平均线判断当前市场趋势,避免逆势交易。
double MA_Short = iMA(Symbol(), 0, 50, 0, MODE_EMA, PRICE_CLOSE, 0);
double MA_Long = iMA(Symbol(), 0, 200, 0, MODE_EMA, PRICE_CLOSE, 0);
bool IsUpTrend = MA_Short > MA_Long;
2.改善风险管理和仓位控制
- 基于账户风险的仓位计算: 根据每笔交易的风险百分比,动态计算交易手数。
- 限制单一货币风险敞口: 检查当前账户中对同一货币的总风险,避免过度集中。
注意事项:
考虑不同货币对的点值和波动性。
3.添加经济事件过滤
引入新闻过滤器: 在重要经济数据发布前后暂停交易。
if (IsHighImpactNews(TimeCurrent())) {
// 暂停开仓
}
实现方法: 使用第三方经济日历API,获取新闻事件数据。
部分代码展示:
(源码过长,可按照文末提示,直接获取源码文件)
//+——————————————————————+
//| 套利精灵 .mq4 |
//| Copyright © 2009-2024, http://www.QChaos.com |
//| https://www.qchaos.com/ |
//+——————————————————————+
#property copyright “Copyright © 量化混沌, http://www.qchaos.com”
#property link “https://www.qchaos.com”
#property version “2.01”
#property description “———————————————”
#property description “EA、指标公式分享”
#property description “EA、指标编写业务承接”
#property description “———————————————”
#property description “———————————————”
enum modea {保守模式(百分之五十年化) = 2,标准模式(百分之百年化) = 1 };
//——————
extern string 注意事项1=”交易时,仅需加载到欧美图表,周期1分钟” ;
extern string 注意事项2=”交易时,请打开货币1-8所有品种,以便读取报价” ;
extern modea 风控选择=1 ;
extern string 开关设置=”———————————–” ;
extern bool 第一组货币交易=true ;
extern bool 第二组货币交易=true ;
extern bool 第三组货币交易=true ;
extern bool 第四组货币交易=true ;
extern string 货币名称设置=”———————————–” ;
extern string symbol1=”USDCAD” ;
extern string symbol2=”USDNOK” ;
extern string symbol3=”USDJPY” ;
extern string symbol4=”USDSGD” ;
extern string symbol5=”USDNOK” ;
extern string symbol6=”AUDUSD” ;
extern string symbol7=”EURUSD” ;
extern string symbol8=”GBPUSD” ;
string zon_1_st = “———————————–“;
double zon_2_do = 0.8;
double zon_3_do = 0.8;
double zon_4_do = 0.6;
double zon_5_do = 1.0;
string zon_6_st = “———————————–“;
int zon_7_in = 60;
int zon_8_in = 60;
int zon_9_in = 60;
int zon_10_in = 60;
int zon_11_in = 1;
int zon_12_in = 1;
int zon_13_in = 1;
int zon_14_in = 60;
int zon_15_in = 3600;
int zon_16_in = 3600;
int zon_17_in = 3600;
int zon_18_in = 3600;
int zon_19_in = 60;
int zon_20_in = 60;
int zon_21_in = 60;
int zon_22_in = 3600;
string zon_23_st = “———————————–“;
int zon_24_in = 10;
int zon_25_in = 24;
int zon_26_in = 12;
int zon_27_in = 20;
int zon_28_in = 1;
int zon_29_in = 1;
int zon_30_in = 1;
int zon_31_in = 1;
int zon_32_in = 28;
int zon_33_in = 26;
int zon_34_in = 22;
int zon_35_in = 28;
double zon_36_do = 0.6;
double zon_37_do = 0.1;
double zon_38_do = 0.45;
double zon_39_do = 1.3;
string zon_40_st = “———————————–“;
double zon_41_do = 600.0;
double zon_42_do = 50.0;
double zon_43_do = 600.0;
double zon_44_do = 50.0;
double zon_45_do = 50.0;
string zon_46_st = “———————————–“;
int zon_47_in = 2017068;
int zon_48_in = 2017001;
string zon_49_st = “QC”;
string zon_50_st = “QC”;
string zon_51_st = “QC”;
string zon_52_st = “QC”;
int zon_53_in_si20[20];
int zon_54_in = 0;
int zon_55_in = 0;
datetime zon_56_da = D’2090.03.20′;
//+——————————————————————+
//| |
//+——————————————————————+
int OnInit()
{
return(0);
}
//OnInit <<==——– ——–
void OnTick()
{
double zi_1_do;
double zi_2_do;
double zi_3_do;
double zi_4_do;
double zi_5_do;
double zi_6_do;
double zi_7_do;
double zi_8_do;
double zi_9_do;
double zi_10_do;
double zi_11_do;
double zi_12_do;
double zi_13_do;
double zi_14_do;
double zi_15_do;
double zi_16_do;
double zi_17_do;
double zi_18_do;
double zi_19_do;
double zi_20_do;
double zi_21_do;
double zi_22_do;
double zi_23_do;
double zi_24_do;
double zi_25_do;
double zi_26_do;
double zi_27_do;
//—– —–
string lin_st_1;
if(zon_56_da – TimeCurrent() < 0)
{
//Alert(“:”);
//ExpertRemove();
}
if(SymbolInfoDouble(symbol1,1)==0.0)
{
Alert(“没有读取到货币对,请检查平台是否有该货币” + symbol1);
return;
}
if(SymbolInfoDouble(symbol2,1)==0.0)
{
Alert(“没有读取到货币对,请检查平台是否有该货币” + symbol2);
return;
}
if(SymbolInfoDouble(symbol3,1)==0.0)
{
Alert(“没有读取到货币对,请检查平台是否有该货币” + symbol3);
return;
}
if(SymbolInfoDouble(symbol4,1)==0.0)
{
Alert(“没有读取到货币对,请检查平台是否有该货币” + symbol4);
return;
}
if(SymbolInfoDouble(symbol5,1)==0.0)
{
Alert(“没有读取到货币对,请检查平台是否有该货币” + symbol5);
return;
}
if(SymbolInfoDouble(symbol6,1)==0.0)
{
Alert(“没有读取到货币对,请检查平台是否有该货币” + symbol6);
return;
}
if(SymbolInfoDouble(symbol7,1)==0.0)
{
Alert(“没有读取到货币对,请检查平台是否有该货币” + symbol7);
return;
}
if(SymbolInfoDouble(symbol8,1)==0.0)
{
Alert(“没有读取到货币对,请检查平台是否有该货币” + symbol8);
return;
}
if(风控选择 == 1)
{
zon_2_do = NormalizeDouble(AccountEquity() * 0.00008,2) ;
zon_3_do = NormalizeDouble(AccountEquity() * 0.00008,2) ;
zon_4_do = NormalizeDouble(AccountEquity() * 0.00006,2) ;
zon_5_do = NormalizeDouble(AccountEquity() * 0.0001,2) ;
}
//+——————————————————————+