下载MetaTrader 5

求高手指点交易代码,限制1跟K线仅仅允许交易1次

要添加评论,请登录注册
在一个页面显示整个MQL5.community历史记录
anderson zhang
19
anderson zhang 2009.06.30 10:56 

用限制订单的数目的方法一般可以,但是对于止损或者止盈后就没办法了。能否编写个代码让此跟K线仅仅能交易一次?

拜谢!请高手指点。

看看大家有什么好方法。通过历史记录的办法也行,但是感觉有点麻烦。

liuxiaodong
282
liuxiaodong 2009.07.01 12:59  

你说对了 ,最严谨的办法就是历尽历史订单,记录当前k线开盘后所开的历史订单,再结合当前未平订单综合判断。

需要注意的是ea历尽历史订单的数量取决于你当前帐户历史显示的订单数量。

anderson zhang
19
anderson zhang 2009.07.01 15:51  

我还有一个想法,那就是用交易间隔的办法。2个订单间的交易时间大于1根K线的交易位移。感觉这个方法要简单些。

如果用1小时K线,我写的代码是TimeLocal()-Orderclosetime()>3600 但是有时候运行会有问题。

不知道什么原因。。。能指点下么?

liuxiaodong
282
liuxiaodong 2009.07.02 10:39  

TimeLocal() 换成timecurrent()试试。

okwh
1631
okwh 2009.07.02 10:58  

datetime lasttime=NULL;
int start()
{
if (Time[0] == lasttime ) return(0);
lasttime = Time[0] ;

............

}

anderson zhang
19
anderson zhang 2009.07.03 03:49  

TO LIU2730:换成Timecurrent() 也是会有问题。 很多应该出现的交易都没有出现。。。

TO DXDCN:这个想法很好。。。看来我确实还需要对所有函数再次理解下。我初学者,非常不好意思的再问下。

lasttime=Time[0]这句应该写在哪里?是否写在ORDERSENT后?是否代表这次交易结束后记录TIME[0]?

okwh
1631
okwh 2009.07.03 14:31  

一般是这样顺序: (取决于你的交易策略)

datetime lasttime=NULL;
int start()
{

平仓代码

跟踪止赢代码
if (Time[0] == lasttime ) return(0);
lasttime = Time[0] ;

开仓代码

............

}

connect y2k
178
connect y2k 2009.07.05 03:47  

使用静态变量解决问题。

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);
}

cao
40
cao 2009.07.05 16:32  

我也被这个问题困扰了很久,后来在论坛看到一个帖子受到启发。楼主的意思应该是一个BAR交易一次

可以这样

定义一个全局变量

int curbar=0

在主函数中

if (curbar<Bars)

{

curbar=Bars;

}

这样就可以了,希望能解决你的困扰。

liuxiaodong
282
liuxiaodong 2009.07.06 04:01  

楼上的只能保证每个柱体开仓一次,问题是如果开仓不成功呢? 用历尽历史订单的办法是最严谨的办法。

anderson zhang
19
anderson zhang 2009.07.06 14:16  
多谢大家的指点!!给了我很多启发,目前问题已经解决。
要添加评论,请登录注册