以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (http://www.weistock.com/bbs/index.asp) -- 公式模型编写问题提交 (http://www.weistock.com/bbs/list.asp?boardid=4) ---- 模型可以运行,但信号不正确,且无法实现日内平仓,求高手支持 (http://www.weistock.com/bbs/dispbbs.asp?boardid=4&id=57485) |
-- 作者:拉普拉斯之魔 -- 发布时间:2013/10/13 21:12:18 -- 模型可以运行,但信号不正确,且无法实现日内平仓,求高手支持 INPUT:N(1,1,100,1),K1(0.7,0.1,1,0.1),K2(0.7,0.1,1,0.1),NMIN(10,1,100,1),SS(1,1,10000,1);
C1:="Y01$CLOSE"; C2:="M01$CLOSE"; Spread:=C1-C2; CYC:=BARSLAST(DATE<>REF(DATE,1))+1; Spread[1]:REF(Spread,1); HH:HHV(Spread[1],225); LL:=LLV(Spread[1],225); OO:=valuewhen(date<>ref(date,1),Spread); T1:=TIME>OPENTIME(1) AND TIME 手数:=SS; //交易条件 浮动区间:=HH-LL;//RANGE 上轨:OO+K1*浮动区间,,COLORYELLOW; 下轨:OO-K2*浮动区间,,COLORYELLOW; //交易条件 开多条件:=Spread>上轨 AND HOLDING=0; 开空条件:=Spread<下轨 AND HOLDING=0; //交易系统 开多:BUY(开多条件 AND T1 AND CYC>1 AND TIME<1445,手数,MARKET); 开空:BUYSHORT(开空条件 AND T1 AND CYC>1 AND TIME<1445,手数,MARKET); IF STRCMP(STKLABEL,\'YO1\') = 0 THEN BEGIN SELL(T2,手数,MARKET); BUY(开多条件 AND T1 AND CYC>1 AND TIME<1445,手数,MARKET); BUYSHORT(开空条件 AND T1 AND CYC>1 AND TIME<1445,1,MARKET); SELLSHORT(T2,手数,MARKET) END IF STRCMP(STKLABEL,\'M01\') = 0 THEN BEGIN SELL(T2,手数,MARKET); BUY(开空条件 AND T1 AND CYC>1 AND TIME<14450,1,MARKET); BUYSHORT(开多条件 AND T1 AND CYC>1 AND TIME<1445,1,MARKET); SELLSHORT(T2,手数,MARKET) end |
-- 作者:拉普拉斯之魔 -- 发布时间:2013/10/13 21:15:10 -- 这是根据软件经典的DS日内模型改变的价差套利版本,因为今年行情反向套利机会很多,如七八九月份的豆油豆粕价差反向套利,鉴于此,我就把原先收盘价替换成价差,赌的是日内价差的持续扩大,但编写出来之后发现几个问题 1,豆粕可以开仓,豆油无法开仓 2,无法达成日内平仓 3,信号不准确 请版主提供一些思路或讲解,谢谢
|
-- 作者:拉普拉斯之魔 -- 发布时间:2013/10/13 23:01:04 -- 更正一下,函数为
INPUT:N(1,1,100,1),K1(0.7,0.1,1,0.1),K2(0.7,0.1,1,0.1),NMIN(10,1,100,1),SS(1,1,10000,1);
C1:="Y01$CLOSE"; C2:="M01$CLOSE"; Spread:=C1-C2; CYC:=BARSLAST(DATE<>REF(DATE,1))+1; Spread[1]:REF(Spread,1); HH:HHV(Spread[1],225); LL:=LLV(Spread[1],225); OO:=valuewhen(date<>ref(date,1),Spread); T1:=TIME>OPENTIME(1) AND TIME 手数:=SS; //交易条件 浮动区间:=HH-LL;//RANGE 上轨:OO+K1*浮动区间,,COLORYELLOW; 下轨:OO-K2*浮动区间,,COLORYELLOW; //交易条件 开多条件:=Spread>上轨 AND HOLDING=0; 开空条件:=Spread<下轨 AND HOLDING=0; //交易系统 IF STRCMP(STKLABEL,\'YO1\') = 0 THEN BEGIN SELL(T2,手数,MARKET); BUY(开多条件 AND T1 AND CYC>1 AND TIME<1445,手数,MARKET); BUYSHORT(开空条件 AND T1 AND CYC>1 AND TIME<1445,1,MARKET); SELLSHORT(T2,手数,MARKET) END IF STRCMP(STKLABEL,\'M01\') = 0 THEN BEGIN SELL(T2,手数,MARKET); BUY(开空条件 AND T1 AND CYC>1 AND TIME<14450,1,MARKET); BUYSHORT(开多条件 AND T1 AND CYC>1 AND TIME<1445,1,MARKET); SELLSHORT(T2,手数,MARKET) end |
-- 作者:jinzhe -- 发布时间:2013/10/14 9:38:49 -- T2定义在哪里? |
-- 作者:拉普拉斯之魔 -- 发布时间:2013/10/14 9:46:12 -- T1:=TIME>OPENTIME(1) AND TIME<CLOSETIME(0)-NMIN*100;
这是界定了日内阶段开平仓的时间 |
-- 作者:拉普拉斯之魔 -- 发布时间:2013/10/14 10:03:28 -- 不知道为什么复制的时候出错了 |
-- 作者:jinzhe -- 发布时间:2013/10/14 11:02:09 -- 我了个去啊。。。什么小细节问题都出来了。。。而且这种小细节问题根本就不好找我调试了半天。。。
YO1 你写的这个,不是Y01 (大写Y 数字0数字1)而是YO1(大写Y,大写O,数字1)
在金字塔里面大写O和数字0从肉眼上看根本看不出来区别 |
-- 作者:jinzhe -- 发布时间:2013/10/14 11:02:54 -- 还有些细节代码我做了下修改,比如上个周期的spread不能那样写,时代函数不能省略后面的0
INPUT:N(1,1,100,1),K1(0.7,0.1,1,0.1),K2(0.7,0.1,1,0.1),NMIN(10,1,100,1),SS(1,1,10000,1); C1:"Y01$CLOSE"; Spread:C1-C2; CYC:=BARSLAST(DATE<>REF(DATE,1))+1; T1:=TIME>OPENTIME(1) AND TIME<CLOSETIME(0)-NMIN*100;
//交易条件
END IF STRCMP(STKLABEL,\'M01\') = 0 THEN |
-- 作者:拉普拉斯之魔 -- 发布时间:2013/10/14 11:06:13 -- ...................不好意思,麻烦版主了,万分感谢 之前那个不知道为啥复制成这样子的,后面那个确实是疏忽,谢谢帮忙 |