我按照平仓时候重置来处理的。 你可以参考下这个思路。
[PEL] 复制代码 variable:s1:=0,初始投入资金:=0;
if barpos=1 then
begin
初始投入资金:=asset*0.2;//初始资金的20%
marginratio:=taccount(41);//多头保证金比率. 这个要把合约信息设置里面的费率设置正确,否则函数取到的值可能是不对的。
bzj:=close*multiplier*marginratio;//一手保证金占用
s1:=intpart(初始投入资金/(bzj));//根据资金计算的开仓手数, 根据实际情况可能为0 需要额外判断。
end
初始手数:S1;//仅输出使用
ma5:ma(c,10);
ma10:ma(c,20);
ma30:ma(c,30);
kd:cross(ma5,ma10) or cross(ma10,ma30) or cross(ma5,ma30);
pd:cross(ma10,ma5) and cross(ma30,ma5);
if kd and abs(holding)<s1 then
begin
reals:=max(1,intpart(s1-abs(holding))/2);
buy(1,reals,market);
end
if pd and holding<>0 then
begin
sell(1,0,market);
//平仓时候重置
初始投入资金:=asset*0.2;//初始资金的20%
marginratio:=taccount(41);//多头保证金比率. 这个要把合约信息设置里面的费率设置正确,否则函数取到的值可能是不对的。
bzj:=close*multiplier*marginratio;//一手保证金占用
s1:=intpart(初始投入资金/(bzj));//根据资金计算的开仓手数, 根据实际情况可能为0 需要额外判断。
end
|