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


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件公式模型编写问题提交 → 盈利加仓

   

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


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

主题:盈利加仓

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


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

 IF (DYNAINFO(7)-TAVGENTERPRICEEX2('','',0)/TAVGENTERPRICEEX2('','',0)>0.2 THEN  TBUY(1,1,MKT);

用 TAVGENTERPRICEEX2  直接取到多头的持仓均价。上面那个方式 如果你同时有多空单 会有些问题。




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


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

你上面这样一直无条件开仓,我估摸是没有判断当前有没有仓位吧。
 这种情况才让如此反复触发。你额外再加个仓位判断,如果有仓位 才加仓。

IF (DYNAINFO(7)-TAVGENTERPRICEEX2('','',0))/TAVGENTERPRICEEX2('','',0)>0.2 AND TBUYHOLDINGEX('','',1)>0 THEN  TBUY(1,1,MKT);

另外这里盈亏率和账户栏可能不一样,账户栏上是用保证金计算的盈亏率。上面是用持仓均价和市价来算的。


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


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

 这个盈亏率是按照保证金计算的吧。 按照持仓成本的话 盈利才2%。 如果是按照保证金来计算盈亏率的话,那还要改下。


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


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

 但是 你这里还有个条件么。kd1 and cd 这里还要2个条件啊。是不是这2个没满足。也要排除下这2个条件。
我明天盘中测试好 再贴你代码吧。  保证金和持成本的 都给你一个范例吧。 这会模拟账号木的持仓,没发校验代码。


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


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

 先以多头为例:

ccjj:TAVGENTERPRICEEX2('','',0);//多头持仓均价
MarginRatio:TACCOUNT(41);//多头保证金比率. 这个要把合约信息设置里面的费率设置正确,否则函数取到的值可能是不对的。
bzj:=ccjj*Multiplier*MarginRatio;//一手的保证金占用


ykl1:100*(DYNAINFO(  7)-ccjj)*Multiplier/ccjj;//按照持仓成本计算的盈亏率
ykl2:100*(DYNAINFO(  7)-ccjj)*Multiplier/bzj;//按照保证金计算的盈亏率

2种盈亏率的计算方式都在这里了。看你要用哪一个了。

计算结果验证了下是对的。

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

你现在就是把ykl1>=0.2 或者是 ykl2>=0.2 作为加仓的条件放到原先的语句里就行了。  另外这种加仓的语句最好放到开仓语句后面,否则你先计算了这个,等后面有了开仓,这个计算的结果是不会自动更新的。

这里仅仅是多头,空头其实也是类似做法,就是把ccjj:TAVGENTERPRICEEX2('','',0);//多头持仓均价 里面参数改下。

还有就是加仓之前 判断下是否有对应多头或者空头仓位。 你如果使用持仓成本的盈亏率计算时候,就算没有仓位ykl1:100*(DYNAINFO(  7)-ccjj)*Multiplier/ccjj;//按照持仓成本计算的盈亏率

这个公式依然会有计算结果,会导致你出现误判的。



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


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

 TBUY(TBUYHOLDINGEX(ZH1,'' ,1)<1,S1,LMT,CLOSE,1,ZH1,'');
这不和前面条件冲突了么。要求有持仓 持仓又要小于1.


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


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

 那就稍微麻烦些了。只能用全局变量做限制了。

GLOBALVARIABLE:ct1:=0,ct2:=0;//多空 用2个全局变量限制

if 多头加仓条件 and ct1<=1 then
begin
tbuy(1,1,mkt);
ct1:=ct1+1;   
end

if 空头加仓条件 and ct2<=1 then
begin
tbuyshort(1,1,mkt);
ct2:=ct2+1;   
end


if 平多条件 then ct1:=0;//平仓时候重置 全局变量
if 平空条件  then ct2:=0;


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


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

 重启的话这个全局变量就重置了啊。一切都从头来了。你要是希望重启程序这个加仓也依然只保持2次,这个是很难用代码控制了。有一个超全局变量可以在重启后还能记住上次的值。但是问题是实现起来比较繁琐。不同品种就要写不同的全局变量。 我先尝试下吧。



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


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

 //多空 用2个全局变量限制,因为要纪录之前的情况。所以用超全局变量。

ct1:=EXTGBDATA('CT1_'+STKLABEL);//和品种挂钩的 全局变量名称
ct2:=EXTGBDATA('CT2_'+STKLABEL);

if 多头加仓条件 and ct1<=1 then
begin
tbuy(1,1,mkt);
EXTGBDATASET('CT1_'+STKLABEL,ct1+1);  
end

if 空头加仓条件 and ct2<=1 then
begin
tbuyshort(1,1,mkt);
EXTGBDATASET('CT2_'+STKLABEL,ct1+1);    
end


if 平多条件 then EXTGBDATASET('CT1_'+STKLABEL,0); //平仓时候重置 超全局变量
if 平空条件  then EXTGBDATASET('CT2_'+STKLABEL,0);


存在的问题是,程序什么时候运行是未知的,之前保留的全局变量值可能影响到现在的加仓。比如你仓位是手工平的,而不是程序平的,那么这种情况下代码里重置全局变量的操作是没有执行的。所以可能有时候需要手工在 工具-数据管理-全局变量  这里重置全局变量。


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


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

 1.中间有手工清理过超全局变量吗?
 2.是否有多个开仓语句。是不是并非所有的开仓语句的逻辑都限制到了。
最好贴下代码我检查下。之前给的范例,单纯运行 我本地是测试过的。没啥问题的当时。


命数如织,当如磐石。
 回到顶部
总数 17 1 2 下一页