可以做到,使用STKINDI函数即可。
比如引用A模型日线周期下开仓条件:
STKINDI('','A.开仓',0,6,0);
每个参数都有自己的含义,可以指定品种,周期,指标等。
老师:我干脆把思路完整说一下.我有两个模型,A模型和B模型,这两个模型都是开多仓模型,而且A模型和B模型的使用周期不同,A模型是小周期(假定15分钟模型),B模型是大周期(假定周K线模型)。我的设计思路是:
当B模型处于于理论多仓状态时,开多仓,同时运行A模型,满足A平仓条件,则平仓,满足A模型多仓条件不重复开仓(和B模型的开多仓过滤),当满足B模型平仓条件时,则全部平仓。A模型在B模型处于非持仓状态,不开仓。
我之前咨询过,上述思路的实现要涉及到调用B模型持仓状态的问题,有老师说用到算法模型,我看了,还是不明白,能否请老师举例演示一下?
为了方便说明问题,我就举例:
A模型:
收盘价上穿20日均线,开仓;
收盘价下穿20日均线,平仓;
B模型:
收盘价上穿30日均线,开仓;
收盘价下穿30日均线,平仓;
特别说明:
1.只有当B模型处于多仓持仓状态且满足A模型多仓持仓状态时,开多仓。所谓的多仓持仓状态就是开多仓后,未发出平仓信号,而不是简单地理解为触发开多仓条件,模型要对A模型和B模型的持仓状态都做判断并且调用;
2.当B模型处于多仓状态,A模型出平仓信号,则执行平仓;当B模型于空仓状态,即使A模型出多仓信号,也不开仓;
3.B模型出平仓信号,一律全部平仓。
请老师把模型完整写一下,谢谢!
你的特别说明中的1和2形成了互锁机制。不会形成开仓信号
按照你的说明,你这是要在一个指标(假设C指标)C,里面同时引用A和B的状态了。
模型a:
ma20:ma(c,20);
buycond:cross(c,ma20);
sellcond:cross(ma20,c);
if buycond then buy(holding=0,1,market);
if sellcond then sell(holding>0,holding,MARKET);
aholding:holding;
模型b:
ma30:ma(c,30);
buycond:cross(c,ma30);
sellcond:cross(ma30,c);
if buycond then buy(holding=0,1,market);
if sellcond then sell(holding>0,holding,MARKET);
bholding:holding;
模型c:
bholding:STKINDI('','b.bholding',0,7,0);// 引用a,b的变量
aholding:STKINDI('','a.holding',0,3,0);
asellcond:STKINDI('','a.sellcond',0,3,0);
bsellcond:STKINDI('','b.sellcond',0,7,0);
abuycond:STKINDI('','a.buycond',0,3,0);
bbuycond:STKINDI('','b.buycond',0,7,0);
if bholding>0 and aholding>0 and not(asellcond or bsellcond) then buy(holding=0,1,MARKET);//开仓
if (bholding>0 and asellcond) or bsellcond then sell(holding>0,holding,MARKET);//平仓
分开分别回测。两个策略不能同时回测。