我的程序是运行在1分钟K线上, 但是我只希望下面这句话 MSGOUT(C>最高价*1.03,'价格高于最高价3%,是否需要加仓还是止损?'); 早上或者下午(又或者是每隔两个小时)才判断一次并输出。 要如何加时间条件
按照定时判断并提示的思路处理吧。
//这个extgbdata 的全局变量是用来限制一个K只执行一次的目的。否则msgout会不断输出。每次运行程序化前需要在工具-数据管理-全局变量 这里重置下全局变量t为0
if barpos>extgbdata('t') then
begin
extgbdataset('t',barpos);
cd:time=133000 or time=143000;//这个表示时间是否在早上九点半或者十点半 ,你可以改成自己需要的时间。
MSGOUT(C>最高价*1.03 and cd,'价格高于最高价3%,是否需要加仓还是止损?');
end
另外需要注意这个会在每个K刚开始时候提示,中间条件有变化,它是不管的。
运行模式是在 runmode: 0; 状态下进行的。
1.
cd:time=133000 or time=143000;//这个表示时间是否在早上九点半或者十点半 . 不是吧? 这个表示 下午1点半和2点半吧?2.
如果运行在1分钟状态下,我希望以开盘后一分钟就检测是否满足条件输出。 用cc:time=093100 这样K线走完一分钟后你们的金字塔系统能否刚好准时达标到9点31分00秒呢? 这样的状况是否会出现1分钟K线走完后实际的时间在093101 ? 是否需要设置时间为 cc:time<0931001 and time C>093059; 以保证K先能100% 满足条件 , 还是直接用cc:time=093100就可以?
3.
extgbdata 我看你的解释还是不明白为什么要设置全局变量来限制一个K只执行一次的目的。 不是在图表模式下肯定是一个K线走完才执一次吗?
而且设置全局变量要做什么? 不可以直接就用普通的赋值t吗? 例如:
t:=0;
if barpos>t then
begin
t:=barpos
cd:time=133000 or time=143000;//这个表示时间是否在早上九点半或者十点半 ,你可以改成自己需要的时间。
MSGOUT(C>最高价*1.03 and cd,'价格高于最高价3%,是否需要加仓还是止损?');
end
1.我那个是金字塔时间。是北京时区+4小时。系统默认的也是金字塔时间。你看下自己本地是什么时间,如果是北京时间就重新设置下即可。
2.可以采用这种方式来实现开盘后1分钟执行。“样K线走完一分钟后你们的金字塔系统能否刚好准时达标到9点31分00秒呢?”代码是靠分笔行情驱动的,理论上来说 如果品种活跃肯定没问题。你要是不活跃,几秒才来几个分笔的这种,那肯定没办法保证卡点了。“是否需要设置时间为 cc:time<0931001 and time C>093059;” 这个是完全不需要的,而且你需要明白time是K线时间,是当前1分钟周期走完时候的结束时间。2个K直接间隔1分钟。
3.
用MSGOUT做输出,是每个分笔都会执行的。你如果不限制,那么这个K有多少个分笔,它就执行多少次。
“不是在图表模式下肯定是一个K线走完才执一次吗?” 这个地方你理解有错误。最新K上基本来一个分笔公式算一次。而走完K是信号筛选的机制,不是公式运行的模式。是指走完这个K,检测一次信号是否需要下单。
走完K模式不行的。走完k必须等到这个K走完K了,然后系统判断这个K最后时刻是否有信号需要执行。
后台也没有。你如果要即时交易为何不直接用固定轮询。而且固定轮询上是可以利用代码逻辑实现类似“走完K ”的模式的。
http://www.weistock.com/bbs/dispbbs.asp?boardid=17&Id=159472
msgout这种本来就是用来调试观察的,肯定是要即时触发也方便观察的。