以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  公式模型编写问题提交  (http://weistock.com/bbs/list.asp?boardid=4)
----  收盘无发出平仓指令  (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=137362)

--  作者:黄金精算师
--  发布时间:2016/8/1 15:57:40
--  收盘无发出平仓指令
这个自带的日内平仓模型为什么收盘不会平仓,图表看是会平仓的(在5分钟周期下)。
模拟盘时发现没有发出平仓指令,怎么改一下,在收盘前一点点发出有效的平仓指令

//中间变量
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:=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*浮动区间;
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);


--  作者:jinzhe
--  发布时间:2016/8/1 16:05:39
--  

写错了

t2:=time0>=timetot0(closetime(0))-nmin*100;


--  作者:黄金精算师
--  发布时间:2016/8/1 16:40:56
--  

这两行都是对的吗?图表上看着尾盘不停的开平仓,这个NMIN*100是多少时间呀,如果我只在最后一根K柱平仓(就是提前5分钟平仓)
T1:=TIME>OPENTIME(1) AND TIME<CLOSETIME(0)-NMIN*100;      //这样写也一样TIME0<CLOSETIME(0)-NMIN*100
T2:=TIME0>=CLOSETIME(0)-NMIN*100;

--  作者:jinzhe
--  发布时间:2016/8/1 16:42:02
--  
T1:=TIME>OPENTIME(1) AND TIME0<CLOSETIME(0)-NMIN*60;    
T2:=TIME0>=CLOSETIME(0)-NMIN*60;
[此贴子已经被作者于2016-8-1 16:42:18编辑过]

--  作者:黄金精算师
--  发布时间:2016/8/1 17:26:06
--  
这样不会平尾盘了
NMIN是什么单位
--  作者:jinzhe
--  发布时间:2016/8/1 17:28:20
--  

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:=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*浮动区间;
T1:=TIME>OPENTIME(1) AND TIME0<(timetot0(CLOSETIME(0))-NMIN*60);   
T2:=TIME0>=(timetot0(CLOSETIME(0))-NMIN*60);

手数:=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);


--  作者:jinzhe
--  发布时间:2016/8/1 17:28:34
--  
nmin 是前面定义的参数
--  作者:黄金精算师
--  发布时间:2016/8/4 9:03:32
--  
这样写在1分钟的K线下尾盘一样会不停的开仓,
T1:=TIME>OPENTIME(1) AND TIME0<=(timetot0(CLOSETIME(0))-NMIN*600);  
这一个限制不是用来限制开仓时间的吗,怎么限制不了呢  
TIME0<=(timetot0(CLOSETIME(0))-NMIN*600);    
这个好像能改变平仓时间为什么不能改变开仓时间

下面为程序
手数:=1;
NMIN:=10;

CYC:=BARSLAST(DATE<>REF(DATE,1))+1;

T1:=TIME>OPENTIME(1) AND TIME0<=(timetot0(CLOSETIME(0))-NMIN*600);    
T2:=TIME0>=(timetot0(CLOSETIME(0))-NMIN*60);
//ma1:ma(C,10);
//ma2:ma(c,60);

分钟1:stkindi(\'\',\'公式1.ma5\',0,1,-1);
分钟2:stkindi(\'\',\'公式1.ma10\',0,1,-1);

KD:= CROSS(分钟1,分钟2);          
PD:=CROSS(分钟2,分钟1);          
KK:=CROSS(分钟2,分钟1);        
PK:=CROSS(分钟1,分钟2);         

开多:BUY(KD AND T1 AND CYC>1,手数,MARKET);
开空:BUYSHORT(KK AND T1 AND CYC>1,手数,MARKET);
收盘平多:SELL(T2,手数,MARKET);
收盘平空:SELLSHORT(T2,手数,MARKET);
[此贴子已经被作者于2016-8-4 9:05:06编辑过]

--  作者:jinzhe
--  发布时间:2016/8/4 9:13:06
--  
T1:=TIME>OPENTIME(1) AND TIME0<(timetot0(CLOSETIME(0))-NMIN*60);   
这个是我写的,你自己改成600了
--  作者:黄金精算师
--  发布时间:2016/8/4 9:30:02
--  
60不行,我再加到600,就是为了不让他早开仓,但是一样不行,6~600都一样
[此贴子已经被作者于2016-8-4 9:30:34编辑过]