以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  公式模型编写问题提交  (http://weistock.com/bbs/list.asp?boardid=4)
----  对阿火后台模型的问题  (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=147405)

--  作者:zx7027
--  发布时间:2017/2/5 16:40:57
--  对阿火后台模型的问题

首先感谢阿火的模板,感谢管理员的解答。


问题已用红色标出,见注释的【1】~【3】。


runmode:0;
Globalvariable:hold=drawnull;
……//这里添加上你自己的模型

……//这里添加上你自己的模型

cc800988:=holding;//这句放在信号稳定的地方
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
 cang:=min(xiadan800988,abs(hold)); //【1】在cang的计算中,为什么要与hold进行某种形式的比较?xiadan800988本来就是虚拟持仓的变化量了。
 if hold<0 then begin
  tsellshort(1,cang,mkt,0,0,\'800988\'),allowrepeat;
  debugfile(\'D:\\800988.txt\',numtostr(hold,0)+\' \'+numtostr(cc800988,0)+\' 平空 %.0f\',cang);
 end
 cang:=xiadan800988+min(hold,0); //【2】min(hold,0)恒等于0,这句的用途是?
 if cang>0 then begin
  tbuy(1,cang,mkt,0,0,\'800988\'),allowrepeat;
  debugfile(\'D:\\800988.txt\',numtostr(hold,0)+\' \'+numtostr(cc800988,0)+\' 开多 %.0f\',cang);
 end
end
if xiadan800988<-0.5 then begin
 cang:=min(abs(xiadan800988),abs(hold));
 if hold>0 then begin
  tsell(1,cang,mkt,0,0,\'800988\'),allowrepeat; //【3】allowrepeat的意义是?什么情况下会进行重复发单?
  debugfile(\'D:\\800988.txt\',numtostr(hold,0)+\' \'+numtostr(cc800988,0)+\' 平多 %.0f\',cang);
 end
 cang:=abs(xiadan800988)-max(hold,0);
 if cang>0 then begin
  tbuyshort(1,cang,mkt,0,0,\'800988\'),allowrepeat;
  debugfile(\'D:\\800988.txt\',numtostr(hold,0)+\' \'+numtostr(cc800988,0)+\' 开空 %.0f\',cang);
 end
end
hold:=cc800988;




--  作者:jinzhe
--  发布时间:2017/2/6 9:05:37
--  
这段代码的目的是什么?
[此贴子已经被作者于2017-2-6 9:05:44编辑过]

--  作者:zx7027
--  发布时间:2017/2/6 9:29:23
--  
利用图表的虚拟持仓的变化进行后台程序化操作。
http://www.weistock.com/bbs/dispbbs.asp?BoardID=10&replyID=39654&ID=9112&skin=1

--  作者:jinzhe
--  发布时间:2017/2/6 10:34:27
--  

1.hold为上次交易后的持仓结果,cc800988为这次交易后的持仓结果。

在反手交易的情况下,hold为负数,cc800988为正数,那么xiadan800988的结果可能是一个比abs(hold)要大,那么平仓时则要平掉全部空仓,那么平仓手数为abs(hold),用min是为了获取abs(hold)。

比如:上次交易为5手开空,当前交易为10手开多。则hold为-5 ,cc800988为10,xiadan800988为15。要平仓手数为5手,所以要用min来求出5这个数

 

2.并不是恒等于0,在上面基础上,min(0,hold)的结果为-5,平仓之后反手开仓,那么要求出反手开仓的数量:10手。

那么cang:=xiadan800988+min(0,hold)就是 15+(-5),即开多10手

 

3.防止一根k线内信号反复变化,用allowrepeat使得一根k线内能反复下单,信号变化时也能接着执行下单,让实际交易和信号保持一致

 

 


--  作者:zx7027
--  发布时间:2017/2/6 10:36:14
--  
感谢,如果我用K线走完模式的话,就没有必要用allowrepeat了吧?