以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  公式模型编写问题提交  (http://weistock.com/bbs/list.asp?boardid=4)
----  咨询DUALTHRUST模型问题  (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=72871)

--  作者:paigutangcu
--  发布时间:2014/12/10 19:23:24
--  咨询DUALTHRUST模型问题
大神好:
今天学习编写DUALTHRUST模型,测试的时候发现。如图。当选用RB1505合约测试的时候,到了午盘后上下轨发生变化。但是选用RB00连续合约的时候午盘后上下轨值发生的变化情况会不一样,比如说最近几天,请问这个是什么情况?
INPUT:N(7,1,10,1),NMIN(50,1,1000,1),SS(5,1,100,1);
VARIABLE:OPEN_COUNT=0;
CYC:=BARSLAST(DATE<>REF(DATE,1))+1;
昨高:=CALLSTOCK(STKLABEL,VTHIGH,6,-1);
昨低:=CALLSTOCK(STKLABEL,VTLOW,6,-1);
昨收:=CALLSTOCK(STKLABEL,VTCLOSE,6,-1);
开盘价:=VALUEWHEN(CYC=1,OPEN);
HH:=HHV(昨高,N);//N日HIGH的最高价
HC:=HHV(昨收,N);//N日CLOSE的最高价
LC:=LLV(昨收,N);//N日CLOSE的最低价
LL:=LLV(昨低,N);//N日LOW的最低价
浮动区间:=MAX(HH-LL,HC-LL);//RANGE 
上轨:开盘价+K1*浮动区间;
下轨:开盘价-K2*浮动区间;

图片点击可在新窗口打开查看此主题相关图片如下:qq截图20141210192342.jpg
图片点击可在新窗口打开查看

图片点击可在新窗口打开查看此主题相关图片如下:qq截图20141210192311.jpg
图片点击可在新窗口打开查看







--  作者:jinzhe
--  发布时间:2014/12/11 8:49:04
--  
CYC:=BARSLAST(DATE<>REF(DATE,1))+1;
昨高:=CALLSTOCK(STKLABEL,VTHIGH,6,-1);
昨低:=CALLSTOCK(STKLABEL,VTLOW,6,-1);
昨收:=CALLSTOCK(STKLABEL,VTCLOSE,6,-1);
开盘价:=VALUEWHEN(CYC=1,OPEN);
HH:=HHV(昨高,N);//N日HIGH的最高价
HC:=HHV(昨收,N);//N日CLOSE的最高价
LC:=LLV(昨收,N);//N日CLOSE的最低价
LL:=LLV(昨低,N);//N日LOW的最低价
 
跨周期极值这样算是错的

--  作者:paigutangcu
--  发布时间:2014/12/11 13:54:22
--  
那要如何计算?
--  作者:paigutangcu
--  发布时间:2014/12/11 13:55:28
--  
这个代码就是系统自带的模型代码。
--  作者:pyd
--  发布时间:2014/12/11 14:11:52
--  

要用stkindi函数调用日线周期的最高最低价,要再建一个公式1,公式1的内容:

input:n(1,1,100,1);
HH:=HHV(h,N);//N日HIGH的最高价
HC:=HHV(c,N);//N日CLOSE的最高价
LC:=LLV(c,N);//N日CLOSE的最低价
LL:=LLV(l,N);//N日LOW的最低价

 

公式Dual Thrust

//下面红色部分是Dual Thrust里改变的部分

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);
CYC:=BARSLAST(DATE<>REF(DATE,1))+1;
昨高:=CALLSTOCK(STKLABEL,VTHIGH,6,-1);
昨低:=CALLSTOCK(STKLABEL,VTLOW,6,-1);
昨收:=CALLSTOCK(STKLABEL,VTCLOSE,6,-1);
开盘价:=VALUEWHEN(CYC=1,OPEN);
hh:=stkindi(\'\',\'公式1.hh\',0,6,-1);//N日HIGH的最高价
hc:=stkindi(\'\',\'公式1.hc\',0,6,-1);//N日CLOSE的最高价
lc:=stkindi(\'\',\'公式1.lc\',0,6,-1);//N日CLOSE的最低价
ll:=stkindi(\'\',\'公式1.ll\',0,6,-1);//N日LOW的最低价

浮动区间:=MAX(HH-LL,HC-LL);//RANGE
上轨:开盘价+K1*浮动区间;
下轨:开盘价-K2*浮动区间;
T1:=TIME>OPENTIME(1) AND TIME<CLOSETIME(0)-NMIN*100;
T2:=TIME>=CLOSETIME(0)-NMIN*100;
手数:=SS;
//交易条件
开多条件:=C>上轨 AND HOLDING=0;
开空条件:=C<下轨 AND HOLDING=0;
//交易系统
开多:BUY(开多条件 AND T1 AND CYC>1,手数,MARKET);
开空:BUYSHORT(开空条件 AND T1 AND CYC>1,手数,MARKET);
收盘平多:SELL(T2,手数,MARKET);
收盘平空:SELLSHORT(T2,手数,MARKET);

当前持仓:HOLDING,COLORGRAY,LINETHICK0;
当前资产:ASSET,NOAXIS,COLORGRAY;//输出当前资产,但不影响坐标最高最低值

[此贴子已经被作者于2014/12/11 14:12:27编辑过]

--  作者:jinzhe
--  发布时间:2014/12/11 14:14:18
--  
CYC:=BARSLAST(DATE<>REF(DATE,1))+1;
昨高:=CALLSTOCK(STKLABEL,VTHIGH,6,-1);
昨低:=CALLSTOCK(STKLABEL,VTLOW,6,-1);
昨收:=CALLSTOCK(STKLABEL,VTCLOSE,6,-1);
开盘价:=VALUEWHEN(CYC=1,OPEN);
HH:=HHV(昨高,N);//N日HIGH的最高价
HC:=HHV(昨收,N);//N日CLOSE的最高价
LC:=LLV(昨收,N);//N日CLOSE的最低价
LL:=LLV(昨低,N);//N日LOW的最低价
 

改成下面这样的: 

公式1:

hh:hhv(ref(h,1),7);

hc:hhv(ref(c,1),7);

lc:llv(ref(c,1),7);

ll:llv(ref(l,1),7);

 

公式2:

hh:stkindi(\'\',\'公式1.hh\',0,6);

hc:stkindi(\'\',\'公式1.hc\',0,6);

lc:stkindi(\'\',\'公式1.lc\',0,6);

ll:stkindi(\'\',\'公式1.ll\',0,6);

 

公式1用来引用,不做实际操作,公式2是实际操作的公式

[此贴子已经被作者于2014/12/11 14:14:37编辑过]

--  作者:jinzhe
--  发布时间:2014/12/11 14:15:06
--  
然后把剩下的代码接着写入公式2里面
--  作者:paigutangcu
--  发布时间:2014/12/11 14:43:17
--  
好,谢谢。
--  作者:paigutangcu
--  发布时间:2014/12/11 14:43:40
--  
好,谢谢。。
--  作者:paigutangcu
--  发布时间:2014/12/11 19:22:28
--  
那么我们更近一步。比如说为了调试方便,我要在本页调用这个公式,我设想是这样子的。
HH:=stkindi(\'\',\'hhv(ref(h,1),\'+NUMTOSTR(N,0)+\')\',0,6);//N日HIGH的最高价
这样子写?可是调试发现行不通。这个要怎么破????