以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (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
--  
你可能还是没明白我说的意思

图片点击可在新窗口打开查看此主题相关图片如下:qq图片20140417154516.jpg
图片点击可在新窗口打开查看
上图按正常的程序应该是在第一个箭头那里开空,可能成交价是当时的收盘价或者下一根K线的开盘价,
但我的要求是这根K线走完以后,以信号产生的那根K线的开盘价挂单,最后成交可能是在第二个箭头的位置
你写的这个程序其实我贴的效果是一样的,都是在信号发生的那根K线以开盘价入市,但实际上这个价格已经是
过去的价格,只有后面的K线再次碰到这个价格才会成交




--  作者:jinzhe
--  发布时间:2014/4/17 16:06:40
--  


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

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

 

 

取消掉了常规平仓免得看不清信号,看看现在的效果