请问如何写
第一次开仓后,符合平仓条件不平仓,等到第二次开仓后,符合第二次平仓条件再把第一次和第二次开仓的都平仓
如果是固定手的开仓。其实直接加一个对仓位的判断就行了。
用全局变量可以做到的。
用下面代码做例子。你直接加载看信号。
input:p(26,20,100,8),s(12,5,40,4),m(9,2,60,6),n(9,1,100,10),p1(3,2,40,4),p2(3,2,40,4);//参数设置
VARIABLE:mark:=0;
RSV:=(CLOSE-LLV(LOW,N))/(HHV(HIGH,N)-LLV(LOW,N))*100;
K:=SMA(RSV,P1,1);
D:=SMA(K,P2,1);
J:3*K-2*D;
DIFF : =EMA(CLOSE,S) - EMA(CLOSE,P);
DEA := EMA(DIFF,M);
MACD1 := 2*(DIFF-DEA), COLORSTICK;
macdjc:cross(diff,dea);//多头买入条件
macdsc:cross(dea,diff);//多头卖出条件
kdjjc:cross(k,d);//kdj金叉 空头卖出条件
kdjsc:cross(d,k);//空头买入条件
if macdjc then
begin
mark:=mark+1;
buy(1,1,market);
end
if macdsc and holding>0 and mark=2 then
begin
sell(holding>0 and macdsc,holding,market);
mark:=0;
end
DRAWICON(macdsc,l,2);
全局变量只要把我的代码全部声明一下可以吗?有跨周期引用数据不要紧把
就只需要申明一个全局变量就行了。不是把全部代码都申明一遍。
上面的简化下就这样,你自己替换成你的开仓,平仓条件进去就行了。
VARIABLE:mark:=0;
if 开仓条件 then
begin
mark:=mark+1;
buy(1,1,market);
end
if 平仓条件 and holding>0 and mark=2 then
begin
sell(holding>0,holding,market);
mark:=0;
end
if sd then sell(holding>0,0,market); //卖信号
sd2:日中<REF(日中,1);
if sd2 then sell(holding>0,0,market); //卖信号
LL10:ref(llv(l,10),ENTERBARS+1);
sd1:C<LL10;//卖出条件2
//交易系统
if kd then
begin
mark:=mark+1;
buy(holding=0,5%,market),PERTRADER;
end
if sd1 and holding>0 and mark=2 then
begin
sell(holding>0 and sd1,holding,market);
mark:=0;
end
DRAWICON(sd1,l,2);
这样写后,出现一个问题是,第一次开仓后,出现第一次平仓条件sd1确实没有平仓,但后面再出现第二个开仓信号没有开仓5%仓位,只有第一次的5%持仓