金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
12
返回列表 发新帖
楼主: 潘枝荣

止盈止损

[复制链接]

25

主题

132

帖子

132

积分

等级: 免费版

注册:
2025-8-7
曾用名:
 楼主| 发表于 2025-10-27 15:13 | 显示全部楼层
技术008 发表于 2025-10-27 15:08
把平仓语句放到开仓后面

你这个应该是先平仓了,后面有开仓

老师,应该不是这个问题。我顺序是对的

VARIABLE:买=0,卖=1;
BUYSIGNAL:=CON1 AND CON2 ;  //买入信号条件

//多单平仓条件

CON01:openprofit/MULTIPLIER>abs(holding)*3*mindiff;  //  止盈:突破方向盈利达到3个最小变动单位
CON02:openprofit/MULTIPLIER<-abs(holding)*2*mindiff; //  止损:突破方向方向波段达到2个最小变动单位
CON03:enterbars>15;  //强制平仓:持仓超过15分钟
回复

使用道具 举报

44

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
发表于 2025-10-27 15:16 | 显示全部楼层
buy(c>o and holding,1,marketr);

sell(enterbars>15,holding,marketr);

顺序对不可能的,你看这个例子就知道,平仓不会再当根的,这个平仓条件只有一个大于15
自己看下就能明白的
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

25

主题

132

帖子

132

积分

等级: 免费版

注册:
2025-8-7
曾用名:
 楼主| 发表于 2025-10-27 15:21 | 显示全部楼层
技术008 发表于 2025-10-27 15:16
buy(c>o and holding,1,marketr);

sell(enterbars>15,holding,marketr);

我检查了确实顺序没有错。麻烦老师帮忙检查一下代码
VARIABLE:买=0,卖=1;
BUYSIGNAL:=CON1 AND CON2 ;  //买入信号条件



IF BUYSIGNAL AND 买=0 AND 卖=1 THEN BEGIN
   DRAWTEXT(1,L,'买', COLORRED);
   买:=1;
   卖:=0;
   END
   

//买入信号所在K线相关指标定义
BO:= REF(OPEN,BARSLAST(BUYSIGNAL));// 买入信号的K线开盘价
BC:= REF(CLOSE,BARSLAST(BUYSIGNAL));// 买入信号的K线收盘价
BL:= REF(LOW,BARSLAST(BUYSIGNAL));// 买入信号的K线最低价
BV:REF(VOL,BARSLAST(BUYSIGNAL));   //最近一个买入信号所在K线的成交量
BKPH30: REF(PH30,BARSLAST(BUYSIGNAL));// 买入信号的K线PH30



//多单平仓条件

CON01:openprofit/MULTIPLIER>abs(holding)*3*mindiff;  //  止盈:突破方向盈利达到3个最小变动单位
CON02:openprofit/MULTIPLIER<-abs(holding)*2*mindiff; //  止损:突破方向方向波段达到2个最小变动单位
CON03:enterbars>15;  //强制平仓:持仓超过15分钟



SELLSIGNAL1:=CON01 ; //卖出信号条件
SELLSIGNAL2:=CON02 ; //卖出信号条件
SELLSIGNAL3:=CON03 ; //卖出信号条件



IF SELLSIGNAL1 AND 买=1 AND 卖=0 THEN BEGIN
   DRAWTEXT(1,L,'平1', COLORBLUE);
   买:=0;
   卖:=1;
   END
   
   IF SELLSIGNAL2 AND 买=1 AND 卖=0 THEN BEGIN
   DRAWTEXT(1,L,'平2', COLORBLUE);
   买:=0;
   卖:=1;
   END
      IF SELLSIGNAL3 AND 买=1 AND 卖=0 THEN BEGIN
   DRAWTEXT(1,L,'平3', COLORBLUE);
   买:=0;
   卖:=1;
   END
   
   
       //根据指定资金计算手数参考这段代码
input:zj(1000,1,1000000,1);
下单资金量:=zj;
MarginRatio:=TACCOUNT(41);//多头保证金比率. 这个要把合约信息设置里面的费率设置正确,否则函数取到的值可能是不对的。
bzj:=Close*Multiplier*MarginRatio;//一手保证金占用
ss1:=Intpart(下单资金量/(bzj));//根据资金ZJ计算的开仓手数

//最终结果
//ss1可能会有计算出为0 的情况,而恰好为手数参数为0在函数中是满仓开的含义。因此再次处理下,当ss1为0情况下默认按下一手处理。
ss:if(ss1>0,ss1,1);


IF BUYSIGNAL THEN
    BUY(HOLDING=0,15%,MARKET),PERTRADER;

IF  SELLSIGNAL1  OR SELLSIGNAL2 OR SELLSIGNAL3  THEN
   SELL(HOLDING>0,HOLDING,MARKET);
回复

使用道具 举报

44

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
发表于 2025-10-27 15:24 | 显示全部楼层
你这里条件用了or啊

or是或者的意思,你要强制大于15就应该是and同时满足


首先你要知道自己策略到底要什么or只要有一个条件满足就能平仓,你这里其他条件满足的,如果你要强制大于15
IF  SELLSIGNAL1  OR SELLSIGNAL2 OR SELLSIGNAL3  THEN
   SELL(HOLDING>0 and enterbars>15,HOLDING,MARKET);    就必须写成必须大于15而不是或者大于15的意思
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

25

主题

132

帖子

132

积分

等级: 免费版

注册:
2025-8-7
曾用名:
 楼主| 发表于 2025-10-27 15:27 | 显示全部楼层
技术008 发表于 2025-10-27 15:24
你这里条件用了or啊

or是或者的意思,你要强制大于15就应该是and同时满足

老师,我要的就是任意满足其一即可。3个条件,满足一个就行。条件3的15分钟是属于兜底的,就是条件1和2都没有触发的情况下,条件3是必须触发的。条件1和条件2不受15的约束,只要符合就平仓
回复

使用道具 举报

44

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
发表于 2025-10-27 15:28 | 显示全部楼层
电话我
021-20339087
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 微信登录

本版积分规则

手机版|小黑屋|上海金之塔信息技术有限公司 ( 沪ICP备13035422号 )

GMT+8, 2025-11-4 00:59 , Processed in 0.074940 second(s), 20 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表