以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (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 -- ![]() ![]() ![]() ![]() |
-- 作者: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 -- 还有可能是平仓条件也是满足的,所以按照平仓条件进行平仓而不是止损平的
你把止损语句写在开平语句前面 |