当前位置:首页>python>ICU均线指标:通达信Python首发源码转换

ICU均线指标:通达信Python首发源码转换

  • 2026-10-11 08:27:03
ICU均线指标:通达信Python首发源码转换

利他科技分享技术

通达信指标安装技巧:

电脑端 打开通达信软件;点击“功能”-“公式系统”-“公式管理器”;选择“技术指标公式”-“新建”;测试通过的话,一定要记得去点击右上角的”确定“按钮,这样就完成了。

友情提示(指标只是辅助,不作建议) 

图一:指标全局分析图

一、指标核心用法

指标名称:ICU均线

指标类型画线方法:主图叠加

适用软件:通达信

加密类型:未加密、开源免费共享

未来函数:不包含

风险提示:算法和指标仅仅提供技术研究和学习交流使用。市场一直都具有有很强的不确定性,基于指标的决策判断分析都需要小心谨慎,且需要自行承担风险,不构成任何投资建议,友情提示代码较多请认真阅读。

二、指标图谱展示

图二:指标指数示范图

三、指标Python代码

Python安装依赖 pip install pandas numpy
from scipy.stats import siegelslopes# 计算ICU均线def calc_icu(srs):    n = srs.shape[0]    m = round((n-1) / 2)    beta, mu = siegelslopes(srs, np.arange(-m,m+1), method='hierarchical')    y = mu + beta * m    return y# 均线长度ma_len = 5# 普通5日均线data['ma'] = data['close'].rolling(ma_len).mean()data['icu'] = data['close'].rolling(ma_len).apply(calc_icu, raw=True)data.tail(10)

说明:

通达信没有中位数,也没有对应回归函数,所以只能使用自己构建实现。

在通达信公式中没有直接提供Theil-Sen回归函数,需要自己实现“穷举法”。穷举法指的是Theil-Sen方法:计算所有点对之间的斜率,取中位数作为斜率估计,然后截距取所有残差的中位数

但注意原函数method='hierarchical',scipy中的实现使用了一种分层方法,但是最终结果等同于Theil-Sen估计:斜率是所有点对斜率的中位数

截距是所有截距的中位数(其中截距 = y_i - beta * x_i)。

所以我们需要在通达信公式中实现这种计算。

由于窗口长度为5,点对数量为C(5,2)=10,

可以枚举所有点对计算斜率,取其中位数,然后计算每个点的截距,取中位数。

最后计算y = mu + beta * m。

四、指标公式源代码

LIJIN1:=BARSCOUNT(C)<5;

LIJIN2:=REF(C,4);

LIJIN3:=REF(C,3);

LIJIN4:=REF(C,2);

LIJIN5:=REF(C,1);

LIJIN6:=C;

LIJIN7:=LIJIN4-LIJIN2;

LIJIN8:=(LIJIN3-LIJIN2)/2;

LIJIN9:=(LIJIN5-LIJIN2)/3;

LIJIN10:=(LIJIN6-LIJIN2)/4;

LIJIN11:=LIJIN3-LIJIN4;

LIJIN12:=(LIJIN5-LIJIN4)/2;

LIJIN13:=(LIJIN6-LIJIN4)/3;

LIJIN14:=LIJIN5-LIJIN3;

LIJIN15:=(LIJIN6-LIJIN3)/2;

LIJIN16:=LIJIN6-LIJIN5;

LIJIN17:=MIN(LIJIN7,LIJIN8);

LIJIN18:=MAX(LIJIN7,LIJIN8);

LIJIN19:=IF(LIJIN9<=LIJIN17,LIJIN9,LIJIN17);

LIJIN20:=IF(LIJIN9<=LIJIN17,LIJIN17,IF(LIJIN9<=LIJIN18,LIJIN9,LIJIN18));

LIJIN21:=IF(LIJIN9<=LIJIN18,LIJIN18,LIJIN9);

LIJIN22:=IF(LIJIN10<=LIJIN19,LIJIN10,LIJIN19);

LIJIN23:=IF(LIJIN10<=LIJIN19,LIJIN19,IF(LIJIN10<=LIJIN20,LIJIN10,LIJIN20));

LIJIN24:=IF(LIJIN10<=LIJIN20,LIJIN20,IF(LIJIN10<=LIJIN21,LIJIN10,LIJIN21));

LIJIN25:=IF(LIJIN10<=LIJIN21,LIJIN21,LIJIN10);

LIJIN26:=IF(LIJIN11<=LIJIN22,LIJIN11,LIJIN22);

LIJIN27:=IF(LIJIN11<=LIJIN22,LIJIN22,IF(LIJIN11<=LIJIN23,LIJIN11,LIJIN23));

LIJIN28:=IF(LIJIN11<=LIJIN23,LIJIN23,IF(LIJIN11<=LIJIN24,LIJIN11,LIJIN24));

LIJIN29:=IF(LIJIN11<=LIJIN24,LIJIN24,IF(LIJIN11<=LIJIN25,LIJIN11,LIJIN25));

LIJIN30:=IF(LIJIN11<=LIJIN25,LIJIN25,LIJIN11);

LIJIN31:=IF(LIJIN12<=LIJIN26,LIJIN12,LIJIN26);

LIJIN32:=IF(LIJIN12<=LIJIN26,LIJIN26,IF(LIJIN12<=LIJIN27,LIJIN12,LIJIN27));

LIJIN33:=IF(LIJIN12<=LIJIN27,LIJIN27,IF(LIJIN12<=LIJIN28,LIJIN12,LIJIN28));

LIJIN34:=IF(LIJIN12<=LIJIN28,LIJIN28,IF(LIJIN12<=LIJIN29,LIJIN12,LIJIN29));

LIJIN35:=IF(LIJIN12<=LIJIN29,LIJIN29,IF(LIJIN12<=LIJIN30,LIJIN12,LIJIN30));

LIJIN36:=IF(LIJIN12<=LIJIN30,LIJIN30,LIJIN12);

LIJIN37:=IF(LIJIN13<=LIJIN31,LIJIN13,LIJIN31);

LIJIN38:=IF(LIJIN13<=LIJIN31,LIJIN31,IF(LIJIN13<=LIJIN32,LIJIN13,LIJIN32));

LIJIN39:=IF(LIJIN13<=LIJIN32,LIJIN32,IF(LIJIN13<=LIJIN33,LIJIN13,LIJIN33));

LIJIN40:=IF(LIJIN13<=LIJIN33,LIJIN33,IF(LIJIN13<=LIJIN34,LIJIN13,LIJIN34));

LIJIN41:=IF(LIJIN13<=LIJIN34,LIJIN34,IF(LIJIN13<=LIJIN35,LIJIN13,LIJIN35));

LIJIN42:=IF(LIJIN13<=LIJIN35,LIJIN35,IF(LIJIN13<=LIJIN36,LIJIN13,LIJIN36));

LIJIN43:=IF(LIJIN13<=LIJIN36,LIJIN36,LIJIN13);

LIJIN44:=IF(LIJIN14<=LIJIN37,LIJIN14,LIJIN37);

LIJIN45:=IF(LIJIN14<=LIJIN37,LIJIN37,IF(LIJIN14<=LIJIN38,LIJIN14,LIJIN38));

LIJIN46:=IF(LIJIN14<=LIJIN38,LIJIN38,IF(LIJIN14<=LIJIN39,LIJIN14,LIJIN39));

LIJIN47:=IF(LIJIN14<=LIJIN39,LIJIN39,IF(LIJIN14<=LIJIN40,LIJIN14,LIJIN40));

LIJIN48:=IF(LIJIN14<=LIJIN40,LIJIN40,IF(LIJIN14<=LIJIN41,LIJIN14,LIJIN41));

LIJIN49:=IF(LIJIN14<=LIJIN41,LIJIN41,IF(LIJIN14<=LIJIN42,LIJIN14,LIJIN42));

LIJIN50:=IF(LIJIN14<=LIJIN42,LIJIN42,IF(LIJIN14<=LIJIN43,LIJIN14,LIJIN43));

LIJIN51:=IF(LIJIN14<=LIJIN43,LIJIN43,LIJIN14);

LIJIN52:=IF(LIJIN15<=LIJIN44,LIJIN15,LIJIN44);

LIJIN53:=IF(LIJIN15<=LIJIN44,LIJIN44,IF(LIJIN15<=LIJIN45,LIJIN15,LIJIN45));

LIJIN54:=IF(LIJIN15<=LIJIN45,LIJIN45,IF(LIJIN15<=LIJIN46,LIJIN15,LIJIN46));

LIJIN55:=IF(LIJIN15<=LIJIN46,LIJIN46,IF(LIJIN15<=LIJIN47,LIJIN15,LIJIN47));

LIJIN56:=IF(LIJIN15<=LIJIN47,LIJIN47,IF(LIJIN15<=LIJIN48,LIJIN15,LIJIN48));

LIJIN57:=IF(LIJIN15<=LIJIN48,LIJIN48,IF(LIJIN15<=LIJIN49,LIJIN15,LIJIN49));

LIJIN58:=IF(LIJIN15<=LIJIN49,LIJIN49,IF(LIJIN15<=LIJIN50,LIJIN15,LIJIN50));

LIJIN59:=IF(LIJIN15<=LIJIN50,LIJIN50,IF(LIJIN15<=LIJIN51,LIJIN15,LIJIN51));

LIJIN60:=IF(LIJIN15<=LIJIN51,LIJIN51,LIJIN15);

LIJIN61:=IF(LIJIN16<=LIJIN52,LIJIN16,LIJIN52);

LIJIN62:=IF(LIJIN16<=LIJIN52,LIJIN52,IF(LIJIN16<=LIJIN53,LIJIN16,LIJIN53));

LIJIN63:=IF(LIJIN16<=LIJIN53,LIJIN53,IF(LIJIN16<=LIJIN54,LIJIN16,LIJIN54));

LIJIN64:=IF(LIJIN16<=LIJIN54,LIJIN54,IF(LIJIN16<=LIJIN55,LIJIN16,LIJIN55));

LIJIN65:=IF(LIJIN16<=LIJIN55,LIJIN55,IF(LIJIN16<=LIJIN56,LIJIN16,LIJIN56));

LIJIN66:=IF(LIJIN16<=LIJIN56,LIJIN56,IF(LIJIN16<=LIJIN57,LIJIN16,LIJIN57));

LIJIN67:=IF(LIJIN16<=LIJIN57,LIJIN57,IF(LIJIN16<=LIJIN58,LIJIN16,LIJIN58));

LIJIN68:=IF(LIJIN16<=LIJIN58,LIJIN58,IF(LIJIN16<=LIJIN59,LIJIN16,LIJIN59));

LIJIN69:=IF(LIJIN16<=LIJIN59,LIJIN59,IF(LIJIN16<=LIJIN60,LIJIN16,LIJIN60));

LIJIN70:=IF(LIJIN16<=LIJIN60,LIJIN60,LIJIN16);

LIJIN71:=(LIJIN65+LIJIN66)/2;

LIJIN72:=LIJIN2-LIJIN71*(-2);

LIJIN73:=LIJIN3-LIJIN71*(-1);

LIJIN74:=LIJIN4-LIJIN71*0;

LIJIN75:=LIJIN5-LIJIN71*1;

LIJIN76:=LIJIN6-LIJIN71*2;

LIJIN77:=MIN(LIJIN72,LIJIN73);

LIJIN78:=MAX(LIJIN72,LIJIN73);

LIJIN79:=IF(LIJIN74<=LIJIN77,LIJIN74,LIJIN77);

LIJIN80:=IF(LIJIN74<=LIJIN77,LIJIN77,IF(LIJIN74<=LIJIN78,LIJIN74,LIJIN78));

LIJIN81:=IF(LIJIN74<=LIJIN78,LIJIN78,LIJIN74);

LIJIN82:=IF(LIJIN75<=LIJIN79,LIJIN75,LIJIN79);

LIJIN83:=IF(LIJIN75<=LIJIN79,LIJIN79,IF(LIJIN75<=LIJIN80,LIJIN75,LIJIN80));

LIJIN84:=IF(LIJIN75<=LIJIN80,LIJIN80,IF(LIJIN75<=LIJIN81,LIJIN75,LIJIN81));

LIJIN85:=IF(LIJIN75<=LIJIN81,LIJIN81,LIJIN75);

LIJIN86:=IF(LIJIN76<=LIJIN82,LIJIN76,LIJIN82);

LIJIN87:=IF(LIJIN76<=LIJIN82,LIJIN82,IF(LIJIN76<=LIJIN83,LIJIN76,LIJIN83));

LIJIN88:=IF(LIJIN76<=LIJIN83,LIJIN83,IF(LIJIN76<=LIJIN84,LIJIN76,LIJIN84));

LIJIN89:=IF(LIJIN76<=LIJIN84,LIJIN84,IF(LIJIN76<=LIJIN85,LIJIN76,LIJIN85));

LIJIN90:=IF(LIJIN76<=LIJIN85,LIJIN85,LIJIN76);

LIJIN91:=LIJIN88;

LIJIN92:=LIJIN91+LIJIN71*2;

LIJIN93:IF(LIJIN1,DRAWNULL,LIJIN92),COLORRED,LINETHICK4;

分享知识:与人为善,分享快乐!爱人如己,我为人人!

自用指标

最新文章

随机文章