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


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件金字塔软件问题提交 → 请问如何动态加仓?

   

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


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

主题:请问如何动态加仓?

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


加好友 发短信
等级:新手上路 帖子:7 积分:0 威望:0 精华:0 注册:2018/10/18 9:33:57
请问如何动态加仓?  发帖心情 Post By:2018/12/25 0:40:35 [只看该作者]


ss:=1;          //手数

KD:=cross(c1,c2) ;          //开多条件
PD:=cross(c2,c1)  ;         //平多条件
KK:=cross(c2,c1) ;          //开空条件
PK:=cross(c1,c2)  ;         //平空条件

平空:SELLSHORT(PK,ss,THISCLOSE);                                 //平空信号
开多:BUY(KD AND HOLDING=0,ss,THISCLOSE);               //开多信号
平多:SELL(PD,ss,THISCLOSE);                                           //平多信号
开空:BUYSHORT(KK AND HOLDING=0,ss,THISCLOSE);     //开空信号

请问如何达到如下结果:
(1)当手数=1手时,盈利不加仓,亏损后加1次仓,每次加1手,最多加到3手,
        即底仓1手,亏1次加到2手,亏2次加到3手,亏3次以上都是3手,盈利后跑回底仓1手。

(2)当手数=2手时,盈利不加仓,亏损后加1次仓,每次加2手,最多加到6手,
        即底仓2手,亏1次加到4手,亏2次加到6手,亏3次以上都是6手,盈利后跑回底仓2手。

(3)当手数=3手时,盈利不加仓,亏损后加1次仓,每次加3手,最多加到9手,
        即底仓3手,亏1次加到6手,亏2次加到9手,亏3次以上都是9手,盈利后跑回底仓3手。

(4)当手数=4手时,盈利不加仓,亏损后加1次仓,每次加4手,最多加到12手,
        即底仓4手,亏1次加到8手,亏2次加到12手,亏3次以上都是12手,盈利后跑回底仓4手。

(5)当手数=5手时,盈利不加仓,亏损后加1次仓,每次加5手,最多加到15手,
        即底仓5手,亏1次加到10手,亏2次加到15手,亏3次以上都是15手,盈利后跑回底仓5手。

(6)(7)(8)……以此类推。




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


加好友 发短信
等级:管理员 帖子:26632 积分:0 威望:0 精华:7 注册:2015/4/9 14:59:07
  发帖心情 Post By:2018/12/25 9:32:09 [只看该作者]

参考下面代码实现方式。
variable:lossnum=0;// 全局变量,平仓时判断一下是盈利/亏损,若亏损lossnum就加1
VARIABLE:ss=1;//初始手数

ma5:=ma(close,5);
ma10:=ma(close,10);

cond1:=cross(ma5,ma10);
cond2:=cross(ma10,ma5);

if cond2 and holding>0 then

begin
  sell(1,HOLDING,MARKET);
  if c<enterprice then lossnum:=lossnum+1;
  if c>enterprice then lossnum:=0;
end
jcss:=SS*IF(lossnum=0,SS,if(lossnum<3,LOSSNUM,3));
if cond1  then  buy(1,jcss,MARKET);



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


加好友 发短信
等级:新手上路 帖子:7 积分:0 威望:0 精华:0 注册:2018/10/18 9:33:57
  发帖心情 Post By:2018/12/25 11:05:05 [只看该作者]

variable:lossnum=0;// 全局变量,平仓时判断一下是盈利/亏损,若亏损lossnum就加1
VARIABLE:ss=1;//初始手数


cond1:=KD;// 开多
cond2:=PD;// 平多
cond3:=KK;// 开空
cond4:=PK;// 平空

 

////////////////////多单交易

if cond2 and holding>0 then// 平多

begin
  sell(1,HOLDING,MARKET);// 平多
  if c<enterprice then lossnum:=lossnum+1;
  if c>enterprice then lossnum:=0;
end
jcss:=SS*IF(lossnum=0,SS,if(lossnum<3,LOSSNUM,3));
if cond1  then  buy(1,jcss,MARKET);// 开多

 

////////////////////空单交易

if cond4 and holding>0 then// 平空

begin
  SELLSHORT(1,HOLDING,MARKET);// 平空
  if c>enterprice then lossnum:=lossnum+1;
  if c<enterprice then lossnum:=0;
end
jcss:=SS*IF(lossnum=0,SS,if(lossnum<3,LOSSNUM,3));
if cond3  then  BUYSHORT(1,jcss,MARKET);// 开空

 

 

帮忙看看是那里不对呢?

 


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


加好友 发短信
等级:管理员 帖子:26632 积分:0 威望:0 精华:7 注册:2015/4/9 14:59:07
  发帖心情 Post By:2018/12/25 11:23:28 [只看该作者]

你多空盈亏是希望一起计算的?

你先理解下我给你的代码,如果修改后也应该是您直接说明什么地方不满足你的思想。



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


加好友 发短信
等级:新手上路 帖子:7 积分:0 威望:0 精华:0 注册:2018/10/18 9:33:57
  发帖心情 Post By:2018/12/25 12:31:22 [只看该作者]

开多条件,平多条件,开空条件,平空条件,都不一样的。

是多空一起计算盈亏次数,谢谢。


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


加好友 发短信
等级:管理员 帖子:26632 积分:0 威望:0 精华:7 注册:2015/4/9 14:59:07
  发帖心情 Post By:2018/12/25 13:17:56 [只看该作者]

怎么不对的,说清楚些。

上面的逻辑中,盈利后,手数会被重置为初始手数



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


加好友 发短信
等级:新手上路 帖子:7 积分:0 威望:0 精华:0 注册:2018/10/18 9:33:57
  发帖心情 Post By:2018/12/25 15:26:00 [只看该作者]

发不了图片,按以下写法,K线图上显示全部是做空的单子,麻烦看看那里写得不对,谢谢。

 


variable:lossnum=0;// 全局变量,平仓时判断一下是盈利/亏损,若亏损lossnum就加1
VARIABLE:ss=1;//初始手数
ma5:ma(c,5);
ma10:ma(c,10);
ma20:ma(c,20);
ma30:ma(c,30);
cond1:=cross(ma5,ma10);// 开多
cond2:=cross(ma10,ma5);// 平多
cond3:=cross(ma30,ma20);// 平空
cond4:=cross(ma20,ma30);// 开空
////////////////////////////////////////////////-----多
if cond2 and holding>0 then// 平多
begin
  sell(1,HOLDING,MARKET);// 平多
  if c<enterprice then lossnum:=lossnum+1;
  if c>enterprice then lossnum:=0;
end
jcss:=SS*IF(lossnum=0,SS,if(lossnum<3,LOSSNUM,3));
if cond1  then  buy(1,jcss,MARKET);// 开多
////////////////////////////////////////////////-----空
if cond3 and holding>0 then// 平空
begin
  SELLSHORT(1,HOLDING,MARKET);// 平空
  if c>enterprice then lossnum:=lossnum+1;
  if c<enterprice then lossnum:=0;
end
jcss:=SS*IF(lossnum=0,SS,if(lossnum<3,LOSSNUM,3));
if cond4  then  BUYSHORT(1,jcss,MARKET);// 开空
/////////////////-----以下空白


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


加好友 发短信
等级:超级版主 帖子:21598 积分:0 威望:0 精华:1 注册:2010/7/31 16:35:30
  发帖心情 Post By:2018/12/25 16:35:28 [只看该作者]

有开多信号的,用这种方式看下当条件满足时候,图表不支持锁仓,如果有空仓情况下是不能开多的,全部按照反手来处理

cc:cond1;

if cond1  then 

begin

sellshort(1,holding,marketr);

buy(1,jcss,MARKET);// 开多

end


 回到顶部