以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://222.73.7.161/bbs/index.asp)
--  公式模型编写问题提交  (http://222.73.7.161/bbs/list.asp?boardid=4)
----  策略问题  (http://222.73.7.161/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
--  
 我把策略加载上去看了下:

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

就这个信号而言,基本上应该是OK的。都严格按照10个点价格 来触发止盈止损信号的。

在历史回测上,这个信号就看持仓均价和触发信号K的收盘价是否符合了。
这里额外说下,模型里面你要是用的是market 指令,在模型里面 它的持仓均价是 出信号K的下一个K的开盘价,这个其实也好理解,回测其实是按照走完K处理,次根K的开盘价 是最接近按照市价成交的情况的。

反正目前来看,图表模型上信号应该是没问题的。 你进行的回测里你看下是不是设置了额外的出场规则?

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

就是上面这里的。


我们先排查掉模型信号问题后,再看后续是不是执行方面问题了。

--  作者: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;

代码一样吗?