你看看,按照你的规则,写了如下代码:
//+------------------------------------------------------------------+ //| OnceDay System.mq4 | //| Copyright 2010, trad@mql4.com | //| supercase@163.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2010, trad@mql4.com" #property link "supercase@163.com" #define MAGICMA 20100227 //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { //---- check for history and trading if(IsTradeAllowed()==false) return; CheckForCancel(); if(CalculateCurrentOrders(Symbol())==0) CheckForOpen(); return(0); } //+------------------------------------------------------------------+ //| Calculate open positions | //+------------------------------------------------------------------+ int CalculateCurrentOrders(string symbol) { int orders = 0; for(int i=0;i<OrdersTotal();i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break; if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA) orders++; } return(orders); } //+------------------------------------------------------------------+ //| Check for open order conditions | //+------------------------------------------------------------------+ void CheckForOpen() { double p = (High[1]+Low[1]+Close[1])/3; double buya=p+21; double buyb=p+41; double sella=p-21; double sellb=p-41; if(TimeHour(TimeCurrent())!=12) return; if(Close[1]>buyb) OrderSend(Symbol(),OP_BUYSTOP,1,buyb,0, 30, 20,"",MAGICMA,0,Red); else if(Close[1]>buya && Close[1]<buyb) OrderSend(Symbol(),OP_BUYSTOP,1,buya,0, 30, 20,"",MAGICMA,0,Red); else if(Close[1]>sella && Close[1]<buya) { if(Close[0]>p) OrderSend(Symbol(),OP_BUYSTOP,1,buya,0, 30, 20,"",MAGICMA,0,Red); else if(Close[0]<p) OrderSend(Symbol(),OP_SELLSTOP,1,sella,0, 30, 20,"",MAGICMA,0,Aqua); } else if(Close[1]>sellb && Close[1]<sella) OrderSend(Symbol(),OP_SELLSTOP,1,sella,0, 30, 20,"",MAGICMA,0,Aqua); else if(Close[1]<sellb) OrderSend(Symbol(),OP_SELLSTOP,1,sellb,0, 30, 20,"",MAGICMA,0,Aqua); } //+------------------------------------------------------------------+ //| Check for cancel order conditions | //+------------------------------------------------------------------+ void CheckForCancel() { if(TimeHour(TimeCurrent())!=0) return; for(int i=0;i<OrdersTotal();i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break; if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA) { if(OrderType()==OP_BUYLIMIT || OrderType()==OP_BUYSTOP || OrderType()==OP_SELLLIMIT || OrderType()==OP_SELLSTOP) { OrderDelete(OrderTicket(),White); } } } }
我没有做测试,可能下单价格上有些问题,说实在的,这样的抢帽子玩法实在木有啥好处。
仅仅是写个大概,让您做做参考而已。
P=昨日的(high+low+close)/3
有时除不尽
如何让p保留4位小数啊
代码怎么写
ERR_INVALID_STOPS | 130 | Stops 太近或是价格计算错误。 需要刷新数据 /RefreshRates.html">RefreshRates 函数重试 如果错误没有消失,尝试停止所有运行交易,改变程序逻辑。 |
说明止损点计算有误。
每天挂一单
每当新的一天就计算出前一天的支点P
由P算出4个价格分别为:
buya=P+21个点
buyb=P+41个点
sella=P-21个点
sellb=P-41个点
每天中午12:00就挂单
1.昨日的close价格在buyb之上,在buyb挂多单;
2.昨日的close价格在buya buyb之间,在buya挂多单;
3.昨日的close价格在buya sella之间,看:
当前价格在P之上,在buya挂多单;
当前价格在P之下,在sella挂空单;
4.昨日的close价格在sella sellb之间,在sella挂空单;
5.昨日的close价格在sellb之下,在sellb挂空单。
挂单止赢20个点止损30个点
晚上12:00即0点