金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
楼主: sniper

编写一个面积公式

[复制链接]

21

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2025-6-27 15:23 | 显示全部楼层
[PEL] 复制代码
// MACD指标
DIFF :EMA(CLOSE,12) - EMA(CLOSE,26);
DEA  :EMA(DIFF,9);                  
MACD :2 * (DIFF - DEA),COLORSTICK;
 
//中间变量
n1:=SUMBARS(MACD>0 AND REF(MACD<0,1),1);
n2:=SUMBARS(MACD<0 AND REF(MACD>0,1),1);
sum_red_areas:=REF(SUM(MACD,n1),n2),LINETHICK0;//红柱面积
sum_green_areas:=REF(SUM(MACD,n2),n1),LINETHICK0;//绿柱面积
 
 
 
n3:=SUMBARS(MACD>0 AND REF(MACD<0,1),2);
n4:=SUMBARS(MACD<0 AND REF(MACD>0,1),2);
sum_red_areas2:=REF(SUM(MACD,n1),n4),LINETHICK0;//红柱面积
sum_green_areas2:=REF(SUM(MACD,n2),n3),LINETHICK0;//绿柱面积
 
 
sum_red_HH:REF(HHVbars(MACD,n1),n2),LINETHICK0;//红柱最大 距离当前的周期跨度
sum_green_LL:REF(llvbars(MACD,n2),n1),LINETHICK0;//绿柱最小 距离当前的周期跨度
sum_red_HH2:REF(HHVbars(MACD,n1),n4),LINETHICK0;
sum_green_LL2:REF(llvbars(MACD,n2),n3),LINETHICK0;
 
RED_H:=REF(H,sum_red_HH);//最大红柱对应的H
GREEN_L:=REF(L,sum_green_LL);//最小绿柱对应的L
 
  //红柱
IF CROSS(0,MACD) and sum_red_areas<sum_red_areas2*1.5 THEN BEGIN
        DRAWTEXT(1,0,'涨',COLORRED);
        //输出最近红柱的最大值
        DRAWTEXT(1,-MACD,NUMTOSTR(RED_H,2),COLORRED);
   END
 
  //绿柱
IF CROSS(MACD,0) and abs(sum_green_areas)<abs(sum_green_areas2)*1.5 THEN BEGIN
        DRAWTEXT(1,0,'跌',COLORYELLOW);
        //输出最近绿柱的最小值
        DRAWTEXT(1,-MACD,NUMTOSTR(GREEN_L,2),COLORGREEN);
   END
    


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号? 微信登录

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

使用道具 举报

4

主题

117

帖子

117

积分

等级: 免费版

注册:
2025-5-23
曾用名:
 楼主| 发表于 2025-6-27 15:42 | 显示全部楼层
1、调取的值好像有误差这是什么原因?
2,  如何把对应的值放到对应的柱子上方或者下方
如图

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号? 微信登录

x
回复

使用道具 举报

4

主题

117

帖子

117

积分

等级: 免费版

注册:
2025-5-23
曾用名:
 楼主| 发表于 2025-6-27 15:53 | 显示全部楼层
RED_H:=REF(H,sum_red_HH);//最大红柱对应的H
GREEN_L:=REF(L,sum_green_LL);//最小绿柱对应的L
不是这个意思。。不是最大红柱对应的H ,不是最小绿柱对应的L
是一段连续红柱里最大的K线值
是一段连续绿柱里最大的K线值

补充内容 (2025-6-27 15:55):
另外一个问题是 这个最大的K线值会误差一格。或者最小的K线值会误差1格。。
这是什么原因
回复

使用道具 举报

21

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2025-6-27 16:24 | 显示全部楼层
你前面的需求,我重新看了下,你这个描述的没说清楚:

“并且后面一段连续红柱子的最高点低于前面一段连续的红柱子最高点高,再结合上面的条件才提示涨”

你这里意思是最近(靠近最新K位置)的那一段连续红柱的最大macd值 比前面那一段(历史方向)连续红柱的macd值 大 还是小?

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

使用道具 举报

4

主题

117

帖子

117

积分

等级: 免费版

注册:
2025-5-23
曾用名:
 楼主| 发表于 2025-6-27 16:37 | 显示全部楼层
(相邻的红柱面积,后面红柱面积比上前一个红柱面积大于1.5提示涨
相邻的绿柱面积,后面绿柱面积比上前一个绿柱面积大于1.5,提示跌
主要是红柱面积比红柱面积。。 不是红柱和绿柱面积比)
以上是这断写的公式需要加一个参数。
一段连续的红柱子对应的K线最高值写在红柱子上方。
一段连续的绿柱子对应的K线最低值写在绿柱子下方。
1、相邻的红柱面积,后面红柱面积比上前一个红柱面积大于1.5
并且后面一段连续红柱子对应的K线的最大值比前面一段连续的红柱子对应的K线最大值要大,再结合上面的条件才提示‘向上突破’
2、相邻的绿柱面积,后面绿柱面积比上前一个绿柱面积大于1.5;
并且后面一段连续绿柱子对应的K线最低值低于前面一段连续的绿柱子对应的K线最低值要低,再结合上面的条件才提示‘向下突破’
你好这个应该对了。。 帮我改下。
前面不好意思。。 是我弄错了
回复

使用道具 举报

4

主题

117

帖子

117

积分

等级: 免费版

注册:
2025-5-23
曾用名:
 楼主| 发表于 2025-6-27 16:50 | 显示全部楼层
RED_H:=REF(H,sum_red_HH);//最大红柱对应的H
GREEN_L:=REF(L,sum_green_LL);//最小绿柱对应的L
这个一段连续红柱子对于的K线最高值不知道怎么定义
回复

使用道具 举报

21

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2025-6-27 17:17 | 显示全部楼层
[PEL] 复制代码
// macd指标
diff :ema(close,12) - ema(close,26);
dea  :ema(diff,9);                  
macd :2 * (diff - dea),colorstick;
  
//中间变量
n1:=sumbars(macd>0 and ref(macd<0,1),1),nodraw;//最近一个金叉的位置
n2:=sumbars(macd<0 and ref(macd>0,1),1),nodraw;//最近一个死叉的位置
sum_red_areas:=ref(sum(macd,n1),n2),linethick0;//最近一个已经结束的红柱面积
sum_green_areas:=ref(sum(macd,n2),n1),linethick0;//最近一个已经结束的绿柱面积
  
n3:=sumbars(macd>0 and ref(macd<0,1),2);//上上次金叉的位置
n4:=sumbars(macd<0 and ref(macd>0,1),2);//上上次死叉的位置
sum_red_areas2:ref(sum(macd,n1),n4),linethick0;//红柱面积
sum_green_areas2:=ref(sum(macd,n2),n3),linethick0;//绿柱面积
  
  
sum_red_hh:ref(hhv(h,n1),n2),linethick0;//最近一段红柱对应区间的 K线的最高价
sum_green_ll:ref(llv(l,n2),n1),linethick0;//最近一段绿柱对应区间的 K线的最低价
sum_red_hh2:ref(hhv(h,n1),n4),linethick0;
sum_green_ll2:ref(llv(l,n2),n3),linethick0;
  
  
  //最近一个红柱的面积大于上一个连续红柱面积的1.5倍
if cross(0,macd) and sum_red_areas>sum_red_areas2*1.5 and sum_red_hh>sum_red_hh2 then begin
        drawtext(1,0,'涨',colorred);
        //输出最近红柱区间的K线最大值
        drawtext(1,-2*macd,numtostr(sum_red_hh,2),colorred,0);
   end
  
  //最近一个绿柱的面积大于上一个连续绿柱面积的1.5倍
if cross(macd,0) and abs(sum_green_areas)>abs(sum_green_areas2)*1.5 and sum_green_ll<sum_green_ll2 then begin
        drawtext(1,0,'跌',coloryellow);
        //输出最近绿柱的K线最小值
        drawtext(1,-2*macd,numtostr(sum_green_ll,2),colorgreen,0);
   end





实现的思路 在注释中有备注。可以参照着确认下是否是自己要的。

另外你前面问为什么偏移了一个K。因为一段完整的红柱或者绿柱 只能等他结束时候才能确定这个区间。所以红柱区间的确定 是要等死叉到来的。反之同理。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号? 微信登录

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

使用道具 举报

4

主题

117

帖子

117

积分

等级: 免费版

注册:
2025-5-23
曾用名:
 楼主| 发表于 2025-6-30 14:01 | 显示全部楼层
、// macd指标
diff :ema(close,12) - ema(close,26);
dea  :ema(diff,9);                  
macd :2 * (diff - dea),colorstick;
   
//中间变量
n1:=sumbars(macd>0 and ref(macd<0,1),1),nodraw;//最近一个金叉的位置
n2:=sumbars(macd<0 and ref(macd>0,1),1),nodraw;//最近一个死叉的位置
sum_red_areas:=ref(sum(macd,n1),n2),linethick0;//最近一个已经结束的红柱面积
sum_green_areas:=ref(sum(macd,n2),n1),linethick0;//最近一个已经结束的绿柱面积
   
n3:=sumbars(macd>0 and ref(macd<0,1),2);//上上次金叉的位置
n4:=sumbars(macd<0 and ref(macd>0,1),2);//上上次死叉的位置
sum_red_areas2:ref(sum(macd,n1),n4),linethick0;//红柱面积
sum_green_areas2:=ref(sum(macd,n2),n3),linethick0;//绿柱面积
   
   
sum_red_hh:ref(hhv(h,n1),n2),linethick0;//最近一段红柱对应区间的 K线的最高价
sum_green_ll:ref(llv(l,n2),n1),linethick0;//最近一段绿柱对应区间的 K线的最低价
sum_red_hh2:ref(hhv(h,n1),n4),linethick0;
sum_green_ll2:ref(llv(l,n2),n3),linethick0;
   
   
  //最近一个红柱的面积大于上一个连续红柱面积的1.5倍
if cross(0,macd) and sum_red_areas>sum_red_areas2*1.5 and sum_red_hh>sum_red_hh2 then begin
        drawtext(1,0,'涨',colorred);
        //输出最近红柱区间的K线最大值
        drawtext(1,-2*macd,numtostr(sum_red_hh,2),colorred,0);
   end
   
  //最近一个绿柱的面积大于上一个连续绿柱面积的1.5倍
if cross(macd,0) and abs(sum_green_areas)>abs(sum_green_areas2)*1.5 and sum_green_ll<sum_green_ll2 then begin
        drawtext(1,0,'跌',coloryellow);
        //输出最近绿柱的K线最小值
        drawtext(1,-2*macd,numtostr(sum_green_ll,2),colorgreen,0);
   end
//以上为公式B, 新增cond函数
  cond1:cross(0,macd) and sum_red_areas>sum_red_areas2*1.5 and sum_red_hh>sum_red_hh2
  cond2: cross(macd,0) and abs(sum_green_areas)>abs(sum_green_areas2)*1.5 and sum_green_ll<sum_green_ll2





//然后其他地方用stkindi跨周期调用B指标的cond1和cond2
if DATATYPE = 1 then a:=1;
if DATATYPE = 2 then a:=5;

if stkindi('','B.cond1',0,1,0) then DRAWTEXT(1,0,'涨1',coloryellow);

if stkindi('','B.cond2',0,1,0) then DRAWTEXT(1,0,'跌1',colorred);

if stkindi('','B.cond1',0,2,0) then DRAWTEXT(1,0,'涨5',coloryellow);

if stkindi('','B.cond2',0,2,0) then DRAWTEXT(1,0,'跌5',colorred);

怎么以上调用失败了
回复

使用道具 举报

4

主题

117

帖子

117

积分

等级: 免费版

注册:
2025-5-23
曾用名:
 楼主| 发表于 2025-6-30 14:02 | 显示全部楼层
加了cond  
另外新建了公式
但是失败了。
主要的目的是想集中在一个周期显示。。 不用不同的周期切换。
回复

使用道具 举报

44

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
发表于 2025-6-30 14:03 | 显示全部楼层
ccc:stkindi('','B.cond1',0,1,0);


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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-6 15:00 , Processed in 0.119274 second(s), 20 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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