以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (http://weistock.com/bbs/index.asp) -- 公式模型编写问题提交 (http://weistock.com/bbs/list.asp?boardid=4) ---- 策略问题 (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=188317) |
-- 作者:hh1988 -- 发布时间:2021/5/16 16:47:12 -- 策略问题 今天两个问题点 1.比如 A上穿B作为 开仓1,C上穿D作为 开仓2,A上穿D作为 开仓3,,,,,,,,,三个开仓点 无论这三个开仓点哪个先发出信号 空仓情况只要有开仓信号就开仓,不重复开仓 还有就是晚上22点之后空仓情况下有开仓信号不开仓 有仓位的情况下,晚上收盘前2-3分钟强制平仓,止损点20个点 止盈点50个点。这个策略代码具体怎么写? 2.还有一个很常见的问题 就是止盈止损策略 实际情况与逻辑不符, 实际会出现提前止损止盈(比如我止损止盈30个点,但是实际止盈止损会是10...20),也有滞后止盈止损的情况 (止损止盈30个点,实际止损止盈可能是40,50....80 ),固定止损 止盈好像实际情况下更像随机止损止盈,我是k线走完模式 好像不是k线走完没有走完的问题,你可以看一次回测图表的情况 就明白了。 轮询会出现重复开仓的情况 ,首先我是开仓信号是这样的 开多:buy(KD and holding=0,1,market);//开仓信号 很多人都遇到止盈的问题。 |
-- 作者:FireScript -- 发布时间:2021/5/17 9:17:40 -- 1.三个开仓条件用or关联下就行了。这个我记得前面写过吧。这个应该没什么问题的吧。 2.收盘平仓: //只能日线以下级别才能实现,日线以及以上大周期无效
N:=2; abb:=timetot0(CLOSETIME(0))-time0,NODRAW;//当前K线时间距离收盘K线结束倒计时 abb3:=timetot0(CLOSETIME(0))-timetot0(dynainfo(207)),NODRAW;//当前时间距离收盘K时间 cd:(abb<N*60 and abb>=0 and (not(ISLASTBAR))) or (ISLASTBAR and abb3>=0 and abb3<N*60);//收盘前2分钟平仓 if cd then begin sell(holding>0,holding,market); sellshort(holding<0,holding,market); end 3.你如果用的“k线走完模式 ”。那这个止盈止损首先肯定无法做到实时止损了。因为走完K是在K线走完之后根据信号进行下单操作的。如果你用的K线最高最低价进行止盈止损判断,那么无论什么模式 信号肯定会出的。但是如果用走完K下单,就很可能实际执行下单时候价格和触发信号的价格存在一个偏差了。 另外就是图表模型一切都是基于图表模型的虚拟资金,虚拟持仓的,我不确定你是否是对照了实际账户的持仓进行判断的。 所以你最好能多提供一些信息,方便我进一步判断。 |
-- 作者:FireScript -- 发布时间:2021/5/17 9:19:15 -- 4.“轮询会出现重复开仓的情况” 这个不会的,同样的下单语句不会再一个K上重复下,这是机制上就有的限制。所以我不知道你这个重复开仓,具体是什么情况。 是不同信号的下单,也视为重复开仓吗? |
-- 作者:hh1988 -- 发布时间:2021/5/17 9:29:05 -- 不能及时止损止盈这个我可以理解,但是提前止盈止损又是什么情况 |
-- 作者:hh1988 -- 发布时间:2021/5/17 9:31:23 -- //固定止盈止损部分************************ //多止盈 IF C-AVGENTERPRICE>35*MINDIFF THEN BEGIN SELL(1,HOLDING,MARKET); END //多止损 IF AVGENTERPRICE-C>10*MINDIFF THEN BEGIN SELL(1,HOLDING,MARKET); END //空止盈 IF AVGENTERPRICE-C>35*MINDIFF THEN BEGIN SELLSHORT(1,HOLDING,MARKET); END //空止损 IF C-AVGENTERPRICE>10*MINDIFF THEN BEGIN SELLSHORT(1,HOLDING,MARKET); END //************************************ |
-- 作者:FireScript -- 发布时间:2021/5/17 9:31:37 -- “实际会出现提前止损止盈(比如我止损止盈30个点,但是实际止盈止损会是10...20),也有滞后止盈止损的情况 (止损止盈30个点,实际止损止盈可能是40,50....80 )” 你这个有没有具体例子可以展示。 信号和下单截图呢。
|
-- 作者:hh1988 -- 发布时间:2021/5/17 9:33:24 -- 就是模拟盘实际测试中遇到的这些问题,回测记录里面也存在这些问题 |
-- 作者:FireScript -- 发布时间:2021/5/17 10:52:23 -- 我把策略加载上去看了下: 就这个信号而言,基本上应该是OK的。都严格按照10个点价格 来触发止盈止损信号的。 在历史回测上,这个信号就看持仓均价和触发信号K的收盘价是否符合了。 这里额外说下,模型里面你要是用的是market 指令,在模型里面 它的持仓均价是 出信号K的下一个K的开盘价,这个其实也好理解,回测其实是按照走完K处理,次根K的开盘价 是最接近按照市价成交的情况的。 反正目前来看,图表模型上信号应该是没问题的。 你进行的回测里你看下是不是设置了额外的出场规则? 就是上面这里的。 我们先排查掉模型信号问题后,再看后续是不是执行方面问题了。
|
-- 作者:hh1988 -- 发布时间:2021/5/17 11:28:41 -- 我看了一下,同一个策略,同一个品种,我跟你的信号完全不一样 |
-- 作者:hh1988 -- 发布时间:2021/5/17 11:40:59 -- ![]() LOWV:=LLV(LOW,9); HIGHV:=HHV(HIGH,9); RSV:=EMA((CLOSE-LOWV)/(HIGHV-LOWV)*100,3); K:=EMA(RSV,3); D:=MA(K,3); //准备下单条件。 COND1:=CROSS(C,MA(CLOSE,10))AND C>MA(CLOSE,10)*1.0015;//开仓条件 COND2:=CROSS(D,K);//开空条件 //下单 开多仓:BUY(COND1 and holding=0,1,market),IGNORECHECKPRICE;//开仓信号 开空:buyshort(COND2 and holding=0,1,market);//开空信号 //固定止盈止损部分************************ //多止盈 IF C-AVGENTERPRICE>35*MINDIFF THEN BEGIN SELL(1,HOLDING,MARKET); END //多止损 IF AVGENTERPRICE-C>10*MINDIFF THEN BEGIN SELL(1,HOLDING,MARKET); END //空止盈 IF AVGENTERPRICE-C>35*MINDIFF THEN BEGIN SELLSHORT(1,HOLDING,MARKET); END //空止损 IF C-AVGENTERPRICE>10*MINDIFF THEN BEGIN SELLSHORT(1,HOLDING,MARKET); END //************************************ //其他 当前持仓:HOLDING,COLORGRAY,LINETHICK0; 当前资产:ASSET,NOAXIS,COLORGRAY; 代码一样吗? |