趋势:=ma(c,300);
操作:=ma(c,80);
KD:=c>=趋势 and 趋势>ref(趋势,1) and cross(c,操作); //开多条件
PD:=cross(趋势,c); //平多条件
KK:=c<=趋势 and 趋势<ref(趋势,1) and cross(操作,c); //开空条件
PK:=cross(c,趋势); //平空条件
平空:SELLSHORT(PK,1,MARKET); //平空信号
开多:BUY(KD AND HOLDING=0,1,MARKETE); //开多信号
平多:SELL(PD,1,MARKET); //平多信号
开空:BUYSHORT(KK AND HOLDING=0,1,MARKET); //开空信号
资金:asset;
{以下不会编写,以文字叙述}
{思路是先对单个品种交易的资金进行管理,然后对所有交易品种的资金进行管理}
{此处为单个品种资金管理部分}
tt:=150+(150根K线内没有持仓的K线数量)
s1:ma(hhv(资金,tt),tt);
X1:ma(llv(资金,tt),tt);
A,当 资金下穿X1 的时候 交易停止并且把已有头寸清空
B,当 资金上穿S1 的时候 交易重新开始 并且 接回 应该有的头寸(就是按照KD,KK信号持有的头寸)
D,,当 连续亏损3次 交易停止并且把已有头寸清空
E,当 资金回调2%时 交易停止并且把已有头寸清空
F,当 资金反弹3%并且资金>=x1 时 交易重新开始 接回 应该有的头寸(就是按照KD,KK信号持有的头寸)
执行1:if(HOLDING<>0,1,0);(就是满足ABDEF条件后持有头寸的时候为1,其余为0)
{此处为所有品种资金管理部分}
{整个程序将用在螺纹钢和HC 2个品种上,以下是将2个品种的资金相加后的控制}
总资金:=asset(螺纹钢)+asset(HC);
ztt:=150+(150根K线内没有持仓的K线数量)
zs1:ma(hhv(总资金,ztt),ztt);
zX1:ma(llv(总资金,ztt),ztt);
ZA,当 总资金下穿ZX1 的时候 交易停止并且把已有头寸清空
ZB,当 总资金上穿ZS1 的时候 交易重新开始 并且 接回 应该有的头寸(就是按照执行1信号持有的头寸)
ZE,当 总资金回调2%时 交易停止并且把已有头寸清空
ZF,当 总资金反弹3%并且总资金>=x1 时 交易重新开始 接回 应该有的头寸(就是按照执行1信号持有的头寸)
在单个品种资金管理部分 我漏了二个
G,当单次亏损额度超过3次平均亏损额度时候 停止交易并且清空所有头寸
H,当 单次亏损额度小于3次平均亏损额度并且 资金>S1时候 重新开始 并且接回头寸
{此处为所有品种资金管理部分}
{整个程序将用在螺纹钢和HC 2个品种上,以下是将2个品种的资金相加后的控制}
总资金:=asset(螺纹钢)+asset(HC);
ztt:=150+(150根K线内没有持仓的K线数量)
zs1:ma(hhv(总资金,ztt),ztt);
zX1:ma(llv(总资金,ztt),ztt);
ZA,当 总资金下穿ZX1 的时候 交易停止并且把已有头寸清空
ZB,当 总资金上穿ZS1 的时候 交易重新开始 并且 接回 应该有的头寸(就是按照执行1信号持有的头寸)
ZE,当 总资金回调2%时 交易停止并且把已有头寸清空
ZF,当 总资金反弹3%并且总资金>=x1 时 交易重新开始 接回 应该有的头寸(就是按照执行1信号持有的头寸)
这一部分在图表选中实现不了,图表中的各个品种是相互独立的
前面部分可以实现,需要确认下,
tt:=150+(150根K线内没有持仓的K线数量)//这个指其实就是空仓以来到现在的k线数量?
s1:ma(hhv(资金,tt),tt);//这个没有任何意义,因为没有持仓说明资金都是可用的并且灭有变化。
X1:ma(llv(资金,tt),tt);
回复5楼
意思是 有持仓时候的150根K线,无持仓的时候不计算S1和X1。因为我不知道怎么把计算S1和X1的时候把不持仓部分去除在计算公式外,所以S1和X1直接用 150+(150根K线内没有持仓的K线数量)
说道底一句话,有持仓的时候计算S1和X1 如果开始建仓到现在K线的数值不足150,则向上一次持仓时候的数值一起计算。两次持仓中间的不持仓部分,不进入S1和X1的计算。
就是不持仓部分剔除掉,因为不持仓的时候资金是一条水平线,如果计算进去,S1和X1会失真。
就是不持仓部分剔除掉,因为不持仓的时候资金是一条水平线,如果计算进去,S1和X1会失真。
这个没办法资金是序列变量,每根k都会参与计算。