大家好!今天我们来聊聊移动平均线(Moving Average),这可是在外汇交易中非常重要的工具,尤其是在 MetaTrader 4 平台上,它是许多交易者的最佳助手。
移动平均线交易系统主要依靠一条移动平均线来生成交易信号。当最新的蜡烛(bar index 等于 1)价格与移动平均线相交时,系统就会执行开仓或平仓操作。我们的交易手数会根据一个特定算法进行优化。
这个专家顾问会分析移动平均线与市场价格图表之间的关系,具体的检查是通过 CheckForOpen() 函数来完成的。如果移动平均线在蜡烛中处于开盘价之上而平盘价之下,系统就会开仓做多(BUY);反之,如果移动平均线在开盘价之下而平盘价之上,系统就会开仓做空(SELL)。
在资金管理方面,我们采用的是一种简单但有效的方法:每个交易头寸的大小会根据之前交易的结果进行调整。这个算法是通过 LotsOptimized() 函数实现的。基本手数的计算基于可接受的最大风险:
lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/1000.0,1);
这里的 MaximumRisk 参数表示每笔交易的基本风险百分比,通常在 0.01(1%)到 1(100%)之间。例如,如果可用保证金(AccountFreeMargin)为 $20,500,而资金管理规则要求风险为 2%,那么基本手数将为 20500 * 0.02 / 1000 = 0.41。控制手数的精确性非常重要,结果需要规范化为允许的值,通常允许以 0.1 为步进的分手数交易。交易量为 0.41 的订单将不会被执行。为此,我们使用 NormalizeDouble() 函数,精确到小数点后 1 位,最终基本手数将规范为 0.4。通过可用保证金来计算基本手数,可以根据交易成功率增加操作的手数,也就是进行再投资。这是提高交易有效性的基本机制。
DecreaseFactor 是在连续亏损后减少手数的比例,正常值为 2, 3, 4, 5。如果前面的交易出现亏损,后续的手数会按 DecreaseFactor 的比例减少,以便度过亏损期。这是资金管理算法的主要因素。思路很简单:如果交易成功率提高,系统将以基本手数最大化盈利;但如果出现亏损,系统会“减速”,直到再次产生正收益的交易。若要禁用“减速”功能,只需将 DecreaseFactor 设置为 0。系统将根据交易历史中连续亏损的交易次数来重新计算基本手数:
if(losses>1) lot=NormalizeDouble(lot-lot*losses/DecreaseFactor,1);
这样,算法能够有效降低由于连续亏损而带来的风险。最后,在函数结束时,手数会强制检查是否符合最小允许手数的标准,以避免计算结果为 0 的情况:
if(lot<0.1) lot=0.1;
这个专家顾问主要用于日线周期的交易,在测试模式下会使用收盘价进行测试。它只会在新蜡烛开始时进行交易,所以每个 tick 模型的模式并不是必需的。
测试结果会在报告中显示出来,大家可以参考。
策略测试报告
移动平均线
交易品种 EURUSD(欧元对美元) 周期 1小时(H1) 2003.01.08 00:00 - 2003.11.25 00:00 模型 每个 tick(基于所有可用的最小时间框架,并进行每个 tick 的分形插值) 参数 Lots=0.1; MaximumRisk=0.01; DecreaseFactor=1; MovingPeriod=16; MovingShift=11; 测试中的蜡烛数量 19371 模拟的 ticks 数量 656918 建模质量 25.00% 初始存款 10000.00 总净利润 1695.20 总利润 4293.20 总亏损 -2598.00 利润因子 1.65 预期收益 10.80 绝对回撤 40.35 最大回撤(%) 318.50 (3.0%) 总交易次数 157 短仓(胜率 %) 73 (26.03%) 多仓(胜率 %) 84 (32.14%) 盈利交易(占总数 %) 46 (29.30%) 亏损交易(占总数 %) 111 (70.70%) 最大 盈利交易 262.55 亏损交易 -91.00 平均 盈利交易 93.33 亏损交易 -23.41 最大 连续盈利(资金盈利) 2 (387.15) 连续亏损(资金亏损) 7 (-287.25) 最大 连续盈利(胜数) 387.15 (2) 连续亏损(负数) -287.25 (7) 平均 连续盈利 1 连续亏损 3
评论 0