欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件公式模型编写问题提交 → 图表转后台的问题

   

欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。    


  共有2950人关注过本帖树形打印复制链接

主题:图表转后台的问题

帅哥哟,离线,有人找我吗?
Ritter
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:139 积分:0 威望:0 精华:0 注册:2016/12/13 9:40:24
图表转后台的问题  发帖心情 Post By:2020/11/24 13:50:21    Post IP:121.232.26.103[只看该作者]

INPUT:ZY(0.03,0.01,0.09,0.005),ZS(0.009,0.001,0.02,0.001);

IF BULL AND B_COND  AND BVOL THEN BEGIN
 TSELLSHORT(1,0,LMT,C);
 TBUY(THOLDING=0,CW%,LMT,C),PERTRADER;
END

 

zg:=hhv(h,TENTERBARS+1);

IF (ZG-TAVGENTERPRICE)/TAVGENTERPRICE>=ZY*0.2 AND C<TAVGENTERPRICE THEN BEGIN
 TSELL(1,0,LMT,C);
END
if (zg-TAVGENTERPRICE)/TAVGENTERPRICE>=ZY*0.4 and (C-TAVGENTERPRICE)<=(zg-TAVGENTERPRICE)*0.5 then begin
   TSELL(1,0,LMT,C);  
END 
多单止损:=TSELL(TAVGENTERPRICE-c>c*ZS and THOLDING>0 ,0,LMT,C);

 

请问老师,后台代码这样表述正确吗??

 

目前遇到的问题:回测时,平仓信号与图表大部分不一致,偶尔也会一致,不知道是什么原因导致的。


 回到顶部
帅哥哟,离线,有人找我吗?
Ritter
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:139 积分:0 威望:0 精华:0 注册:2016/12/13 9:40:24
  发帖心情 Post By:2020/11/24 14:01:57    Post IP:121.232.26.103[只看该作者]

如图所示:出现提前平仓,后续多开仓的情况。



图片点击可在新窗口打开查看此主题相关图片如下:后台.png
图片点击可在新窗口打开查看

图片点击可在新窗口打开查看此主题相关图片如下:微信截图_20201124135840.png
图片点击可在新窗口打开查看
[此贴子已经被作者于2020/11/24 14:02:45编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
FireScript
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:14496 积分:0 威望:0 精华:0 注册:2017/7/4 13:40:18
  发帖心情 Post By:2020/11/24 14:23:02    Post IP:58.246.57.26[只看该作者]

 这个情况会非常多因素影响的。

1.代码转换是否符合一致的思路。这个一般是最起码要保证差不多一致的思路才行。

2.使用的数据量是否一致。

3.图表和后台交易机制本身就存在一定差异,很难做到完全一致。而且回测的机制也是同样有点差异。

就代码而已,不清楚你的思路是怎样的。但是上面这个TAVGENTERPRICE 这里你最好用TAVGENTERPRICEEX2替换下。按照持仓方向去取均价。还有持仓也是
THOLDING  换成
TBUYHOLDINGEX()
TSELLHOLDINGEX()
去分方向获取。


命数如织,当如磐石。
 回到顶部
帅哥哟,离线,有人找我吗?
Ritter
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:139 积分:0 威望:0 精华:0 注册:2016/12/13 9:40:24
  发帖心情 Post By:2020/11/24 14:49:21    Post IP:121.232.26.103[只看该作者]

1.思路完全一致,无更改,只修改了后台代码和交易指令;

 

2.数据量也是完全一致的;

 

3.两个回测机制略有差错可以理解,但是,后台回测下来,没有按照指令去实现平仓,开仓是符合逻辑的;

 

4.更改为TAVGENTERPRICEEX2(0),错误提示:所调用的参数与预定义参数不符。


 回到顶部
帅哥哟,离线,有人找我吗?
FireScript
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:14496 积分:0 威望:0 精华:0 注册:2017/7/4 13:40:18
  发帖心情 Post By:2020/11/24 14:54:31    Post IP:58.246.57.26[只看该作者]

 1.只更改后台代码和指令,不够的。但是这里没有你图表代码,我也不太好做对照。你最好帖下完整代码,我们看下。
2.你先看下函数说明啊,它需要三个参数的。
TAVGENTERPRICEEX2:
用法:TAVGENTERPRICEEX2(AC,STOCK,N)
AC为指定的帐户名,若为空表示取当前默认帐户
STOCK为指定的品种,若空表示当前品种
N为0表示取买持为1表示取卖持
该函数返回常数.


命数如织,当如磐石。
 回到顶部
帅哥哟,离线,有人找我吗?
Ritter
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:139 积分:0 威望:0 精华:0 注册:2016/12/13 9:40:24
  发帖心情 Post By:2020/11/24 15:22:37    Post IP:121.232.26.103[只看该作者]

 
BULL:=(C>DJX AND N1=1) OR (C>XJX AND N3=1);
BEAR:=(C<GJX AND N2=1) OR (C<SJX AND N4=1);

BVOL:=C>O AND VOL>VA1 AND VOL>VA2 AND VOL>VA3;
SVOL:=C<O AND VOL>VA1 AND VOL>VA2 AND VOL>VA3;

B_COND:=C>REF(YL,1) OR ( CROSS(C,A4) AND CD6 )  OR (CROSS(C,BF) AND CD2);

S_COND:=C<REF(ZC,1) OR ( CROSS(A3,C) AND CD8 )  OR (CROSS(BG,C) AND CD4);


zg:=hhv(h,enterbars+1);
CS:=LLV(L,ENTERBARS+1);

IF (ZG-AVGENTERPRICE)/AVGENTERPRICE>=ZY*0.2 AND C<AVGENTERPRICE THEN BEGIN
 SELL(1,0,limitr,c);
END
IF  (AVGENTERPRICE-CS)/CS>=ZY*0.2  AND  C>AVGENTERPRICE THEN BEGIN
 SELLSHORT(1,0,limitr,c);
END

if (zg-avgenterprice)/avgenterprice>=ZY*0.4 and (C-avgenterprice)<=(zg-avgenterprice)*0.5 then begin
   sell(1,0,limitr,c);  
END
 if (avgenterprice-CS)/CS>=ZY*0.4 and (avgenterprice-C)<=(avgenterprice-CS)*0.5 then begin 
   sellshort(1,0,limitr,c);       
End

if (zg-avgenterprice)/avgenterprice>=ZY*0.6 and (C-avgenterprice)<=(zg-avgenterprice)*0.6 then begin
   sell(1,0,limitr,c);  
END
 if (avgenterprice-CS)/CS>=ZY*0.6 and (avgenterprice-C)<=(avgenterprice-CS)*0.6 then begin 
   sellshort(1,0,limitr,c);     
End

if (zg-avgenterprice)/avgenterprice>=ZY*0.8 and (C-avgenterprice)<=(zg-avgenterprice)*0.7 then begin
   sell(1,0,limitr,c);  
END
 
if (avgenterprice-CS)/CS>=ZY*0.8 and (avgenterprice-C)<=(avgenterprice-CS)*0.7 then begin 
   sellshort(1,0,limitr,c);     
End

if (zg-avgenterprice)/avgenterprice>=ZY and (C-avgenterprice)<=(zg-avgenterprice)*0.8 then begin
   sell(1,0,limitr,c);  
END
 
if (avgenterprice-CS)/CS>=ZY and (avgenterprice-C)<=(avgenterprice-CS)*0.8 then begin 
   sellshort(1,0,limitr,c);    
End


多单止损:=sell(avgenterprice-c>c*ZS and holding>0 ,0,limitr,c);
空单止损:=sellshort(c-avgenterprice>c*ZS and holding<0 ,0 ,limitr,c);

IF BULL AND B_COND  AND BVOL THEN BEGIN
 SELLSHORT(1,0,limitr,c);
 BUY(HOLDING=0,CW%,limitr,c);
END

IF BEAR AND S_COND AND SVOL THEN BEGIN
 SELL(1,0,limitr,c);
 BUYSHORT(HOLDING=0,CW%,limitr,c);
END

 

开仓逻辑是正确的,问题出在平仓语句上;

 

麻烦老师帮忙把这段语句更改为后台语句,非常感谢!!


 


 回到顶部
帅哥哟,离线,有人找我吗?
FireScript
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:14496 积分:0 威望:0 精华:0 注册:2017/7/4 13:40:18
  发帖心情 Post By:2020/11/24 15:45:36    Post IP:58.246.57.26[只看该作者]

 BULL:=(C>DJX AND N1=1) OR (C>XJX AND N3=1);
BEAR:=(C<GJX AND N2=1) OR (C<SJX AND N4=1);

BVOL:=C>O AND VOL>VA1 AND VOL>VA2 AND VOL>VA3;
SVOL:=C<O AND VOL>VA1 AND VOL>VA2 AND VOL>VA3;

B_COND:=C>REF(YL,1) OR ( CROSS(C,A4) AND CD6 )  OR (CROSS(C,BF) AND CD2);

S_COND:=C<REF(ZC,1) OR ( CROSS(A3,C) AND CD8 )  OR (CROSS(BG,C) AND CD4);


zg:=hhv(h,tenterbars+2);//tenterbars从-1开始,必须+2.否则可能会取到所以K的最高价
CS:=LLV(L,tenterbars+2);

IF (ZG-TAVGENTERPRICEEX2('','',0))/TAVGENTERPRICEEX2('','',0)>=ZY*0.2 AND C<TAVGENTERPRICEEX2('','',0) THEN BEGIN
 tSELL(1,0,LMT,c);
END
IF  (TAVGENTERPRICEEX2('','',1)-CS)/CS>=ZY*0.2  AND  C>TAVGENTERPRICEEX2('','',1) THEN BEGIN
 tSELLSHORT(1,0,LMT,c);
END

if (zg-TAVGENTERPRICEEX2('','',0))/TAVGENTERPRICEEX2('','',0)>=ZY*0.4 and (C-TAVGENTERPRICEEX2('','',0))<=(zg-TAVGENTERPRICEEX2('','',0))*0.5 then begin
   tSELL(1,0,LMT,c);
END
 if (TAVGENTERPRICEEX2('','',1)-CS)/CS>=ZY*0.4 and (TAVGENTERPRICEEX2('','',1)-C)<=(TAVGENTERPRICEEX2('','',1)-CS)*0.5 then begin
   tSELLSHORT(1,0,LMT,c);       
End

if (zg-TAVGENTERPRICEEX2('','',0))/TAVGENTERPRICEEX2('','',0)>=ZY*0.6 and (C-TAVGENTERPRICEEX2('','',0))<=(zg-TAVGENTERPRICEEX2('','',0))*0.6 then begin
 tSELL(1,0,LMT,c);
END
 if (TAVGENTERPRICEEX2('','',1)-CS)/CS>=ZY*0.6 and (TAVGENTERPRICEEX2('','',1)-C)<=(TAVGENTERPRICEEX2('','',1)-CS)*0.6 then begin
tSELLSHORT(1,0,LMT,c);    
End

if (zg-TAVGENTERPRICEEX2('','',0))/TAVGENTERPRICEEX2('','',0)>=ZY*0.8 and (C-TAVGENTERPRICEEX2('','',0))<=(zg-TAVGENTERPRICEEX2('','',0))*0.7 then begin
 tSELL(1,0,LMT,c);
END
 
if (TAVGENTERPRICEEX2('','',1)-CS)/CS>=ZY*0.8 and (TAVGENTERPRICEEX2('','',1)-C)<=(TAVGENTERPRICEEX2('','',1)-CS)*0.7 then begin
tSELLSHORT(1,0,LMT,c);    
End

if (zg-TAVGENTERPRICEEX2('','',0))/TAVGENTERPRICEEX2('','',0)>=ZY and (C-TAVGENTERPRICEEX2('','',0))<=(zg-TAVGENTERPRICEEX2('','',0))*0.8 then begin
 tSELL(1,0,LMT,c);
END
 
if (TAVGENTERPRICEEX2('','',1)-CS)/CS>=ZY and (TAVGENTERPRICEEX2('','',1)-C)<=(TAVGENTERPRICEEX2('','',1)-CS)*0.8 then begin
tSELLSHORT(1,0,LMT,c);   
End


tSELL(TAVGENTERPRICEEX2('','',0)-c>c*ZS and TBUYHOLDINGEX('','',1)>0 ,0,LMT,c);//多单止损
tSELLSHORT(c-TAVGENTERPRICEEX2('','',1)>c*ZS and TSELLHOLDINGEX('','',1)>0 ,0 ,LMT,c);//空单止损

IF BULL AND B_COND  AND BVOL THEN BEGIN
tSELLSHORT(1,0,LMT,c);
tBUY(TBUYHOLDINGEX('','',1)=0,CW%,LMT,c),PERTRADER;
END

IF BEAR AND S_COND AND SVOL THEN BEGIN
tSELL(1,0,LMT,c);
tBUYSHORT(TSELLHOLDINGEX('','',1)=0,CW%,LMT,c),PERTRADER;
END

 
供参考。



命数如织,当如磐石。
 回到顶部