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


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件公式模型编写问题提交 → 我有只亏了不卖,赚钱了才卖,只开仓

   

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


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

主题:我有只亏了不卖,赚钱了才卖,只开仓

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


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

 能实现,只需要判断当前盈亏然后在开平仓条件里面使用这个条件就行了。


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


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

 具体是需要在代码中实现的。
比如这样:

if OPENPROFIT>0 and holding>0 and 平仓条件 then sell(1,holding,market);
if OPENPROFIT<0 and 开仓条件 then buy(1,1,market);

具体开平仓条件都需要你自己去定义的。总之就是你得把盈亏判断放到你开平仓条件里面就行了。
[此贴子已经被作者于2019/1/18 14:54:10编辑过]


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


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

 工作人员处理中,请耐心等待。


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


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

 我看了你得代码。6楼给的已经符合你的需求了。
最后一部分代码,只要修改成下面这样就行了。
if Win_Buy and holding>0 and OPENPROFIT>0 then 多止盈:Sell(enterbars>0,0,market);
if Win_Sell and holding<0 and OPENPROFIT>0 then 空止盈:Sellshort(enterbars>0,0,market);
if Lose_Buy and holding>0 and OPENPROFIT>0 then 多止损:Sell(enterbars>0,0,market);
if Lose_Sell and holding<0 and OPENPROFIT>0 then 空止损:Sellshort(enterbars>0,0,market);


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


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

 Win_Buy:=h-enterprice>=200;//多头盈利2点
Win_Sell:=enterprice-l>=200;//空头盈利2点
Lose_Buy:=enterprice-l>=10000;//多头亏损1.25点
Lose_Sell:=h-enterprice>=10000;//空头亏损1.25点

另外我想问下上面这部分代码,你这个点数设置的这么大,几乎很难触发,不是很清楚这段代码是否符合你注释中的描述。


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


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

你是要持仓如果是亏损情况下,不平仓,如果达到了反向仓的开仓条件还要反向开仓?如果是这样那不行,图表上不能锁仓的。开多前必须平空,开空前必须平多。


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


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

 提供以下后台程序范例供参考,代码思路以及在注释中说明了,关于后台程序化的使用建议参考使用教程了解下http://www.weistock.com/WeisoftHelp/kaishihoutaichengshihuajiaoyi.htm:

INPUT : A(5,1,30,3) ;
INPUT : B(15,5,100,10);
INPUT : SS(1,1,10000,1) ;
//中间变量
MA1:MA(CLOSE,A);
MA2:MA(CLOSE,B);
手数:=ss;
//交易条件
开多平空条件:=CROSS(MA1,MA2);//开多平空条件
开空平多条件:=CROSS(MA2,MA1);//开空平多条件


num1:=TBUYHOLDINGEX('', '',1);//取得今日多头持仓数量
num2:=TSELLHOLDINGEX('','',1);//取得今日空头持仓数量

cc1:(DYNAINFO2(7 ,STKLABEL)-TaVGENTERPRICEEX2('' ,'',0));//单个品种多头持仓盈亏点数
cc2:(TaVGENTERPRICEEX2('' ,'',1)-DYNAINFO2(7 ,STKLABEL));//单个品种空头持仓盈亏点数


//交易系统
if 开多平空条件  then  begin
tsellshort(num2>0 and cc2>0 ,num2,MKT);//如果当前空头有持仓且盈利则平仓,反之不平仓继续持有
tbuy(1,ss,MKT);
end

if 开空平多条件 then begin
tsell(num1>0 and cc1>0 ,num1,MKT);//如果当前多头有持仓且盈利则平仓,反正不平仓继续持有
tbuyshort(1,ss,MKT);
end
 
 




[此贴子已经被作者于2019/1/23 10:50:44编辑过]


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


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

 以上代码里面你的平仓条件需要满足2点:1.赚钱了 2.满足 开多平空条件开空平多条件  从账户上能看到盈亏情况,但是还需要明确你这个品种当前是否满足了 开多平空条件开空平多条件  只有这种情况下才会平仓的。

这样吧。给你加个调试语句吧。这样也方便看下是否满足过平仓条件。之后你在 D:\record.txt文件里面看下记录
记录的效果类似这样的:

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

num1:=TBUYHOLDINGEX('', '',1);//取得今日多头持仓数量
num2:=TSELLHOLDINGEX('','',1);//取得今日空头持仓数量

cc1:if(num1>0,(DYNAINFO2(7 ,STKLABEL)-TaVGENTERPRICEEX2('' ,'',0)),0);//单个品种多头持仓盈亏点数
cc2:if(num2>0,TaVGENTERPRICEEX2('' ,'',1)-DYNAINFO2(7 ,STKLABEL),0);//单个品种空头持仓盈亏点数

DEBUGFILE('D:\record.txt',STKLABEL+'|| 平空条件 || %.2f',开多平空条件 and num2>0 and cc2>0);
DEBUGFILE('D:\record.txt',STKLABEL+'|| 平多条件 || %.2f',开空平多条件 and num1>0 and cc1>0)


//交易系统
if 开多平空条件  then  begin
tsellshort(num2>0 and cc2>10 ,num2,MKT);//如果当前空头有持仓且盈利则平仓,反之不平仓继续持有
tbuy(1,ss,MKT);
end

if 开空平多条件 then begin
tsell(num1>0 and cc1>10 ,num1,MKT);//如果当前多头有持仓且盈利则平仓,反正不平仓继续持有
tbuyshort(1,ss,MKT);
end


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


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

 我给你的范例是根据你之前的这个需求编写的:
1、多单情况
多单亏了不卖,必须出空信号,等空信号平仓后再买多。
多单赚了,就跟着信号交易,平多买空。

2、空单情况
空单亏了不卖,必须出多信号,等多信号平仓后再买空。
空单赚了,就跟着信号交易,平空买多。
那我现在再和你核对下这个处理思路,所以需要明确:
1.开仓之后,没有盈利不平仓,但是如果再次触发开仓条件是否加仓?
2.以多头情况举例。如果当前持仓多头,因为不盈利不能平仓的情况下,如果触发开空条件,是否开空,还是说等到多头平掉之后再开空?
3.如果多头开仓后盈利了,但是没有开空的反向信号,这时候是平还是不平?

上面3点请详细理清之后和我说明下。

我给你的范例策略都是我本地运行过的:

图片点击可在新窗口打开查看此主题相关图片如下:temp.png
图片点击可在新窗口打开查看
条件满足时候是可以平仓的,并非只加仓,不开仓。但我只能说按照你之前的需求你本身平仓条件就比较苛刻,一直要等到盈利且是反向信号的是会才平仓。


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


加好友 发短信
等级:超级版主 帖子:14496 积分:0 威望:0 精华:0 注册:2017/7/4 13:40:18
  发帖心情 Post By:2019/1/28 10:55:34    Post IP:180.169.30.6[显示全部帖子]

 INPUT : A(5,1,30,3) ;
INPUT : B(15,5,100,10);
INPUT : SS(1,1,10000,1) ;
INPUT:N(5,1,100,1),M(10,1,100,1);
//中间变量
MA1:MA(CLOSE,A);
MA2:MA(CLOSE,B);
手数:=ss;
//交易条件
开多平空条件:=CROSS(MA1,MA2);//开多平空条件
开空平多条件:=CROSS(MA2,MA1);//开空平多条件


num1:=TBUYHOLDINGEX('', '',1);//取得今日多头持仓数量
num2:=TSELLHOLDINGEX('','',1);//取得今日空头持仓数量

cc1:if(num1>0,(DYNAINFO2(7 ,STKLABEL)-TaVGENTERPRICEEX2('' ,'',0)),0);//单个品种多头持仓盈亏点数
cc2:if(num2>0,TaVGENTERPRICEEX2('' ,'',1)-DYNAINFO2(7 ,STKLABEL),0);//单个品种空头持仓盈亏点数

//交易系统
if 开多平空条件  then  begin
tsellshort(num2>0 and cc2>0 ,num2,MKT);//如果当前空头有持仓且盈利则平仓,反之不平仓继续持有
tbuy(num1<=N,ss,MKT);//限制加仓次数为N
end

if 开空平多条件 then begin
tsell(num1>0 and cc1>0 ,num1,MKT);//如果当前多头有持仓且盈利则平仓,反正不平仓继续持有
tbuyshort(num2<=N,ss,MKT);//限制了加仓次数
end
 
 
if cc1>=M*MINDIFF then tsell(num1>0,num1,MKT);//盈利达到M个点直接平仓
if cc2>=M*MINDIFF then tbuyshort(num2>=0,num2,MKT);//盈利达到M个点直接平仓


红色标识部分我修改之后的。


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