等级: 超级版主
- 注册:
- 2021-5-18
- 曾用名:
- FireScript
|
runmode:0;
Globalvariable:hold=drawnull;
……//这里添加上你自己的模型
……//这里添加上你自己的模型
cc800988:=holding;//调用图表模型持仓,这句放在信号稳定的地方,即时下单的,就放图表下单语句的后面,K线走完下单的就放到图表下单语句的前面
drawtextex(1,1,800,0,'虚拟持仓为:'+numtostr(cc800988,0));//在图表上输出虚拟持仓以便监控
if not(islastbar) or workmode<>1 then exit;//非后台模式下 直接退出不执行
xiadan800988:=cc800988-hold;//虚拟持仓前后变化的差值 。这里分很多情况。包括:多空转换了,或者是单向的仓位增减了,或者全平了。
if xiadan800988>0.5 then begin //之所以是大于0.5 意思是差值只要不为0 就进行仓位调整。
//差值是正数,有以下几种情况:
//多头加仓了
//空头减仓了或者全平了
//空头转多头了
cang:=min(xiadan800988,abs(hold));//计算空减仓或者空全平或者空转多 时候需要平空的数量。
if hold<0 then tsellshort(1,cang,mkt,0,0,'800988'),allowrepeat;//hold小于0 表示当前是:空减仓或者空全平或者空转多了。因此这里需要执行平空操作。
cang:=xiadan800988+min(hold,0);//cang是否大于0 决定了是否是多开仓还是只是单纯空全平。大于0说明当前需要开多。
if cang>0 then tbuy(1,cang,mkt,0,0,'800988'),allowrepeat;
end
//差值是负数情况 和正数情况同理,不再赘述。
if xiadan800988<-0.5 then begin
cang:=min(abs(xiadan800988),abs(hold));
if hold>0 then tsell(1,cang,mkt,0,0,'800988'),allowrepeat;
cang:=abs(xiadan800988)-max(hold,0);
if cang>0 then tbuyshort(1,cang,mkt,0,0,'800988'),allowrepeat;
end
hold:=cc800988;
补充在注释说明里。
这里的情况你可以自行按照注释里提到的几种情况,罗列下就能完全理解代码的原理了。 |
|