怎么限制交易次数
2024-06-07 10:51

策略模型是日线的,比如上穿upprice就买入,下穿downprice就卖出。开盘价在upprice和downprice之间,但是我要限制每天只交易一次,就是如果买入1次之后,即使后面价格下穿了downprice,我也不操作了。还有就是模型上午开了一次,已经买入过一次, 模型退出过,下午重开模型即便有下穿,也不卖出。总的一句话,就是一天无论如何只操作一次,要怎么实现?谢谢先

评论区
wsxqaz

我设置的1天的周期,在 onbar上我把High赋值给GLOBAL Numeric global_high变量。

1.假设当global_high高于1000的时候要买入,如果昨天晚上9:30的时候价格从999跳到1001,可是我是今天早上9点15分登录交易系统的,这时候(global_high>1000)成立但也不会发单。这是因为已经成为历史信号?

2、ontick的周期是1个tick,所以每个tick过来的数据都是当前的行情,假设也是早上9:15分登录系统,系统在第一次运行ontick的时候(global_high>1000)这个条件成立,而且是最新行情,能正常发单?(模型期望的)

以上是我的理解,但是事实上是两个都不发单。不知道错在哪里,还请刘老师指导一下。

2024-06-17 14:11
wsxqaz

我的周期为日线,我运行A_GetPreFills后,从fill的结构体里头取出最近交易时间,用来判断是否是在当天的交易时间里头,然后确认是否关闭交易。这个问题是解决了。

还有一个问题就是模型设计上可能出现一种情况:盘中一登录就会触发交易(也就是说是当天早些时间就已经触发了交易)。但是我又没有办法保证每天都能在前一天晚上9点之前登录然后一直保持这个状态,(比如前一天晚上没有登录,早上8点50几分登录这种情况实在是无法避免)。这时就会出现交易信号已经成为历史信号了,交易系统不发单。

这个问题之前我做了一些尝试:周期还是1天,我把交易触发信号放在了ontick()上。然后通过日志查看,ontick上的交易代码有运行(紧跟buy和sellshort后面的fileappend()函数有运行),但是就是不发单,然后你们客服说不发单的原因应该是ontick()这个已经弃用了引起的。

现在有点迷茫ing,不知道这个问题是不是只能用多图层来解决了


2024-06-17 13:11
wsxqaz

有道理,应该是用A_GetPreFills会更加准确和适用。但是有一点我不太明白,其中tradingDay的数据格式明明是YYYYMMDD.hhmmss。不知道为什么我这个获取到的数据只有YYYYMMDD(20240607)而没有hhmmss。

Position结构体里头和Fil结构体l里头都有tradingDay这个属性,不知道Fill里头取到的数值是否还是只有YYYYMMDD,如果还是没有hhmmss这个数值,那用这个办法可能还是有点问题。

不知道这个缺失了hhmmss是我哪里没用对还是bug?

2024-06-09 14:48
wsxqaz

Vars

Global Bool today_not_traded;

Global Position mypos;

OnReady()

{

A_GetPosition(mypos);

    today_not_traded=mypos.tradingDay<=TradingCloseDateTime(Symbol, PreTradingDay(currentdate,1),0);//判断上次交易是否是在上一个K线收盘时间前。

   

    FileAppend(\"H:\\\\\"+symbol,\"------------------------------\");

    FileAppend(\"H:\\\\\"+symbol,DateTimeToString(CurrentDate+CurrentTime)+\"    login\");

    FileAppend(\"H:\\\\\"+symbol,\"mypos.tradingDay:\"+text(mypos.tradingDay));

    FileAppend(\"H:\\\\\"+symbol,\"TradingCloseDateTime(symbol, PreTradingDay(currentdate,1),  0):\"+text(TradingCloseDateTime(symbol, PreTradingDay(currentdate,1),  0)));

     }

今天是2024年6月9日,6月7日日盘模拟账号上有交易FileAppend(\"H:\\\\\"+symbol,\"mypos.tradingDay:\"+text(mypos.tradingDay));的执行结果是mypos.tradingDay:20240607。

FileAppend(\"H:\\\\\"+symbol,\"TradingCloseDateTime(symbol, PreTradingDay(currentdate,1),  0):\"+text(TradingCloseDateTime(symbol, PreTradingDay(currentdate,1),  0)));的执行结果是

TradingCloseDateTime(symbol, PreTradingDay(currentdate,1),  0):20240607.150000000


today_not_traded=mypos.tradingDay<=TradingCloseDateTime(Symbol, PreTradingDay(currentdate,1),0);这个的结果应该是TRUE(未验证)

现在的问题是

1、假设6月8日也有开盘,那如果我是在6月7日夜盘有成交,那么text(mypos.tradingDay)这个的结果是20240607还是20240608?

2、还有有没有什么函数能得到成交的详细时间的?如果today_not_traded=(成交时间公式??)<=TradingCloseDateTime(Symbol, PreTradingDay(currentdate,1),0);   不仅有成交日期,还有时间,那么应该也可以实现?不知道有没有,请指导

2024-06-09 11:08
顶部