以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (http://weistock.com/bbs/index.asp) -- 公式模型编写问题提交 (http://weistock.com/bbs/list.asp?boardid=4) ---- 挂单交易,高手请进 (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=64027) |
-- 作者:滚雪球 -- 发布时间:2014/4/16 19:40:09 -- 挂单交易,高手请进 均线交叉模型(K线走完模型): runmode:0; ma5:=ma(c,5); ma20:=ma(c,20); entertime:=time>091600 and time<151400; if holding>0 and ma5<ma20 then sell(1,1,limitr,o); if holding<0 and ma5>ma20 then sellshort(1,1,limitr,o); if holding=0 and ma5>ma20 and entertime then buy(1,1,limitr,o); if holding=0 and ma5<ma20 and entertime then buyshort(1,1,limitr,o); if time>=151400 then begin sell(1,1,market); sellshort(1,1,market); end 在这个例子中除了收盘平仓用市价以外,其他的开平都使用的是信号产生的那根K线的开盘价,这在测试的时候是能通过的,但实际交易中 K线走完以后,显然你不可能立即回到过去以该K线的开盘价成交。 现在的问题是,我希望在K线走完信号确定以后,以产生信号的那根K线的开盘价下单,挂单交易,比如股指,产生买入信号的那根K线开盘价是2100,收盘价是2102, 现在K线走完,信号确定了,我下一个2100的限价单,这个单有可能要等个三五分钟成交,也有可能成交不了(为了简化问题,这个暂不考虑) 那么这个程序测试应该怎么写?实盘又该怎么写? 我也看过阿火秘籍中的K线走完改轮询的例子,但我说的这个和他那个问题还不一样,我这个问题的关键是挂单交易 |
-- 作者:jinzhe -- 发布时间:2014/4/17 8:56:27 -- 想要实际交易按照自己的价格马上成交?那你别用走完k线啊, |
-- 作者:滚雪球 -- 发布时间:2014/4/17 13:12:25 -- 不是触价立即成交,而是信号确定之后,我回头用比触位价更好的价格下限价单,实际上下单的那个价格是没有触发的 |
-- 作者:jinzhe -- 发布时间:2014/4/17 13:42:35 -- 没有触发价格?下单日志看看 |
-- 作者:滚雪球 -- 发布时间:2014/4/17 13:43:39 -- 我说要这么做自然有这么做的理由,我只想知道金字塔能不能实现,要怎么实现。 |
-- 作者:jinzhe -- 发布时间:2014/4/17 14:02:34 -- 你说的是要以信号产生的开盘价限价交易,然后实际情况限价不对是吧? 发下单日志 |
-- 作者:滚雪球 -- 发布时间:2014/4/17 14:47:28 -- 我现在先得测试这个想法,首先得把它评测出来,自己改写了一个(在阿火秘籍的那个基础上改的)用一个全局变量保存持仓信息,同时把产生信号的K线开盘价也用全局变量保存 但看了一下有些地方还是不对。
|
-- 作者:jinzhe -- 发布时间:2014/4/17 15:23:36 -- runmode:0; ma5:=ma(c,5); ma20:=ma(c,20); entertime:=time>091600 and time<151400; o1:valuewhen(holding=0 and ma5>ma20 and entertime,open); o2:valuewhen(holding=0 and ma5<ma20 and entertime,open); if holding>0 and ma5<ma20 then sell(1,1,limitr,o); if holding<0 and ma5>ma20 then sellshort(1,1,limitr,o); if holding=0 and ma5>ma20 and entertime then buy(1,1,limitr,o1),IGNORECHECKPRICE; if holding=0 and ma5<ma20 and entertime then buyshort(1,1,limitr,o2),IGNORECHECKPRICE; if time>=151400 then begin sell(1,1,market); sellshort(1,1,market); end
看看这个记录的O1和O2效果怎么样 [此贴子已经被作者于2014/4/17 15:24:25编辑过]
|
-- 作者:滚雪球 -- 发布时间:2014/4/17 15:52:18 -- 你可能还是没明白我说的意思 上图按正常的程序应该是在第一个箭头那里开空,可能成交价是当时的收盘价或者下一根K线的开盘价, 但我的要求是这根K线走完以后,以信号产生的那根K线的开盘价挂单,最后成交可能是在第二个箭头的位置 你写的这个程序其实我贴的效果是一样的,都是在信号发生的那根K线以开盘价入市,但实际上这个价格已经是 过去的价格,只有后面的K线再次碰到这个价格才会成交 |
-- 作者:jinzhe -- 发布时间:2014/4/17 16:06:40 --
ma5:=ma(c,5); ma20:=ma(c,20); entertime:=time>091600 and time<151400; o1:=valuewhen(holding=0 and ma5>ma20 and entertime,open); o2:=valuewhen(holding=0 and ma5<ma20 and entertime,open); nn1:=barslast(holding=0 and ma5>ma20 and entertime); nn2:=barslast(holding=0 and ma5<ma20 and entertime); drawicon(holding=0 and ma5>ma20 and entertime,close,4); drawicon(holding=0 and ma5<ma20 and entertime,close,5); //if holding>0 and ma5<ma20 then sell(1,1,limitr,o); //if holding<0 and ma5>ma20 then sellshort(1,1,limitr,o); if h>=o1 and l<=o1 and nn1>1 then buy(holding=0,1,limitr,o1),IGNORECHECKPRICE; if h>=o2 and l<=o2 and nn2>1 then buyshort(holding=0,1,limitr,o2),IGNORECHECKPRICE; if time>=151400 then begin sell(1,1,market); sellshort(1,1,market); end
取消掉了常规平仓免得看不清信号,看看现在的效果 |