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


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件公式模型编写问题提交 → 能否不用ignorecheckprice函数实现ignorecheckprice的功能

   

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


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

主题:能否不用ignorecheckprice函数实现ignorecheckprice的功能

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


加好友 发短信
等级:超级版主 帖子:14496 积分:0 威望:0 精华:0 注册:2017/7/4 13:40:18
  发帖心情 Post By:2021/4/20 9:38:12    Post IP:58.246.57.26[显示全部帖子]

你是用全局变量纪录满足开仓条件位置的价格,然后再后面价格满足时候发信号?

你这里这样纪录
IF HOLDING=0 and ENTRYLONGCOND THEN BEGIN //若持仓为0
  mKKPD:=0;
  mKDPK:=1;  
  mKDL:=KDL;  
END

应该是有点问题的吧。

你应该在首次满足这个条件的时候纪录。否则其实后面
mKDL:=KDL; 

会一直执行的。


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


加好友 发短信
等级:超级版主 帖子:14496 积分:0 威望:0 精华:0 注册:2017/7/4 13:40:18
  发帖心情 Post By:2021/4/20 10:21:54    Post IP:58.246.57.26[显示全部帖子]

 完整代码贴下。我好本地测试。你前面给的有部分变量 没给定义。AVGLENGTH没看到定义。


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


加好友 发短信
等级:超级版主 帖子:14496 积分:0 威望:0 精华:0 注册:2017/7/4 13:40:18
  发帖心情 Post By:2021/4/20 14:53:28    Post IP:58.246.57.26[显示全部帖子]

 1.我只修正了一个地方。就是纪录开仓价格地方,需要在首次满足的地方纪录。

2.你有个笔误,导致平仓价格没纪录到。


手数:=1;
VARIABLE:KPJ:=0,mKDPK:=0,mKKPD:=0,mKDL:=0,mPDL:=0,mHolding:=0;

MA1:=REF(MA((HIGH+LOW+CLOSE)/3,40),1);//定义MA1
UPPERBAND:=MA1+REF(MA(TR,40),1);//上轨
LOWERBAND:=MA1-REF(MA(TR,40),1);//下轨
ENTRYLONGCOND:=MA1>REF(MA1,1) ;//开多条件
EXITLONGCOND:=HIGH>=MA1;//平空条件
//交易系统
KDL:=MAX(OPEN,UPPERBAND),COLORMAGENTA;
KKL:=MIN(OPEN,LOWERBAND)-1*MINDIFF,COLORCYAN;
PKL:=MIN(OPEN,MA1)+1*MINDIFF,COLORGREEN;
PDL:=MAX(OPEN,MA1)-1*MINDIFF,COLORRED;


cd1:HOLDING=0 and ENTRYLONGCOND;
IF cd1 and not(ref(cd1,1)) THEN BEGIN //若持仓为0
  mKKPD:=0;
  mKDPK:=1;  
  mKDL:=KDL;  
END
cd2:HOLDING>0 and EXITLONGCOND;
IF  cd2 and not(ref(cd2,1)) THEN BEGIN//若持有空单
mKKPD:=1;
mKDPK:=0;  
mPDL:=PDL;   
END


IF HOLDING=0 and mKDPK=1 and between(mKDL,L,H) THEN BEGIN //若持仓为0
  BUY(1,手数,LIMIT,mKDL);//开多单  KPJ:=MAX(OPEN,UPPERBAND);
  mHolding:=1;      
END
IF HOLDING>0 and mKKPD=1 and between(mPDL,L,H) THEN BEGIN//若持有空单
  SELL(1,HOLDING,LIMIT,mPDL);//平空单
  mHolding:=0;    
END



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


加好友 发短信
等级:超级版主 帖子:14496 积分:0 威望:0 精华:0 注册:2017/7/4 13:40:18
  发帖心情 Post By:2021/4/20 15:39:32    Post IP:58.246.57.26[显示全部帖子]

这个结果肯定会不一样的。ignorcheckprice 是忽略价格检查。也就是说系统默认是有价格检查的。价格不在当前K范围内是发不出信号,开不了仓的。

你现在这个做法 是将开仓位置完全移动到价格满足的位置上去了,从原本应该出信号的位置 到最后实际出信号的位置,这中间一段行情 在你现在模型里面是被完全忽略掉的。如果按照之前做法用ignorcheckprice 那么这段行情是该干嘛干嘛。


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


加好友 发短信
等级:超级版主 帖子:14496 积分:0 威望:0 精华:0 注册:2017/7/4 13:40:18
  发帖心情 Post By:2021/4/20 16:13:49    Post IP:58.246.57.26[显示全部帖子]

 是会成交的。 不是不能成交。加了之后正常出信号 正常成交。


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


加好友 发短信
等级:超级版主 帖子:14496 积分:0 威望:0 精华:0 注册:2017/7/4 13:40:18
  发帖心情 Post By:2021/4/20 16:41:06    Post IP:58.246.57.26[显示全部帖子]

回测里的成交价,就是你限价的那个价格。这个IGNORECHECKPRICE也只有在你用限价时候才会出现。

而且实际交易中,你受到的价格限制就只是涨跌停,你想按照什么价格下单,跟你当前K什么价格范围一点关系都没有。最多就是不成交或者成交慢而已。
所以你价格不在当前K范围的情况, 在回测中 只是无法体现出成交延迟的情况。其他处理都是符合实际情况的。1.是正常发单 2.按照委托价成交。


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


加好友 发短信
等级:超级版主 帖子:14496 积分:0 威望:0 精华:0 注册:2017/7/4 13:40:18
  发帖心情 Post By:2021/4/21 9:03:41    Post IP:58.246.57.26[显示全部帖子]

 1.“而且实际交易中,你受到的价格限制就只是涨跌停,你想按照什么价格下单,跟你当前K什么价格范围一点关系都没有。最多就是不成交或者成交慢而已。”  我这里说的是实际交易实际下单时候的情况。并不是说你回测时候情况的。
回测里的成交是不存在挂单一说的。  我当时说这个只是想阐述使用IGNORECHECKPRICE函数这个的合理性。

2.这种机制没办法完全描述的,而且这个函数真就一句话解释,没什么复杂的逻辑在里面的。系统默认下单价格不能超过当前K范围(开多不能低于最低价,开空不能高于最高价),用了这个函数,则取消这个默认限制,直接按照委托价成交。


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