金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
楼主: 潘枝荣

老师,如何在某个K线标注了"买"字后,根据条件在后续的K线中标注出“卖”字

[复制链接]

16

主题

91

帖子

91

积分

等级: 免费版

注册:
2025-8-7
曾用名:
 楼主| 发表于 2025-8-25 13:19 | 显示全部楼层
技术010 发表于 2025-8-25 13:02
BUYSIGNAL:=CON100 AND CON101 AND CON102 AND CON103 AND CON104 AND CON105 AND CON106 AND CON107 AND C ...

谢谢老师!继续请问一下,我要实现只有出现买入信号后,才标注卖出信号;而且买和卖是一对一的组合关系。即出现一个买,后面只能出现一个卖;当下一次出现买后才能出现卖。这个麻烦帮忙写一下。

下面是卖的代码

  begin
            DRAWTEXT( CON1 OR CON2 OR CON3 OR CON4 OR CON5 OR CON6  OR CON8 OR CON9 OR CON10 OR CON11 OR CON12  OR CON13 OR CON14 OR CON15  OR CON16 OR CON17 OR CON18 OR CON19 OR CON20 OR CON21 OR CON22 OR CON23, LowPrice, '卖', COLORBLUE); // 在当前K线的低价位置标注“卖”
        end;
回复

使用道具 举报

0

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
gxx978
发表于 2025-8-25 13:45 | 显示全部楼层
参考如下代码结构呢:
VARIABLE:买=0,卖=1;

BUYSIGNAL:=CON100 AND CON101 AND CON102 AND CON103 AND CON104 AND CON105 AND CON106 AND CON107 AND CON108 AND CON109 AND CON110 AND CON111;  //买入信号条件
SELLSIGNAL:=CON1 OR CON2 OR CON3 OR CON4 OR CON5 OR CON6  OR CON8 OR CON9 OR CON10 OR CON11 OR CON12  OR CON13 OR CON14 OR CON15  OR CON16 OR CON17 OR CON18 OR CON19 OR CON20 OR CON21 OR CON22 OR CON23;  //卖出信号条件

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

IF SELLSIGNAL AND 买=1 AND 卖=0 THEN BEGIN
   DRAWTEXT(1,L,'卖');
   买:=0;
   卖:=1;
   END
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

16

主题

91

帖子

91

积分

等级: 免费版

注册:
2025-8-7
曾用名:
 楼主| 发表于 2025-9-2 09:02 | 显示全部楼层
技术010 发表于 2025-8-25 13:45
参考如下代码结构呢:
VARIABLE:买=0,卖=1;

老师,这个代码改成空单的一对一组合关系,怎么改?我改成下面的运行后不生效,麻烦老师帮忙看看,谢谢老师

VARIABLE:卖=0,买=0;

SELLSIGNAL:=CON100 AND CON101 AND CON102 AND CON103  ;  //卖出信号条件
BUYSIGNAL1:=CON1 ; //买平信号条件
BUYSIGNAL2:=CON2 ; //买平信号条件


// 1. 空仓 → 开空
IF SELLSIGNAL AND 买=0 AND 卖=0 THEN BEGIN
   DRAWTEXT(1,L,'卖', COLORRED);
   卖:=1;
   买:=0;
END

// 2. 空头 → 平空开多
IF BUYSIGNAL1 AND 卖=1 AND 买=0 THEN BEGIN
   DRAWTEXT(1,L,'平1', COLORBLUE);
   卖:=0;
   买:=0;
END


   IF BUYSIGNAL2 AND 卖=1 AND 买=0 THEN BEGIN
   DRAWTEXT(1,L,'平2', COLORBLUE);
   卖:=0;
   买:=0;
   END
回复

使用道具 举报

0

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
gxx978
发表于 2025-9-2 10:56 | 显示全部楼层
你自己没有理清全局变量的逻辑,初始状态时卖开为0,买平为1。开空后,卖开置为1,买平置为0。平空后,卖开置为0,平买置为1,这样交替来控制一对一的关系。参考如下:
VARIABLE:卖=0,买=1;

SELLSIGNAL:=CON100 AND CON101 AND CON102 AND CON103  ;  //卖出信号条件
BUYSIGNAL1:=CON1 ; //买平信号条件
BUYSIGNAL2:=CON2 ; //买平信号条件


// 1. 空仓 → 开空
IF SELLSIGNAL AND 卖=0 AND 买=1 THEN BEGIN
   DRAWTEXT(1,L,'卖', COLORRED);
   卖:=1;
   买:=0;
END

// 2. 空头 → 平空开多
IF BUYSIGNAL1 AND 卖=1 AND 买=0 THEN BEGIN
   DRAWTEXT(1,L,'平1', COLORBLUE);
   卖:=0;
   买:=1;
END


   IF BUYSIGNAL2 AND 卖=1 AND 买=0 THEN BEGIN
   DRAWTEXT(1,L,'平2', COLORBLUE);
   卖:=0;
   买:=1;
   END
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

16

主题

91

帖子

91

积分

等级: 免费版

注册:
2025-8-7
曾用名:
 楼主| 发表于 2025-9-2 11:05 | 显示全部楼层
技术010 发表于 2025-9-2 10:56
你自己没有理清全局变量的逻辑,初始状态时卖开为0,买平为1。开空后,卖开置为1,买平置为0。平空后,卖开 ...

谢谢老师
回复

使用道具 举报

16

主题

91

帖子

91

积分

等级: 免费版

注册:
2025-8-7
曾用名:
 楼主| 发表于 2025-9-2 11:07 | 显示全部楼层
HP7 := HHV(HIGH, 7);  
HPV := REF(VOL,BARSLAST(HP7));   //过去7日最高价所在K线的成交量

老师,过去7日最高价所在K线的成交量的写法,对吗?我运行后没有生效,麻烦老师帮忙看看
回复

使用道具 举报

0

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
gxx978
发表于 2025-9-2 11:10 | 显示全部楼层
写法不对,参考如下:
HP7 :HHVbars(HIGH,7);  
HPV :REF(VOL,HP7);   //过去7日最高价所在K线的成交量
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

16

主题

91

帖子

91

积分

等级: 免费版

注册:
2025-8-7
曾用名:
 楼主| 发表于 2025-9-2 15:32 | 显示全部楼层
技术010 发表于 2025-9-2 11:10
写法不对,参考如下:
HP7 :HHVbars(HIGH,7);  
HPV :REF(VOL,HP7);   //过去7日最高价所在K线的成交量

谢谢老师
还有另外一个问题,用以下代码进行回测的时候,运行后某一给出交易情况。
我看了图表,是有符合开仓和平仓的信号的。麻烦老师帮忙看看,代码是否有问题,帮忙修正一下。


    //根据指定资金计算手数参考这段代码
input:zj(5000,1,1000000,1);
下单资金量:=zj;
MarginRatio:=TACCOUNT(42);//空头保证金比率. 这个要把合约信息设置里面的费率设置正确,否则函数取到的值可能是不对的。
bzj:=Close*Multiplier*MarginRatio;//一手保证金占用
ss1:=Intpart(下单资金量/(bzj));//根据资金ZJ计算的开仓手数

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


IF SELLSIGNAL THEN
  SELLSHORT(HOLDING=0,ss,MARKET);

IF BUYSIGNAL1  OR BUYSIGNAL2   OR BUYSIGNAL3 OR BUYSIGNAL4  OR BUYSIGNAL5  OR BUYSIGNAL6  OR BUYSIGNAL7  OR BUYSIGNAL8 THEN
   BUYSHORT(HOLDING>0,HOLDING,MARKET);
回复

使用道具 举报

0

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
gxx978
发表于 2025-9-2 15:34 | 显示全部楼层
本帖最后由 技术010 于 2025-9-2 15:36 编辑

开空用手数SS,用holding=0,平空才用持仓holding,用holding<0,写反了。
IF SELLSIGNAL THEN
  SELLSHORT(HOLDING<0,HOLDING,MARKET);

IF BUYSIGNAL1  OR BUYSIGNAL2   OR BUYSIGNAL3 OR BUYSIGNAL4  OR BUYSIGNAL5  OR BUYSIGNAL6  OR BUYSIGNAL7  OR BUYSIGNAL8 THEN
   BUYSHORT(HOLDING=0,SS,MARKET);
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

16

主题

91

帖子

91

积分

等级: 免费版

注册:
2025-8-7
曾用名:
 楼主| 发表于 2025-9-2 15:49 | 显示全部楼层
技术010 发表于 2025-9-2 15:34
开空用手数SS,用holding=0,平空才用持仓holding,用holding

老师,运行后开空和平空,位置错位了。麻烦帮忙检查并修正一下代码


// 1. 空仓 → 开空
IF SELLSIGNAL AND 买=1 AND 卖=0 THEN BEGIN
   DRAWTEXT(1,L,'卖', COLORRED);
   卖:=1;
   买:=0;
END

// 2. 空头 → 平空开多
IF BUYSIGNAL1 AND 卖=1 AND 买=0 THEN BEGIN
   DRAWTEXT(1,L,'平1', COLORBLUE);
   卖:=0;
   买:=1;
END
   
   IF BUYSIGNAL2 AND 卖=1 AND 买=0 THEN BEGIN
   DRAWTEXT(1,L,'平2', COLORBLUE);
   卖:=0;
   买:=1;
   END
   
   IF BUYSIGNAL3 AND 卖=1 AND 买=0 THEN BEGIN
   DRAWTEXT(1,L,'平3', COLORBLUE);
   卖:=0;
   买:=1;
   END
   
   
   
   
   IF BUYSIGNAL4 AND 卖=1 AND 买=0 THEN BEGIN
   DRAWTEXT(1,L,'平4', COLORBLUE);
   卖:=0;
   买:=1;
   END
   
   
   
   IF BUYSIGNAL5 AND 卖=1 AND 买=0 THEN BEGIN
   DRAWTEXT(1,L,'平5', COLORBLUE);
   卖:=0;
   买:=1;
   END
   
   
   
   IF BUYSIGNAL6 AND 卖=1 AND 买=0 THEN BEGIN
   DRAWTEXT(1,L,'平6', COLORBLUE);
   卖:=0;
   买:=1;
   END
   
   
   
   IF BUYSIGNAL7 AND 卖=1 AND 买=0 THEN BEGIN
   DRAWTEXT(1,L,'平7', COLORBLUE);
   卖:=0;
   买:=1;
   END
   
           IF BUYSIGNAL8 AND 卖=1 AND 买=0 THEN BEGIN
   DRAWTEXT(1,L,'平8', COLORBLUE);
   卖:=0;
   买:=1;
   END

    //根据指定资金计算手数参考这段代码
input:zj(5000,1,1000000,1);
下单资金量:=zj;
MarginRatio:=TACCOUNT(42);//空头保证金比率. 这个要把合约信息设置里面的费率设置正确,否则函数取到的值可能是不对的。
bzj:=Close*Multiplier*MarginRatio;//一手保证金占用
ss1:=Intpart(下单资金量/(bzj));//根据资金ZJ计算的开仓手数

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


IF SELLSIGNAL THEN
  SELLSHORT(HOLDING<0,HOLDING,MARKET);

IF BUYSIGNAL1  OR BUYSIGNAL2   OR BUYSIGNAL3 OR BUYSIGNAL4  OR BUYSIGNAL5  OR BUYSIGNAL6  OR BUYSIGNAL7  OR BUYSIGNAL8 THEN
   BUYSHORT(HOLDING=0,SS,MARKET);
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-10-8 18:24 , Processed in 0.116150 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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