金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
楼主: 100020061

平仓

[复制链接]

32

主题

8040

帖子

8050

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
发表于 2024-12-31 09:10 | 显示全部楼层
// 定义变量
VARIABLE: HHV_PRICE:=0, LLV_PRICE:=0, CONTAINED:=0, PREV_HHV:=0, PREV_LLV:=0;

// 判断前一个K线是否包含在当前K线
IS_CONTAINED:=REF(HIGH, 1) <= HIGH AND REF(LOW, 1) >= LOW;

// 判断前2个K线的高低点关系
PREV2_HIGH:=REF(HIGH, 2);
PREV2_LOW:=REF(LOW, 2);
PREV1_HIGH:=REF(HIGH, 1);
PREV1_LOW:=REF(LOW, 1);

// 判断前2个K线是否高点抬高且低点抬高
IS_HIGHER_HIGH:=PREV1_HIGH > PREV2_HIGH AND PREV1_LOW > PREV2_LOW;

// 处理包含K
IF IS_CONTAINED THEN BEGIN
    IF IS_HIGHER_HIGH THEN BEGIN
        HHV_PRICE:=MAX(HIGH, PREV1_HIGH); // 取当前K和前一个K的最高HIGH
        LLV_PRICE:=MAX(LOW, PREV1_LOW);   // 取当前K和前一个K的最高LOW
    END ELSE BEGIN
        HHV_PRICE:=MAX(HIGH, PREV1_HIGH); // 取当前K和前一个K的最高HIGH
        LLV_PRICE:=MIN(LOW, PREV1_LOW);   // 取当前K和前一个K的最低LOW
    END;
    CONTAINED:=1; // 标记为包含K
END;

// 持续处理包含K
IF CONTAINED = 1 THEN BEGIN
    // 判断当前K线是否仍然被包含
    IF HIGH >= HHV_PRICE AND LOW <= LLV_PRICE THEN BEGIN
        IF IS_HIGHER_HIGH THEN BEGIN
            HHV_PRICE:=MAX(HIGH, HHV_PRICE); // 更新最高HIGH
            LLV_PRICE:=MAX(LOW, LLV_PRICE);  // 更新最高LOW
        END ELSE BEGIN
            HHV_PRICE:=MAX(HIGH, HHV_PRICE); // 更新最高HIGH
            LLV_PRICE:=MIN(LOW, LLV_PRICE);  // 更新最低LOW
        END;
    END ELSE BEGIN
        CONTAINED:=0; // 结束包含K的处理
    END;
END;

// 输出结果
a1:HHV_PRICE;
a2:LLV_PRICE;

金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

450

主题

2689

帖子

2699

积分

Rank: 2

等级: 标准版

注册:
2023-2-16
曾用名:
 楼主| 发表于 2024-12-31 10:16 | 显示全部楼层
技术008 发表于 2024-12-31 09:10
// 定义变量
VARIABLE: HHV_PRICE:=0, LLV_PRICE:=0, CONTAINED:=0, PREV_HHV:=0, PREV_LLV:=0;

右边这个价格信息那些不见了,怎么弄出来啊
截图202412311015374478.png
回复

使用道具 举报

32

主题

8040

帖子

8050

积分

Rank: 8Rank: 8

等级: 超级版主

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

使用道具 举报

450

主题

2689

帖子

2699

积分

Rank: 2

等级: 标准版

注册:
2023-2-16
曾用名:
 楼主| 发表于 2024-12-31 10:19 | 显示全部楼层

卖价买价那些信息窗口不见了
回复

使用道具 举报

32

主题

8040

帖子

8050

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
发表于 2024-12-31 10:21 | 显示全部楼层
点右上角这个
截图202412311021175373.png
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

450

主题

2689

帖子

2699

积分

Rank: 2

等级: 标准版

注册:
2023-2-16
曾用名:
 楼主| 发表于 2024-12-31 10:30 | 显示全部楼层

出来了。
另外上面代码中 // 判断前一个K线是否包含在当前K线
IS_CONTAINED:=REF(HIGH, 1) <= HIGH AND REF(LOW, 1) >= LOW; 的判断以后 还要判断当前K是否被前一个K包含,这两个判断以后要独立处理。所以我怕搞混了没说。
意思就是先判断前一个K是吧被包含在当前K,无论有没有包含,处理完毕以后,再判断当前K是否被包含在前一个K,同样执行这样的处理方式。每次都是从左到右判断相邻K的关系。
还要 IS_HIGHER_HIGH:=PREV1_HIGH > PREV2_HIGH AND PREV1_LOW > PREV2_LOW;
判断是否抬高中的H 是否应该使用处理过的HHV_PRICE来判断,不能直接使用前面2个K的H,L判断,因为前面2个K可能存在包含关系,那直接使用前面2个K的,H,L进行是否抬高的处理就会出错了,一定是要使用处理完包含K关系以后的,H,L进行判断


补充内容 (2024-12-31 10:30):
麻烦老师优化下逻辑,谢谢
回复

使用道具 举报

32

主题

8040

帖子

8050

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
发表于 2024-12-31 10:34 | 显示全部楼层
// 定义变量
VARIABLE: HHV_PRICE:=0, LLV_PRICE:=0, CONTAINED:=0, PREV_HHV:=0, PREV_LLV:=0;

// 判断前一个K线是否被包含在当前K线
IS_PREV_CONTAINED:=REF(HIGH, 1) <= HIGH AND REF(LOW, 1) >= LOW;

// 判断当前K线是否被包含在前一个K线
IS_CURR_CONTAINED:=HIGH <= REF(HIGH, 1) AND LOW >= REF(LOW, 1);

// 处理前一个K线被包含在当前K线
temp1:=MAX(HIGH, REF(HIGH, 1));
temp2:=MAX(LOW, REF(LOW, 1));
IF IS_PREV_CONTAINED THEN BEGIN
    HHV_PRICE:=temp1; // 取当前K和前一个K的最高HIGH
    LLV_PRICE:=temp2;   // 取当前K和前一个K的最高LOW
    CONTAINED:=1; // 标记为包含K
END;

// 处理当前K线被包含在前一个K线
IF IS_CURR_CONTAINED THEN BEGIN
    HHV_PRICE:=temp1; // 取当前K和前一个K的最高HIGH
    LLV_PRICE:=temp2;   // 取当前K和前一个K的最高LOW
    CONTAINED:=1; // 标记为包含K
END;

// 判断前2个K线的高低点关系(使用处理后的HHV_PRICE和LLV_PRICE)
PREV2_HHV:=REF(HHV_PRICE, 2);
PREV2_LLV:=REF(LLV_PRICE, 2);
PREV1_HHV:=REF(HHV_PRICE, 1);
PREV1_LLV:=REF(LLV_PRICE, 1);

// 判断前2个K线是否高点抬高且低点抬高
IS_HIGHER_HIGH:=PREV1_HHV > PREV2_HHV AND PREV1_LLV > PREV2_LLV;

// 处理包含K
IF CONTAINED = 1 THEN BEGIN
    IF IS_HIGHER_HIGH THEN BEGIN
        HHV_PRICE:=MAX(HIGH, PREV1_HHV); // 取当前K和前一个K的最高HIGH
        LLV_PRICE:=MAX(LOW, PREV1_LLV);  // 取当前K和前一个K的最高LOW
    END ELSE BEGIN
        HHV_PRICE:=MAX(HIGH, PREV1_HHV); // 取当前K和前一个K的最高HIGH
        LLV_PRICE:=MIN(LOW, PREV1_LLV);  // 取当前K和前一个K的最低LOW
    END;
END;

// 输出结果
a1:HHV_PRICE;
b1:LLV_PRICE;
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

450

主题

2689

帖子

2699

积分

Rank: 2

等级: 标准版

注册:
2023-2-16
曾用名:
 楼主| 发表于 2024-12-31 10:38 | 显示全部楼层
技术008 发表于 2024-12-31 10:34
// 定义变量
VARIABLE: HHV_PRICE:=0, LLV_PRICE:=0, CONTAINED:=0, PREV_HHV:=0, PREV_LLV:=0;

谢谢,我按这个逻辑把下降也写出来试试
回复

使用道具 举报

450

主题

2689

帖子

2699

积分

Rank: 2

等级: 标准版

注册:
2023-2-16
曾用名:
 楼主| 发表于 2024-12-31 13:14 | 显示全部楼层
技术008 发表于 2024-12-31 10:34
// 定义变量
VARIABLE: HHV_PRICE:=0, LLV_PRICE:=0, CONTAINED:=0, PREV_HHV:=0, PREV_LLV:=0;

这个好像重置有问题,没有包含K的情况下会取前面的值


补充内容 (2024-12-31 13:16):
不存在包含K的时候应该是取原K的高低点,是不是前面定义的时候应该为H,L而不是0?
截图202412311311549331.png
回复

使用道具 举报

450

主题

2689

帖子

2699

积分

Rank: 2

等级: 标准版

注册:
2023-2-16
曾用名:
 楼主| 发表于 2025-1-1 15:29 | 显示全部楼层
技术008 发表于 2024-12-31 09:10
// 定义变量
VARIABLE: HHV_PRICE:=0, LLV_PRICE:=0, CONTAINED:=0, PREV_HHV:=0, PREV_LLV:=0;

老师,前面的代码处理不够理想,我整了下思路:
// 定义变量
VARIABLE: HHV_PRICE:=h, LLV_PRICE:=l,HHV_PRICE1:=0, LLV_PRICE1:=0, CONTAINED:=0, PREV_HHV:=0, PREV_LLV:=0;
xl:=BARPOS;
//定义两个K之间高低点的关系
temp1:=MAX(HIGH, REF(h, 1));//高高
temp2:=MAX(LOW, REF(l, 1));  //高低
temp3:=Min(HIGH, REF(h, 1));//低高
temp4:=Min(LOW, REF(l, 1));  //低低
//从左到右判断包含关系
// 判断前一个K线是否被包含在当前K线
IS_PREV_CONTAINED:REF(h, 1) <= h AND REF(l, 1) >= l;
// 判断当前K线是否被包含在前一个K线
IS_CURR_CONTAINED:HIGH <= REF(h, 1) AND LOW >= REF(l, 1);

IF IS_PREV_CONTAINED or IS_CURR_CONTAINED THEN BEGIN
        //当前两个相邻K出现包含关系,往前判断各个相邻K的包含关系,为当前包含关系判断方向
        //判断前第二,第三是否存在包含关系
        pd2:=IS_PREV_CONTAINED[xl-1] or IS_PREV_CONTAINED[xl-1];
        if pd2=0 then pd3:IS_PREV_CONTAINED[xl-2] or IS_PREV_CONTAINED[xl-2];
        if pd3=0 then pd4:IS_PREV_CONTAINED[xl-3] or IS_PREV_CONTAINED[xl-3];          
        //如果相邻K出现后,连续3个K都出现了不包含关系,那么就要判断,前三个K的高低点构成情况。
        if pd4=0 then BEGIN
                //高点抬高,低点可以相等,说明是上升趋势
                ssqs:h[xl-2]>h[xl-3] and l[xl-2]>=l[xl-3];
                //低点降低,高点可以相等,说明是下降趋势
                xjqs:h[xl-2]<=h[xl-3] and l[xl-2]<l[xl-3];
                if ssqs=1 then BEGIN
                  //上升趋势,高低点取高高
                  HHV_PRICE:=temp1;
                  LLV_PRICE:=temp2;
                   END
               if xjqs=1 then BEGIN
                       //下降趋势高低点取低低
                  HHV_PRICE:=temp3;
                  LLV_PRICE:=temp4;       
                  END       
               
           END
       
        END
// 输出结果
a1:HHV_PRICE;
b1:LLV_PRICE;

变色区域是一种理想状态,往前三个K都不存在包含关系的情况下,就是对的,但是实际中,往前肯定有很多出现包含关系的情况,那么进行判断的前提条件就是往前连续三个处理K不存在包含关系才能判断当前包含K的方向,所以,如果往前遇到有包含K的情况,就要一直往前取,直到没有出现连续3个K有包含的K的情况,才能判断这3个K没有包含的K的当前包含K的方向,才能对对应的包含K进行取高高还是低低的判断,然后才能取到最新K这个位置对当前的包含K进行高低点取值判断,麻烦老师理一下


补充内容 (2025-1-1 15:30):
1,2就是相邻K,高高,低低的判断,源于相邻K的前3个处理K,必须这样往回判断,才能精确取值
截图202501011529159324.png
截图202501011528205619.png
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-7 09:55 , Processed in 0.231453 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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