以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (http://www.weistock.com/bbs/index.asp) -- 公式模型编写问题提交 (http://www.weistock.com/bbs/list.asp?boardid=4) ---- 不用K线结束做判断真的就不行吗? (http://www.weistock.com/bbs/dispbbs.asp?boardid=4&id=89675) |
-- 作者:dualbridge -- 发布时间:2016/1/11 14:24:07 -- 不用K线结束做判断真的就不行吗? 写一个海龟的修改版,不用K线结束做判断,跟踪多日,结果百思不得其解,特求救: 1.如果突破前高收盘也在最高点时,包括只开一手的持仓Done标志变化等变量一切正常,是我要的结果。 (同理,突破前低收在最低点时也正常,下面以破前高为例) 参考附图中的“开多”图标,相应的日志也正确记录了: 2016-01-11 09:59:37.617 【图表】IC13 运行完毕 2016-01-11 10:01:58.595 2016.01.11 10:01:58【图表】框架:Technic 触发下单 BUY 品种 RB05 下单K线 2016.01.11 15:00:00 公式:海鸥系统 〖SeaGull〗 窗格ID:0 代码行:16 2016-01-11 10:01:58.596 【图表】RB05 运行完毕 2.如果盘中突破前高但收盘没有收在最高点时,在盘中创新高时会有图标“开多”多次同步显示,证明触发开仓信号。但两点理解不了: (1)第一次显示图标“开多”后,Done置为1,下次轮询来临时,开仓条件不成立才对。为什么Done又变成0导致反复开仓呢? Done可是全局变量,只初始化一次才对!问题出在哪? (2)虽然盘中多次显示图标“开多”,但日志中没有任何记录,说明Buy语句没有执行!但屏幕上都显示了“多头成交变化:1” ,说明是Buy和Done语句都是执行了的?太奇怪了,怎么回事? 在K线内部,全局变量的机制有什么潜规则我们不知道?还是全局变量不能在K线内部用?不解!求大师解惑! VARIABLE: Out_Long=0,Out_Short=0,Done=0; //变量申明 Clock:=currenttime,linethick0; 成交:Done,linethick0; 多头止损价:Out_Long,linethick0; 空头止损价:Out_Short,linethick0; Up:=ref(HHV(H,10),1),linethick0; Down:=ref(LLV(L,10),1),linethick0; Roof:max(up,H),linethick0; Base:min(down,L),linethick0; If Done=0 then //空仓时 begin if C>=Roof then begin BUY(1,1,market); //开多 Price_Long:enterprice; Out_Long:=enterprice-2; // 多头止损价:Out_Long,linethick0; // DRAWTEXT(1,LOW,\'开多\'); Done:=1; 多头成交变化:Done,linethick0; end if C<=Base then begin BUYSHORT(1,1,market); //开空 Price_Short:enterprice; Out_Short:=enterprice+2 ; // 空头止损价:Out_Short,linethick0; // DRAWTEXT(1,H+1,\'开空\'); Done:=-1; 空头成交变化:Done,linethick0; end End If Done>0 then // 有多头仓位时 begin if C<=Out_Long or (CurrentTime <150000 and CurrentTime >144800) then begin SELL(1,1,market); //平多 //DRAWTEXT(1,H,\'平多\'); Done:=0; end end if Done<0 then // 有空头仓位时 begin if C>=Out_Short or (CurrentTime <150000 and CurrentTime >144800) then begin SELLSHORT(1,1,market); //平空 // DRAWTEXT(1,L-1,\'平空\'); Done:=0; end end 持仓:holding,linethick0; |
-- 作者:dualbridge -- 发布时间:2016/1/11 14:32:47 -- ![]() C:\\fakepath\\QQ截图20160111143204.jpg |
-- 作者:jinzhe -- 发布时间:2016/1/11 14:34:07 -- 同一根k线上信号闪烁,当根k线没有结束时:如果当前信号满足,那么你的done就改了;如果当前的信号满足后就又消失了 那么改变的done,是要变回改变之前的。所以当前k线又出现了,这个时候done又改了。 所以:当一根k线没有完全走完时,done的值取决当前的信号:如果有信号,那么done会改变;如果没有或者信号消失了,那么done的直就是上个周期没有改变的值 [此贴子已经被作者于2016/1/11 14:35:39编辑过]
|
-- 作者:dualbridge -- 发布时间:2016/1/11 15:13:17 -- 谢谢大师! 1. 即便是这样,当轮询满足条件执行时只是瞬间的事,所用时间应该远远小于两个Tick之间的空隙,在没有下一个Tick数据过来干扰的前提下,语句执行瞬间时的H和C应该是保持固定的(尽管这种固定的时间可能很短,会被后面的数据刷新,但这个很短的固定时间应该是足够的!),信号如何闪烁呢? 2. 退一步讲,当盘中创新高时,比方说,C有100次变成H时,即使运气不好轮询执行时漏掉50%的信号(漏掉和不漏掉的概率应该各占50%吧?),可只要有一次执行时被正好“撞”上了,那就应该执行相关语句才对!不会运气这么差满足条件的信号全部被漏掉???! 真的不好理解啊?! 有解决的办法吗?谢谢!
|
-- 作者:jinzhe -- 发布时间:2016/1/11 15:22:58 -- 1.那就说明来新的tick了导致公式刷新了 2.也就是一根k线上反复闪烁就是没有开仓?你是不是用了走完k线的下单模式? |
-- 作者:dualbridge -- 发布时间:2016/1/11 15:33:45 -- 答复: 1. 从日志上看,整个程序执行一遍,所需时间在10MS以内,远小于一个TICK的500MS。所以新的TICK数据刷新一说难以成立! 2. 用的是固定时间间隔1秒。 我就是因为很抗拒用K线模式(理由暂且略去)才这样编写程序。 感觉大师也似乎站在我这一边了?
|
-- 作者:jinzhe -- 发布时间:2016/1/11 15:41:19 -- 把你的日志发上来看看 |
-- 作者:dualbridge -- 发布时间:2016/1/11 15:47:53 -- 好的,准确地说,整个程序执行一遍的时间才14毫秒。(间隔1秒) |
-- 作者:jinzhe -- 发布时间:2016/1/11 15:58:46 -- 从日志里面看,就一个对IC13下单触发,用户是对指数进行交易了? |
-- 作者:dualbridge -- 发布时间:2016/1/11 17:03:56 -- 嗯,虚拟盘交易,验证算法之用。 只要是突破的光头阳线或光脚阴线,结果是正确的,何预期一样。 如果不是,而是盘中突破的阳线或阴线,应该开仓,但结果没有!郁闷..... 发几张图供参考。 UploadFile/2016-1/2016111173119655.jpg[/upload] UploadFile/2016-1/2016111173112197.jpg[/upload] UploadFile/2016-1/2016111173182374.jpg[/upload] |