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


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件公式模型编写问题提交 → 为什么这样不对,总是1

   

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


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

主题:为什么这样不对,总是1

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


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

 你应该这样做:
在平仓的地方做判断,平仓后判断上笔盈亏。然后对全局变量做操作即可。
IF pd THEN  
begin
SELL(1,ss,MARKET);
if NUMPROFIT(1)<0 then ss:=ss+1;
end


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


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

NUMSEQLOSS 表示的是从历史到现在的连亏次数。 你亏10次 可能算一次连亏也可能是2次 都有可能。所以你上面那个代码
if NUMSEQLOSS=1 then ss:=1;
if NUMSEQLOSS=2 then ss:=2;
if NUMSEQLOSS=3 then ss:=4;
if NUMSEQLOSS=4 then ss:=8;
if NUMSEQLOSS>=4 then ss:=16;
是不对的。你不能用这个函数,也不能用这样的逻辑处理。


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


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

http://www.weistock.com/bbs/dispbbs.asp?BoardID=4&ID=67366&skin=0

看这里的五楼吧。


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


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

 你的平仓要改成全平

sellshort(1,holding,MARKET);
sell(1,holding,MARKET);

否则 平仓盈亏那个函数无法统计的。它是按照全平处理的。


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


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

 因为你条件是一直在满足,一直在加仓的。。

KD:ma5>ma10;
PD:ma5<ma10;
kk:pd;
pk:kd;

你这几个条件满足了就是连续多个周期都会满足的。你累积到平仓时候,当然手数很多啦。


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


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

不是的。开仓不是开那么多的。是因为你原先开仓条件没有限制holding=0 导致后面一直加仓。那个很大的手数是累积下来的。

我做了些修改你看下试试:

VARIABLE:n:=0;
VARIABLE:ss:=1;


ma5:ma(c,5);
ma10:ma(c,10);
KD:ma5>ma10;
PD:ma5<ma10;
kk:pd;
pk:kd;

if pd and holding>0 THEN
BEGIN
sell(1,holding,MARKET);
if NUMPROFIT(1)>0 then n:=1;
if NUMPROFIT(1)<0 then n:=n+1;
end

if pk and holding<0 THEN
BEGIN
sellshort(1,holding,MARKET);
if NUMPROFIT(1)>0 then n:=1;
if NUMPROFIT(1)<0 then n:=n+1;
end

if n=1 then ss:=1;
if n=2 then ss:=2;
if n=3 then ss:=4;
if n=4 then ss:=8;
if n>=5 then ss:=16;

IF KD and holding=0 THEN BUY(1,ss,MARKET);
IF kk and holding=0 THEN BUYSHORT(1,ss,MARKET);




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


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

 我本地正常啊。我把持仓绝对值直接输出出来了。
红色线就是:

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

数值变化就是1,2,4,8,16


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