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


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件公式模型编写问题提交 → [原创]请求老师,编写问题

   

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


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

主题:[原创]请求老师,编写问题

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


加好友 发短信
等级:管理员 帖子:26632 积分:0 威望:0 精华:7 注册:2015/4/9 14:59:07
  发帖心情 Post By:2018/10/25 16:59:34    Post IP:180.169.30.6[显示全部帖子]

图表还是后台。你Q3和前两个矛盾。



编程无捷径,技巧靠积累。
 回到顶部
帅哥哟,离线,有人找我吗?
wenarm
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:26632 积分:0 威望:0 精华:7 注册:2015/4/9 14:59:07
  发帖心情 Post By:2018/10/26 1:24:06    Post IP:180.159.145.220[显示全部帖子]

初始利润:VALUEWHEN(time=CLOSETIME(0),NETPROFIT);
日净利润:NETPROFIT-初始利润;
IF ABS(NETPROFIT-初始利润)>100000 THEN EXIT;
手数:1+if(NETPROFIT<=0,0,INTPART((ASSET-300000)/100000));
if 开仓条件 then BEGIN
 buy(1,手数,MARKET);
  
end
if 平仓条件 then BEGIN
 sell(1,HOLDING,MARKET);
end


编程无捷径,技巧靠积累。
 回到顶部
帅哥哟,离线,有人找我吗?
wenarm
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:26632 积分:0 威望:0 精华:7 注册:2015/4/9 14:59:07
  发帖心情 Post By:2018/10/29 16:41:08    Post IP:180.169.30.6[显示全部帖子]

上面的算法没有区分考虑多空的情况,其手数就是按当前资产减去初始资产三十万计算的。

你说的最多两手多头,你可以在图表中看下当前资产应该是没有过50万。所以手数才是2手。



编程无捷径,技巧靠积累。
 回到顶部
帅哥哟,离线,有人找我吗?
wenarm
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:26632 积分:0 威望:0 精华:7 注册:2015/4/9 14:59:07
  发帖心情 Post By:2018/10/30 13:21:24    Post IP:180.169.30.6[显示全部帖子]

 

//代码的整体逻辑上没什么问题。

//可能我理解上有偏差,你对着下面代码的注释和处理的逻辑,自己尝试完善和对比,或者能明确指出差别。

//注:下面代码是对仓位进行峰值限制。最大5手
//记录每天盘后时的最后利润

初始利润:VALUEWHEN(time=CLOSETIME(0),NETPROFIT);

//今天实际产生的净利润,(现在-上一交易日的利润)
日净利润:NETPROFIT-初始利润;

MA1:=MA(CLOSE,5);
MA2:=MA(CLOSE,10);
开多平空条件:=CROSS(MA1,MA2);//开多平空条件
开空平多条件:=CROSS(MA2,MA1);//开空平多条件

 

//当天利润绝对值超出1000元,停止交易。
IF ABS(NETPROFIT-初始利润)>1000 THEN EXIT;

//初始手数为1手,资产每增加1000块,增加初始资金手数。最大到5手。
手数:1+if(INTPART((ASSET-300000)/1000)<4,INTPART((ASSET-300000)/1000),4);
if 开多平空条件 then BEGIN
 SELLSHORT(HOLDING<0,HOLDING,MARKET);
 buy(HOLDING=0,手数,MARKET);
end

if 开空平多条件 then BEGIN
 sell(HOLDING>0,HOLDING,MARKET);
 buyshort(HOLDING=0,手数,MARKET);
 
end

[此贴子已经被作者于2018/10/30 13:39:24编辑过]


编程无捷径,技巧靠积累。
 回到顶部
帅哥哟,离线,有人找我吗?
wenarm
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:26632 积分:0 威望:0 精华:7 注册:2015/4/9 14:59:07
  发帖心情 Post By:2018/10/30 14:18:01    Post IP:180.169.30.6[显示全部帖子]

NETPROFIT净利润函数只有平仓后才会发生变化。

红色部分的代码,是NETPROFIT绝对值大于1000时,就直接停止运行。代码整体逻辑中,平仓方式是全平的。

不会造成停止交易时,还有持仓的情况。

 

如果仓位不是全平的情况下,你的整体需求逻辑就没法表述,虽然可以在NETPROFIT绝对值大于1000时满足时,将剩余仓位全平,然后停止。

但是此时的净利润由于平仓又发生变化。那么值钱满足的停止条件就不一定子再满足了。逻辑上就存在漏洞。

 



编程无捷径,技巧靠积累。
 回到顶部
帅哥哟,离线,有人找我吗?
wenarm
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:26632 积分:0 威望:0 精华:7 注册:2015/4/9 14:59:07
  发帖心情 Post By:2018/10/30 15:15:15    Post IP:180.169.30.6[显示全部帖子]

这句代码中把你盈亏和亏损都合并了,亏损大于1000是负数,我用了abs绝对值。除非你盈亏和和亏损的限制不同,才要分开写,并且应该是:

IF ABS(NETPROFIT-初始利润)>1000 THEN EXIT;或者IF (NETPROFIT-初始利润)<-1000 THEN EXIT;

 

编译报错都是语法类错误,你根据报错信息查一下,不同位置只会造成逻辑结果不同,不会造成语法限制错误

 

是的。

 

 

 

[此贴子已经被作者于2018/10/30 15:22:50编辑过]


编程无捷径,技巧靠积累。
 回到顶部
帅哥哟,离线,有人找我吗?
wenarm
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:26632 积分:0 威望:0 精华:7 注册:2015/4/9 14:59:07
  发帖心情 Post By:2018/10/30 20:38:34    Post IP:116.237.20.83[显示全部帖子]

你所说的盈利,指的是平仓盈亏还是浮动盈亏?
我给你的代码都是按平仓后的利润算的,不含浮动盈亏

[此贴子已经被作者于2018/10/30 20:46:43编辑过]


编程无捷径,技巧靠积累。
 回到顶部
帅哥哟,离线,有人找我吗?
wenarm
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:26632 积分:0 威望:0 精华:7 注册:2015/4/9 14:59:07
  发帖心情 Post By:2018/10/30 21:08:46    Post IP:116.237.20.83[显示全部帖子]

Q1:当盈利达到 >=15000时,资金回撤至 10000, 平仓。 //此参数,可以根据实际情况,进行修改更新

Q2:当盈利达到 >= 30000时,资金回撤至 20000,平仓。//此参数,可以根据实际情况,进行修改更新

这个盈利指的是浮动盈亏?什么叫做资金回撤至10000


编程无捷径,技巧靠积累。
 回到顶部
帅哥哟,离线,有人找我吗?
wenarm
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:26632 积分:0 威望:0 精华:7 注册:2015/4/9 14:59:07
  发帖心情 Post By:2018/10/30 21:58:51    Post IP:116.237.20.83[显示全部帖子]

你这个要的就是移动止损呗。你可以直接参考系统自带的移动止损模块的逻辑进行处理。


编程无捷径,技巧靠积累。
 回到顶部
帅哥哟,离线,有人找我吗?
wenarm
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:26632 积分:0 威望:0 精华:7 注册:2015/4/9 14:59:07
  发帖心情 Post By:2018/10/30 22:53:32    Post IP:116.237.20.83[显示全部帖子]

if (TYPE(1)=1 OR TYPE(1)=3) AND hhv(OPENPROFIT,ENTERBARS+2)>=15000 and   hhv(OPENPROFIT,ENTERBARS+2)<30000  and OPENPROFIT<=10000 then BEGIN
sell();//第1阶段移动止损。 
end
if (TYPE(1)=1 OR TYPE(1)=3) AND hhv(OPENPROFIT,ENTERBARS+2)>=30000 and   OPENPROFIT>10000  and OPENPROFIT<=20000 then BEGIN
sell();//第2阶段移动止损。 
end

你自己吧定值,15000,30000等定义成变量放在参数列表中就行。


编程无捷径,技巧靠积累。
 回到顶部
总数 18 1 2 下一页