量化交易软件策略:多币种智能交易系统三角移动平均线 — 指标信号

计划和功能

1. 交易货币对。

该多币种智能交易系统计划在如下品种或货币对上进行交易:

EURUSD,GBPUSD,AUDUSD,NZDUSD,USDCAD,USDCHF,USDJPY,EURGBP,EURAUD, EURNZD, EURCAD, EURCHF, EURJPY, GBPAUD, GBPNZD, GBPCAD,GBPCHF,GBPJPY,AUDNZD,AUDCAD,AUDCHF,AUDJPY,NZDCAD,NZDCHF,NZDJPY, CADCHF, CADJPY, CHFJPY = 28 对

加上 2 种贵金属对:XAUUSD(黄金)和 XAGUSD(白银)

总共是 30 对。

在上一篇文章中,由经纪商提供的含有前缀和/或后缀的特殊品种名称,赫兹量化交易软件调用自动函数来检测。 但在本文中,赫兹量化交易软件致力于简化它,即在输入属性里为品种名称加上特殊的前缀和后缀。然后,由一个简单的函数来处理与 30 个已注册品种名称结合的前缀和/或后缀,如此这般在 MetaTrader5 上 EA 应对经纪商提供的含有此类特殊品种名称,一切也都会顺利运行。

检测含有前缀和后缀的品种名称的函数的弱点在于,该函数仅适用于 MT5 中的外汇和贵金属品种名称,但并不适用于特殊品种和指数。除此之外,这种方法的另一个弱点是,如果交易者在货币对的前缀和/或后缀的名称中打错字(输入必须区分大小写)。

如同上一篇文章,在该智能交易系统中,赫兹量化交易软件这次还要添加 10 个可交易的货币对选项。可交易的 10 个选项对之一是“交易者愿望对”,该可交易对必须由交易者在智能系统属性输入栏里手工输入。但必须始终记住,输入的对名称必须已经在 30 个交易对清单当中。

仍同上一篇文章,在该版本的智能交易系统中,赫兹量化交易软件还添加了一个交易时段(时区)选项,如此可交易的货币对就能与交易时段的时间相对应。

2. 信号指标。

三角移动平均线指标的描述中,作者指出:

“用法: 您能够以颜色变化作为信号...”

默认情况下,三角形移动平均线指标的颜色为:

  • 0-DarkGray = 未知信号

  • 1-DeepPink = 卖出信号

  • 2-MediumSeaGreen = 买入信号。

在该版本的 EA 中,赫兹量化交易软件创建了 2 个选项,即计算三角形移动平均线指标信号的时间帧。

1. 基于多时间帧计算信号。 在多时间帧计算系统中,交易者必须从枚举列表中选择所需时间帧的序列。 提供的可选时间帧序列范围从 M5 到 D1(11 个时间帧)。 交易者可以选择一个时间帧的序列,选择开始:例如 M15,然后选择结束:例如 H4。 因此,智能交易系统将计算从时间帧 M15 到时间帧 H4 的三角移动平均线指标信号。

多时间帧上的三角移动平均线信号计算如下:

  • 买入信号,如果在所有选定的时间帧内,指标的颜色是中等海洋绿(MediumSeaGreen),以及

  • 卖出信号,如果在所有选定的时间帧内,指标颜色是深粉(DeepPink)。

2. 基于单一时间帧的信号计算。 在单一时间帧信号计算系统中,交易者必须从 11 个时间帧中选择一个时间帧,从 M5 时间帧到 D1 时间帧。 如此,智能交易系统将据所选时间帧计算三角形移动平均线指标信号。

同时,在单一时间帧内三角移动平均信号的计算为:

  • 买入信号,如果前 2 根柱线是深粉(DeepPink),前 1 根柱线是中等海洋绿(MediumSeaGreen),当前柱线是中等海洋绿(MediumSeaGreen)。

  • 卖出信号,如果前 2 根柱线是中等海洋绿(MediumSeaGreen),前 1 根柱线是深粉(DeepPink),当前柱线是深粉(DeepPink)。

买入或卖出信号的三角形移动平均线指标如图例 1 和图例 2 所示。

添加图片注释,不超过 140 字(可选)

添加图片注释,不超过 140 字(可选)

3. 交易和订单管理

该多币种智能交易系统的交易管理有若干个选项:

1. 止损单

  • 选项:使用订单止损(是)或(否)

如果选中“使用订单止损(否)”选项,则所有订单在开单时都不带止损。

如果选项使用订单止损(是):

再次给出选项:使用自动计算止损(是)或(否)

如果选项“自动计算止损(是)”,则将由智能系统自动执行止损计算。

如果选项“自动计算止损(否)”,则交易者必须以点数为单位输入止损值。

如果选项“使用订单止损(否)”:

则智能系统会检查每笔开立订单,信号条件是否仍然良好,以及订单

或许维持盈利,或许信号条件疲软,需要平单以确保

盈利、或许信号条件已逆转方向,订单必须以亏损条件平仓。

注意: 特别是对于由于信号疲软而平单并确保盈利,会再给出一个选项,是否激活它。 如果它没有被激活(否),即使信号已经疲软,订单仍将维持、或不会平单以确保盈利。

添加图片注释,不超过 140 字(可选)

2. 止盈订单

  • 选项:“使用订单止盈(是)或(否)”

如果选中“使用订单止盈(否)”选项,则在开单时,所有订单都不带止盈。

如果选项“使用订单止盈(是)”:

再次给出选项:“使用自动计算订单止盈(是)或(否)”

如果选项“自动计算订单止盈(是)”,则由智能系统自动执行止盈计算。

如果选项“自动计算订单止盈(否)“,则交易者必须以点数输入订单止盈值。

3. 尾随止损和尾随止盈

  • 选项:“使用尾随止损/止盈(是)或(否)”

如果”使用尾随止损/止盈(否)“选项,则智能系统不会执行尾随止损和尾随止盈。

如果选项“使用尾随 SL/TP(是)”:

再次给出选项:“使用自动尾随(是)或(否)”

如果选项“使用自动尾随(是)”,则尾随止损将由智能系统使用

自动选择的时间帧计算三角形移动平均缓冲区 0(指标数据),同时

基于变量值 TPmin(最小尾随盈利值)执行尾随止盈。

如果选项”使用自动尾随(否)“,则智能系统将采用输入属性中的值执行尾随止损。

注意:智能系统将同时执行尾随止盈和尾随止损。

尾随止损价格函数:

 
 

double MCEA::TSPrice(const string xsymb,ENUM_POSITION_TYPE ptype,int TS_type) { //--- int br=2; double pval=0.0; int x=PairsIdxArray(xsymb); Pips(xsymb); //-- switch(TS_type) { case 0: { RefreshTick(xsymb); if(ptype==POSITION_TYPE_BUY) pval=mc_symbol.NormalizePrice(mc_symbol.Bid()-TSval*pip); if(ptype==POSITION_TYPE_SELL) pval=mc_symbol.NormalizePrice(mc_symbol.Ask()+TSval*pip); break; } case 1: { double TriMAID[]; //-- ArrayResize(TriMAID,br,br); ArraySetAsSeries(TriMAID,true); CopyBuffer(hTriMAt[x],0,0,br,TriMAID); // Copy buffer 0 from the hTriMAt indicator handle //-- RefreshTick(xsymb); if(ptype==POSITION_TYPE_BUY && (mc_symbol.Bid()>mc_symbol.NormalizePrice(TriMAID[0]+TSval*pip))) pval=TriMAID[0]; if(ptype==POSITION_TYPE_SELL && (mc_symbol.Ask()<mc_symbol.NormalizePrice(TriMAID[0]-TSval*pip))) pval=TriMAID[0]; break; } } //-- return(pval); //--- } //-end TSPrice() //---------//

修改 SL/TP 函数:

 
 

bool MCEA::ModifySLTP(const string symbx,int TS_type) { //--- ResetLastError(); MqlTradeRequest req={}; MqlTradeResult res={}; MqlTradeCheckResult check={}; //-- int TRSP=TS_type; bool modist=false; int x=PairsIdxArray(symbx); Pips(symbx); //-- int total=PositionsTotal(); //-- for(int i=total-1; i>=0; i--) { string symbol=PositionGetSymbol(i); if(symbol==symbx && mc_position.Magic()==magicEA) { ENUM_POSITION_TYPE opstype = mc_position.PositionType(); if(opstype==POSITION_TYPE_BUY) { RefreshTick(symbol); double price = mc_position.PriceCurrent(); double vtrsb = mc_symbol.NormalizePrice(TSPrice(symbx,opstype,TRSP)); double pos_open = mc_position.PriceOpen(); double pos_stop = mc_position.StopLoss(); double pos_profit = mc_position.Profit(); double pos_swap = mc_position.Swap(); double pos_comm = mc_position.Commission(); double netp=pos_profit+pos_swap+pos_comm; double modstart=mc_symbol.NormalizePrice(pos_open+TSmin*pip); double modminsl=mc_symbol.NormalizePrice(vtrsb+TSmin*pip); double modbuysl=vtrsb; double modbuytp=mc_symbol.NormalizePrice(price+TPmin*pip); bool modbuy = (price>modminsl && modbuysl>modstart && (pos_stop==0.0||modbuysl>pos_stop)); //-- if(modbuy && netp>0.05) { modist=mc_trade.PositionModify(symbol,modbuysl,modbuytp); } } if(opstype==POSITION_TYPE_SELL) { RefreshTick(symbol); double price = mc_position.PriceCurrent(); double vtrss = mc_symbol.NormalizePrice(TSPrice(symbx,opstype,TRSP)); double pos_open = mc_position.PriceOpen(); double pos_stop = mc_position.StopLoss(); double pos_profit = mc_position.Profit(); double pos_swap = mc_position.Swap(); double pos_comm = mc_position.Commission(); double netp=pos_profit+pos_swap+pos_comm; double modstart=mc_symbol.NormalizePrice(pos_open-TSmin*pip); double modminsl=mc_symbol.NormalizePrice(vtrss-TSmin*pip); double modselsl=vtrss; double modseltp=mc_symbol.NormalizePrice(price-TPmin*pip); bool modsel = (price<modminsl && modselsl<modstart && (pos_stop==0.0||modselsl<pos_stop)); //-- if(modsel && netp>0.05) { modist=mc_trade.PositionModify(symbol,modselsl,modseltp); } } } } //-- return(modist); //--- } //-end ModifySLTP() //---------//

  • 30
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值