lapcheung:
给“完美”打个折,基本上,写开仓、平仓、的代码没多少含金量,就是检查持仓,设追踪止损。
最难的是决定何时开仓、何时平仓,我把策略改了不下十次,依然找不到完美的策略。
例如
策略一、震荡不开仓,这个策略减去了90%的止损。
策略二、减速不开仓,这个策略对于回调也不开仓 ,全天只会开出三几张单 。事实上这是策略一的变形,包含了策略一。但依然不完美,缺点是突破反转时,总会伴随着一张止损单,因为不知道何时会反转。
如果60%算及格,60-99.99%,去创造,只能这样了。
if(type==POSITION_TYPE_BUY) { switch (direct) { case up_End: case down_Begin: case down_On: case break_Down: // 价格转向下时,平仓 case no_Direct: // 方向不明,将止损调到最小 //stopPoint/=2; if (profit>0.0) { orderClose(); return; } case up_On: case break_Up: // 强势市场追踪止损减半 stopPoint/=2; case up_Begin: case down_End: // 震荡时经常出现临界跳变 default: // 价格向不利方向移动,按持仓价调整止损 if (holdPrice>sellPrice) request.sl= NormalizeDouble( holdPrice-stopPoint,digits); // 设追踪止损,防止过度平仓 else request.sl= NormalizeDouble( sellPrice-stopPoint,digits); } // 新多头止损价高于市场价,直接平仓 if (request.sl>sellPrice) { orderClose(); return; } // 若最小止损点被服务器限定,无法调整止损价 // 新止损价更低,无需调整 if (request.sl<=slose) { noChange_msg(); return; } }
以上是我的平仓策略代码。下面是开仓策略代码。
switch (UpOrDown()) { case up_On: case break_Up: request.type=ORDER_TYPE_BUY; // 订单类型 request.price=buyPrice; // 持仓价格 request.tp=NormalizeDouble( buyPrice+takePoint,digits); // 持仓止赢 request.sl= NormalizeDouble( minDouble(buyPrice-stopPoint, greedA.fastG.low), digits); // 持仓止损 break; case down_On: case break_Down: request.type=ORDER_TYPE_SELL; // 订单类型 request.price=sellPrice; // 持仓价格 request.tp=NormalizeDouble( sellPrice-takePoint,digits); // 持仓止赢 request.sl= NormalizeDouble( maxDouble(sellPrice+stopPoint, greedA.fastG.high), digits); // 持仓止损 break; // 初期或震荡、无方向不开仓 case no_Direct: case up_End: case up_Begin: case down_End: case down_Begin: default: // 方向不明,停止交易 chart_msg(); return orderCount; }
没有完美的EA,但有完美的模型。
现在用的是控制止损幅度,去消除震荡中反复平仓、开仓。
但最好的解决方法,是不使用自动开仓,只使用追踪止损(平仓)。
因为当止损平仓后,已经错过了最佳开仓时机,自动开仓只能是追行情,当指标用均线做突破信号,震荡行情中,突破均线就反转。
消除震荡的方法
一、使用两单元均值,代替最新值,跳变的幅度会减少。可消除尖刺,特别是反向尖剌,趋势并未反转。
问题是,急速反转,也被过滤了,止损后,还在逆趋势开仓。
二、使用上下限,设置一个较宽的区间,例如:临界是 1,设置为 0.9 -- 1.1 之间,高于低于区间,才判定为转向。
实测使用上下限也要适中,宽度大了,震荡时没反应,但突破初期也错过了。宽度过少,又滤不掉震荡。
基本上,写开仓、平仓、的代码没多少含金量,就是检查持仓,设追踪止损。
最难的是决定何时开仓、何时平仓,我把策略改了不下十次,依然找不到完美的策略。
例如
策略一、震荡不开仓,这个策略减去了90%的止损。
策略二、减速不开仓,这个策略对于回调也不开仓 ,全天只会开出三几张单 。事实上这是策略一的变形,包含了策略一。但依然不完美,缺点是突破反转时,总会伴随着一张止损单,因为不知道何时会反转。