前不久接触一朋友推荐的平台,有操盘手带单,属于懒人躺赚模式,据说月收益比较稳定。我将他们操盘手的交割单仔细研究以后发现,三个特点: ①只设止损,不设止盈。 ②做单频率较低,一天一次左右。 ③持仓时间很短,最多也就一个小时多点。到了时间,就关仓止盈了。 这是个非常好的想法,由于外汇市场复杂多变,因此,止盈其实是非常难把握的,但由于外汇市场具有趋势性,因此,方向性又比较好把握。只是,就算能把握对方向,究竟能把多久,把握到什么程度,都是未知数。 所以,外汇市场的难易如下: ①猜方向。(易) ②猜方向持续点数。(难) ③猜方向持续时间。(难) 因此,就统一只持仓一小会,时间到了,就走人了,不赚太多,求稳。 我将此想法编写成EA,运行情况大致如下: 测试时间是2017年1月1日至2019年6月5日。测试品种黄金。测试周期30分钟。由于只是一个入场及其简单的模型,各种参数也根本没有优化,因此模型比较粗糙,回撤比较大。但可以看出,坚持这样运行,以6000美金本金,也实现了8175美金盈利。源代码如下: extern double FirstLots=1; extern int MagicNumber = 0; extern int Slippage = 3; extern int 紧缩点数; extern int 时间=1000; extern int 止损点数;
int OnInit() {
return(INIT_SUCCEEDED); }
void OnDeinit(const int reason) {
}
void OnTick() { double L1=Low[1]; double L2=Low[2]; double L3=Low[3]; double H1=High[1]; double H2=High[2]; double H3=High[3]; double o1=Open[1]; double o2=Open[2]; double o3=Open[3]; double c1=Close[1]; double c2=Close[2]; double c3=Close[3];
double OrdersTotalTrue=0; double OrdersOpenTime=0; if (OrdersTotal() != 0) { for(int pos1=0; pos1<OrdersTotal();pos1++) { OrderSelect(pos1, SELECT_BY_POS, MODE_TRADES); if ( OrderMagicNumber() == MagicNumber) { OrdersTotalTrue = OrdersTotalTrue + 1;
} } }
if (OrdersTotalTrue == 0 ) { if( L1>L2 && L2>L3 && c1-o1>0 && c2-o2>0 && c3-o3>0 && L1-L2<紧缩点数*Point && L2-L3<紧缩点数*Point) { OrderSend(Symbol(), OP_BUY, FirstLots, NormalizeDouble(Ask,Digits), Slippage,Ask-止损点数*Point,0, "Order Buy", MagicNumber, 0, Red); }
else if(H1<H2 && H2<H3 && c1-o1<0 && c2-o2<0 && c3-o3<0 && H2-H1<紧缩点数*Point && H3-H2<紧缩点数*Point ) { OrderSend(Symbol(), OP_SELL, FirstLots, NormalizeDouble(Bid,Digits), Slippage,Bid+止损点数*Point,0, "Order Sell", MagicNumber, 0, Red); } } for(int pos=0; pos<OrdersTotal();pos++) { OrderSelect(pos, SELECT_BY_POS, MODE_TRADES); if ( OrderMagicNumber() == MagicNumber) {
OrdersOpenTime=OrderOpenTime();
} } if(TimeCurrent()-OrdersOpenTime>时间) { closeallorder();
} }
void closeallorder() { int t=OrdersTotal(); for(int i=t-1;i>=0;i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true) { if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber) { OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),300,Green); } } } } |