以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  公式模型编写问题提交  (http://weistock.com/bbs/list.asp?boardid=4)
----  帮我看看止损条件为什么没用  (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=61706)

--  作者:crystal731
--  发布时间:2014/2/17 11:19:57
--  帮我看看止损条件为什么没用
我的策略是日内亏损达到1000后就平仓,当头不再开仓,可在测试焦炭指数的时候有亏损达到3000以上的,不知道为什么,语句如下:
INPUT:N(1,1,100,1),NMIN(10,1,100,1),SS(1,1,10000,1),x(20,10,100,1),q(10,1,50,1);
VARIABLE:趋买势:=0,k1:=0.7,k2:=0.7,y=:0;

M:=NUMTOSTR(N,0);
p:=NUMTOSTR(q,0);
S:=TODAYBAR;
HH:=HHV(H,S);//当日最高价
LL:=LLV(L,S);//当日最低价
OO:=STKINDI(\'\',\'MAO.MAO1(1)\',0,6,0);//当日开盘价
昨收:=stkindi(\'\',\'MAO.MAO2(1)\',0,6,-1);
昨昨收:=stkindi(\'\',\'MAO.MAO2(1)\',0,6,-2);//昨天的前一天的收盘价,暂称为昨昨收


昨高:=STKINDI(\'\',\'MAO.hh(\'&M&\')\',0,6,-1);
昨低:=STKINDI(\'\',\'MAO.ll(\'&M&\')\',0,6,-1);
高收:=STKINDI(\'\',\'MAO.hc(\'&M&\')\',0,6,-1);
低收:=STKINDI(\'\',\'MAO.lc(\'&M&\')\',0,6,-1);
关键点:=(stkindi(\'\',\'MAO.MAO2(1)\',0,6,-1)-stkindi(\'\',\'MAO.MAO2(1)\',0,6,-q))/(stkindi(\'\',\'MAO.hh(&q&)\',0,6,-1)-stkindi(\'\',\'MAO.ll(&q&)\',0,6,-1))*100;


浮动区间:=MAX(昨高-低收,高收-昨低);//RANGE 


if 昨收>昨昨收 then begin 
    if 关键点<x then begin
      k1:=0.35;
      k2:=0.7;
    end
    if 关键点>=x then BEGIN
      k1:=0.7;
      k2:=0.35;
    end
end

if 昨收<=昨昨收 then begin
   if 关键点<x then begin
   k1:=0.7;
   k2:=0.35; 
   end
   if 关键点>=x then BEGIN
   k1:=0.35;
   k2:=0.7;
   end
end


上轨:OO+K1*浮动区间;
下轨:OO-K2*浮动区间;
T1:=TIME>OPENTIME(1) AND TIME<CLOSETIME(0)-NMIN*100;
T2:=TIME>=CLOSETIME(0)-NMIN*100;
手数:=SS;
a1:=ref(asset,todaybar);
if a1-asset>1000 then y:=1;


//交易条件
开多条件:=C>上轨 AND (HOLDING=0 or holding<0) and y=0;
开空条件:=C<下轨 AND (HOLDING=0 or holding>0) and y=0;
平空条件:=C>上轨 AND HOLDING<0;
平多条件:=C<下轨 AND HOLDING>0;
//交易系统
平空:sellshort(平空条件 and t1,手数,market);
开多:BUY(开多条件 AND T1,手数,MARKET);
平多:sell(平多条件 and t1,手数,market);
开空:BUYSHORT(开空条件 AND T1,手数,MARKET);

//亏损1000元自动止损可以写成这样
if asset-a1<=-1000 then begin
   sell(1,0,market);
   sellshort(1,0,market);
end
收盘平多:SELL(T2,手数,MARKET);
收盘平空:SELLSHORT(T2,手数,MARKET);

ak1:k1,LINETHICK0;
ak2:k2,LINETHICK0;

if time=closetime(0) then y:=0;




//最后每天收盘时重置全局变量
亏损:a1,LINETHICK0;
总亏损:a1-asset,LINETHICK0;
浮动盈亏:OPENPROFIT,LINETHICK0;
当前持仓:HOLDING,COLORGRAY,LINETHICK0;
当前资产:ASSET,NOAXIS,COLORGRAY;//输出当前资产,但不影响坐标最高最低值

--  作者:jinzhe
--  发布时间:2014/2/17 11:23:45
--  
这个亏损3000是一天之内亏损的总和还是单笔?
--  作者:crystal731
--  发布时间:2014/2/18 15:02:10
--  

单笔,而且我在程序里编写的是要求一天亏损只有1000的。


--  作者:jinzhe
--  发布时间:2014/2/19 9:05:19
--  
发下测评截图
--  作者:crystal731
--  发布时间:2014/2/19 11:30:07
--  

没法上传图片啊

 


--  作者:jinzhe
--  发布时间:2014/2/19 11:31:19
--  

http://www.weistock.com/bbs/dispbbs.asp?boardid=2&Id=31614&page=3

 


--  作者:crystal731
--  发布时间:2014/2/19 14:18:48
--  

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

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

--  作者:jinzhe
--  发布时间:2014/2/19 14:30:19
--  
//亏损1000元自动止损可以写成这样
if asset-a1<=-1000 then begin
   sell(1,0,market);
   sellshort(1,0,market);
end

 

 

这个是亏损1000平仓的代码?

 

那么逻辑清楚了,亏损3000也就是asset-a1=-3000,那么asset-a1<-1000不也是成立的

改成 asset-a1<0 and asset-a1>-1000表示在亏损1000-0之间可以平仓了


--  作者:crystal731
--  发布时间:2014/2/19 14:46:29
--  

改成 asset-a1<0 and asset-a1>-1000表示在亏损1000-0之间可以平仓,那如果他只亏损了1元就平仓了呢?》还有,asset-a1<=-1000 亏损到1000以上的时候平仓,那么为什么他亏损到1001或者1500的时候不平仓,那个时候肯定应该出信号了。而不是到了3000才平仓吧


--  作者:jinzhe
--  发布时间:2014/2/19 15:06:30
--  

还有可能是平仓条件也是满足的,所以按照平仓条件进行平仓而不是止损平的

 

你把止损语句写在开平语句前面