首页 系统交易 帖子

使用Fundamental Trader EA在MetaTrader 4上进行新闻交易的完整指南

附件
8491.zip (57.77 KB, 下载 2次)

描述:

  • 本项目的理念是开发一个能够根据新闻事件自动做出金融交易决策的专家顾问(EA)。Fundamental Trader EA无法进行历史数据回测,只能进行前向测试,因为它设置为等待下一个新闻事件,并根据(实际数据与预测数据)或(实际数据与之前数据)的差异做出金融交易决策。
  • Fundamental Trader EA使用非常简单,下载日历后,它会判断DailyFX日历上下一个安排的新闻事件,然后等待该新闻事件发布,一旦数据发布,EA便会做出投资交易决策。Fundamental Trader EA可以应用于任何图表和任何时间框架,因为它仅使用图表来执行订单。
  • Fundamental Trader EA设置支持DailyFX日历上每个国家的新闻事件,详情见下文。

注意:

  • 要使此EA正常工作,您必须按照以下网站的说明设置主文件:
  • https://www.mql5.com/en/articles/1502
  • 此EA是基于上述链接中指定的指标代码构建的。您必须首先按照上述链接中的说明设置以下文件:
  • getright_setup.zip
  • Time.mq4
  • Time.mqh
  • 请确保将默认的“get right”下载目录更改为将下载日历的地方,否则此EA将无法正常工作。
  • 请务必缓慢阅读那篇文章,并确保遵循每一步的说明。
  • 您可以了解这三个文件的作用。那篇文章很好地解释了指标如何执行,以在图表窗口显示新闻事件。
  • 首先设置该指标,并在图表上显示新闻,然后此EA将能顺利运行。
  • 该指标源代码经过修改,成为EA,用于交易新闻,而不仅仅是显示它们。
  • 在您从上述链接设置了列出的文件后,您可以下载此EA以及“str2double.dll”,该EA将交易在DAILYFX发布的新闻。“str2double.dll”文件放在根目录下,例如:C:\Program Files\Interbank FX Trader 4\

交易逻辑:

  • 交易的逻辑如下:在新闻交易中会发生两种类型的事件。
  • 第一种:实际经济数据与预测经济数据进行比较。
  • 第二种:实际经济数据与之前的经济数据进行比较。
  • 经济数据之间的差异,可以影响货币价格的方向,而经济数据之间的百分比差异则提供了更高的概率,使新闻事件在特定方向上产生市场反应。
  • 有关基本面交易的更多信息,请访问 www.pfxglobal.com
  • 当经济数据之间的百分比差异较大时,EA会执行较大的交易手数。
  • 当经济数据之间的百分比差异较小时,EA会执行最小的交易手数。
  • 这些手数在将EA应用于图表时指定,变量包括:lot1, lot2, lot3, lot4, lot5, lot6......lot18。
  • EA将根据经济数据之间的百分比差异选择具体的手数。

风险/收益比:

  • Fundamental Trader EA的风险/收益比设置为1:3,默认值为风险=20,收益=3。
  • 风险是PIP止损值,收益是乘数,因此如果EA的风险为20 PIP,期望获得60 PIP。
  • 在将EA应用于图表时,可以修改这些值。

等待新闻事件发布的时间:

  • 新闻数据并不会在预定时间精确发布,需要为EA设置一个等待新闻事件发布的时间框架。
  • 以下代码段确定EA将等待多长时间才能发布新闻,当等待时间已过,EA将继续下一个新闻事件。
  • xTime是一个变量,可以在首次将EA应用于图表时更改,默认值为27分钟。
if(Date>(TimeCurrent()-(xTime*60)))

等待订单关闭的时间:

  • 您还可以设置一个时间框架,让EA在关闭打开的订单之前等待一段时间。
  • 例如:在新闻事件发布后,如果执行了一个仓位,等待30分钟后关闭当前订单,不论是盈利还是亏损。这是MQL4用户“ebenv”的建议。
  • 有三个变量控制此功能:
  • MagicNumber | 用于追踪打开的订单的编号
  • enable_close_time | 设置为true以启用EA监控自订单执行以来经过的时间
  • wait_time | 等待关闭订单的时间

Fundamental Trader国家支持:

  • Fundamental Trader EA交易dailyfx.com/calendar上支持的每种货币。
  • 以下是指定根据发布新闻事件的国家交易货币的代码片段。货币列表如下:EUR、USD、JPY、GBP、CHF、AUD、CAD、NZD。
if(stCurrency=="EUR") {ordercurrency="EURUSD";} //交易eurusd
if(stCurrency=="USD") {ordercurrency="EURUSD";} //交易eurusd
if(stCurrency=="JPY") {ordercurrency="USDJPY";} //交易usdjpy
if(stCurrency=="GBP") {ordercurrency="GBPUSD";} //交易usdgbp
if(stCurrency=="CHF") {ordercurrency="USDCHF";} //交易usdchf
if(stCurrency=="AUD") {ordercurrency="AUDUSD";} //交易audusd
if(stCurrency=="CAD") {ordercurrency="USDCAD";} //交易usdcad
if(stCurrency=="NZD") {ordercurrency="NZDUSD";} //交易nzdusd

交易决策:

  • 以下代码段描述了EA如何在等待实际经济数据时做出交易决策,当预测经济数据可用时。
  • 当预测数据不可用时,EA使用之前的数据进行交易。
  • 以下代码段解释了如何根据预测数据和实际数据执行交易。相同的算法也用于EA基于之前和实际经济数据做出交易决策时。
if(StringToDouble(stActual)>StringToDouble(stForecast)) {
    Aert("Stronger(actual vs forecast): " + stCurrency + " " + "Time: " + stTime);
int total=OrdersTotal();
    for(int cnt=0;cnt    OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); //检查打开的订单
if(OrderComment()==stCurrency+stActual+stForecast+"BUY"||OrderComment()==stCurrency+stActual+stForecast+"SELL") {
FileClose(file);
Comment("\n" + "Live Trade Open" + OrderTicket());
return(0);
}
    }
int historytotal=OrdersHistoryTotal();
for(cnt=0;cntOrderSelect(cnt, SELECT_BY_POS, MODE_HISTORY); //检查打开的订单
if(OrderComment()==stCurrency+stActual+stForecast+"BUY"||OrderComment()==stCurrency+stActual+stForecast+"SELL") {
FileClose(file);
Comment("\n" + "Trade Executed" + OrderTicket());
return(0);
}
    }
if(stCurrency=="EUR"||stCurrency=="GBP"||stCurrency=="AUD") {
double ask=MarketInfo(ordercurrency,MODE_ASK);
double point1=MarketInfo(ordercurrency,MODE_POINT);
OrderSend(ordercurrency,OP_BUY,lot_p,ask,3,ask-(risk*point1),ask+reward*risk*point1,stCurrency+stActual+stForecast+"BUY");
}
if(stCurrency=="CHF"||stCurrency=="CAD"||stCurrency=="NZD"||stCurrency=="JPY"||stCurrency=="USD") {
double bid=MarketInfo(ordercurrency,MODE_BID);
double point2=MarketInfo(ordercurrency,MODE_POINT);
OrderSend(ordercurrency,OP_SELL,lot_p,bid,3,bid+(risk*point2),bid-(reward*risk*point2),stCurrency+stActual+stForecast+"SELL");
}
  • 首先:EA每个新闻事件只能执行一个订单,因此它首先检查是否有订单已执行,如果订单当前打开,则EA退出。
  • 其次:EA确定此订单是否已被执行并关闭,如果订单已执行并以盈利或亏损关闭,则EA退出。
  • 这两个检查确保不会重复下单,使EA每个新闻事件仅进行一次交易。
  • 接下来,它确定发布数据的国家,并在经济数据发布时使用OrderSend函数的规格开仓。
  • 上述代码适用于:当实际数据大于预测数据时,实际数据小于预测数据时,代码是相同的,唯一的区别是交易的方向。
  • 相同的算法适用于当之前的数据与实际数据进行比较时,当预测数据不存在时。

手数设置:

  • EA比较(实际数据与预测数据)或(实际数据与之前数据),新闻数据之间的百分比差异决定了EA将交易的手数。
  • 以下代码段说明了EA如何确定百分比差异,并指定手数,手数是可以修改的外部数字,以支持任何EA经纪商。
  • 用户在将EA应用于图表时可以修改手数,默认手数值为(0.01,0.02,0.03...0.17)。
double percent_d_AF=MathAbs((MathAbs(StringToDouble(stActual)-StringToDouble(stForecast))/StringToDouble(stForecast))*100);
double lot_p=0;
if((percent_d_AF>0 && percent_d_AF<=3)){lot_p=lot1;} //0.1手
if((percent_d_AF>3 && percent_d_AF<=6)){lot_p=lot2;} //0.2手
if((percent_d_AF>6 && percent_d_AF<=9)){lot_p=lot3;} //0.3手
if((percent_d_AF>9 && percent_d_AF<=12)){lot_p=lot4;} //0.4手
if((percent_d_AF>12 && percent_d_AF<=15)){lot_p=lot5;} //0.5手
if((percent_d_AF>15 && percent_d_AF<=18)){lot_p=lot6;} //0.6手
if((percent_d_AF>18 && percent_d_AF<=21)){lot_p=lot7;} //0.7手
if((percent_d_AF>21 && percent_d_AF<=24)){lot_p=lot8;} //0.8手
if((percent_d_AF>24 && percent_d_AF<=27)){lot_p=lot9;} //0.9手
if((percent_d_AF>27 && percent_d_AF<=30)){lot_p=lot10;} //1手
if((percent_d_AF>30 && percent_d_AF<=40)){lot_p=lot11;} //2手
if((percent_d_AF>40 && percent_d_AF<=50)){lot_p=lot12;} //3手
if((percent_d_AF>50 && percent_d_AF<=60)){lot_p=lot13;} //4手
if((percent_d_AF>60 && percent_d_AF<=70)){lot_p=lot14;} //5手
if((percent_d_AF>70 && percent_d_AF<=80)){lot_p=lot15;} //6手
if((percent_d_AF>80 && percent_d_AF<=90)){lot_p=lot16;} //7手
if((percent_d_AF>90 && percent_d_AF<=100)){lot_p=lot17;} //8手
if((percent_d_AF>100)){lot_p=lot18;} //8手



图表信息:


基本面新闻数据截图

  • 当EA首次应用于图表时,您需要指定“xTime”,“risk”,“reward”,“MagicNumber”,“enable_close_time”,“wait_time”,并指定您的最小和最大手数,请确保保留“get right”安装的默认位置。

  • EA将下载dailyfx日历,并确定下一个新闻事件。它将显示以下数据:日期、时间、时区、货币、描述、重要性、实际、预测和先前的新闻事件数据作为图表上的注释,如上图所示。

  • 在上图中,EA正在等待将在凌晨2:00发布的新闻事件,正如您所看到的,之前的经济数据是已知的(73.5%),因此EA正在等待实际数据的发布。当经济数据发布时,EA将比较数据并根据先前和实际的经济数据做出交易决策。

  • 最后,EA将从新闻事件预定发布时间开始,每分钟下载日历数据。


Fundamental Trader概述:

  • 此EA交易dailyfx.com/calendar上发布的每个经济事件,以CSV格式。

  • 日历使用“get right”程序下载。

  • EA在新闻数据发布时每分钟下载日历。

  • EA解析日历并确定下一个新闻事件,然后等待27分钟以发布新闻。

  • 一旦经济数据发布,它将确定是(实际与预测)还是(实际与之前)数据。

  • EA根据经济日历事件确定手数、交易货币和方向,这些数据在EA运行时可以在图表上找到。

  • 订单执行的风险/收益比为1:3。

  • EA设置为每个新闻事件仅执行一个订单。如果“enable_close_time”设置为真,EA将在打开的订单关闭之前,等待“wait_time”指定的分钟数。

请记得遵循以下链接中的所有说明 https://www.mql5.com/en/articles/1502,以确保日历正确下载,并确保您的经纪商时间设置正确,以便处理新闻,dailyfx.com/calendar数据是GMT。

如果您有任何问题、评论或建议,请留言。

相关帖子

评论 (0)