你说对了 ,最严谨的办法就是历尽历史订单,记录当前k线开盘后所开的历史订单,再结合当前未平订单综合判断。
需要注意的是ea历尽历史订单的数量取决于你当前帐户历史显示的订单数量。
我还有一个想法,那就是用交易间隔的办法。2个订单间的交易时间大于1根K线的交易位移。感觉这个方法要简单些。
如果用1小时K线,我写的代码是TimeLocal()-Orderclosetime()>3600 但是有时候运行会有问题。
不知道什么原因。。。能指点下么?
TimeLocal() 换成timecurrent()试试。
datetime lasttime=NULL;
int start()
{
if (Time[0] == lasttime ) return(0);
lasttime = Time[0] ;
............
}
TO LIU2730:换成Timecurrent() 也是会有问题。 很多应该出现的交易都没有出现。。。
TO DXDCN:这个想法很好。。。看来我确实还需要对所有函数再次理解下。我初学者,非常不好意思的再问下。
lasttime=Time[0]这句应该写在哪里?是否写在ORDERSENT后?是否代表这次交易结束后记录TIME[0]?
一般是这样顺序: (取决于你的交易策略)
datetime lasttime=NULL;
int start()
{
平仓代码
跟踪止赢代码
if (Time[0] == lasttime ) return(0);
lasttime = Time[0] ;
开仓代码
............
}
使用静态变量解决问题。
static datetime old_Kline; init init() { old_Kline=Time[0]; return(0); } int start() { if (Time[0] != old_Kline) { ... ... old_Kline = Time[0]; } return(0); }
我也被这个问题困扰了很久,后来在论坛看到一个帖子受到启发。楼主的意思应该是一个BAR交易一次
可以这样
定义一个全局变量
int curbar=0
在主函数中
if (curbar<Bars)
{
curbar=Bars;
}
这样就可以了,希望能解决你的困扰。
楼上的只能保证每个柱体开仓一次,问题是如果开仓不成功呢? 用历尽历史订单的办法是最严谨的办法。
用限制订单的数目的方法一般可以,但是对于止损或者止盈后就没办法了。能否编写个代码让此跟K线仅仅能交易一次?
拜谢!请高手指点。
看看大家有什么好方法。通过历史记录的办法也行,但是感觉有点麻烦。