tholding、tholding2其实也可以在图表交易上使用,但要用得当。
注意:每次下平仓单,必须holding有持仓。如果前面的信号消失了,holding也就为0,即使tholding>0,但也不下单的。
比如我们想手动开仓,自动平仓,以下的例子并不会正确平仓:
if tholding2>0 then sell(1,1,market);
示例:
假设某投资者是个半自动交易者,手动开仓,自动平仓。那我们如果做到使用tholding呢?
让holding=tholding!!就是让前面有开仓,OK,buy(barpos=datacount-1,实际持仓,market)。
可是在逐周期模式下,tholding只在最后一个周期有值,其余都=0,怎么办?用extgbdata。
完整代码如下:
aa:tholding,linethick0;
bb:=extgbdata('quanju');
if bb>0 then buy(barpos=datacount-1,bb,thisclose);
if aa>0 then
begin
sell(1,0,market);
end
if islastbar then extgbdataset('quanju',aa);
//以上代码可实现 手动开仓,自动平仓。
操作案例:(注:这个代码在 手工开仓前,未开启图表程序化前,图表上无信号)
1、手工下个单
2、然后在下单的品种加载以下公式,运行图表程序化,固定时间间隔1秒(仅为以下测试用,非强制项)
aa:tholding,linethick0;
bb:=extgbdata('quanju');
if
bb>0 then buy(barpos=datacount-1,bb,thisclose);//让图表显示开仓信号
if aa>0 and
currenttime>=101245 then
//红色时间根据实际情况自己定
begin
sell(1,0,market);
end
if
islastbar then extgbdataset('quanju',aa);
注意观察 程序化 运行前后,图表上的信号变化,运行完毕后,图表上有没有留下信号痕迹?
若两个方向上都有手动干预,每次干预后都希望下一步程序能自动操作,即:
1-holding>0时,手动开了空单,使得tholding<0;此时希望程序能自动平掉空单,但虚拟图表上前面一个信号为开多,没有开空信号,导致无法平仓
2-holding<0时,手动开了多单,使得tholding>0,此时希望程序下一步判断后自动平掉多单,但虚拟图表上前面一个信号为开空,并没有开多信号,导致无法平仓
按照阿火的思路加入相应的代码,但两个方向均加入时下面的代码运行不正常,使用环境为图表程式化1秒轮循:
a:="macd.diff";
b:="macd.dea";
jczt:=a>=b;
sczt:=a<b;
//金叉做多死叉做空
//开多,平空
kd:=cross(a,b);
if kd then begin
sellshort(1,0,market);
buy(1,0,market);
end
//平多,开空
kk:=cross(b,a);
if kk then begin
sell(1,0,market);
buyshort(1,0,market);
end
//
aa:tholding2,linethick0;
bb:extgbdata('quanju'),linethick0;
//产生一个虚拟的开空信号,便于后面平空操作
if bb<0 then buyshort(barpos=datacount-1,-bb,thisclose);
//若金叉状态还有空单马上平空
jcpk:=aa<0 and a>b;
if jcpk then begin
sellshort(1,bb,market);
end
//产生一个虚拟开多信号,便于后面平多操作
if bb>0 then buy(barpos=datacount-1,bb,thisclose);
//若死叉状态还有多单马上平多
scpd:aa>0 and a<b,linethick0;
if scpd then begin
sell(1,bb,market);
end
//
if islastbar then extgbdataset('quanju',aa);
最近事比较多,正在处理其他策略问题,这个问题 改日我再测试下。
最近事比较多,正在处理其他策略问题,这个问题 改日我再测试下。
好,静候佳音
好,静候佳音 朋友,你这个问题解决了没