社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

Python编程学动量自动化:通达信真正波段王顶底指标源代码

量化对冲套利 • 2 周前 • 57 次点击  

朋友们大家好今天来学习这个通达信指标算法,注意本指标源码用于通达信,友情情提示:代码较多,一定要复制全。本文所述模型算法仅限学术探讨,指标公式作为知识免费分享,"基于开源数据集的理论推演",仅用于学习交流。

图片
图片
风险提示:本指标仅供技术研究与学习交流使用。市场具有高度不确定性,任何基于本指标的决策都需要自行承担风险,不构成任何投资建议。

01 指标图例


图一

图二

02 指标源码



量化对冲套利:EMA((CLOSE-MA((2*CLOSE+HIGH+LOW)/4,30))/MA((


    
2*CLOSE+HIGH+LOW)/4,30)*100,3),COLORWHITE;0,COLORRED;STICKLINE(量化对冲套利<-10,0,量化对冲套利,0,0),COLORGREEN;STICKLINE(量化对冲套利>10,0,量化对冲套利,0,0),COLORYELLOW;RSV:=(((CLOSE-LLV(LOW,9))/(HHV(HIGH,9)-LLV(LOW,9)))*100);K:=SMA(RSV,3,1);D:=SMA(K,3,1);J:=((3*K)-(2*D));lijinzz1:=(((CLOSE-MA(CLOSE,6))/MA(CLOSE,6))*100);lijinzz2:=(((CLOSE-MA(CLOSE,12))/MA(CLOSE,12))*100);lijinzz3:=(((CLOSE-MA(CLOSE,24))/MA(CLOSE,24))*100);lijinzz4:=(((lijinzz1+(2*lijinzz2))+(3*lijinzz3))/6);lijinzz5:=MA(lijinzz4,3);STICKLINE((CROSS(J,0)&&(lijinzz5<=(0-7))),0,35,8,0),COLOR780000;STICKLINE((CROSS(J,0)&&(lijinzz5<=(0-7))),0,35,6,0),COLOR9D0000;STICKLINE((CROSS(J,0)&&(lijinzz5<=(0-7))),0,35,5,0),COLORFF0000;STICKLINE((CROSS(J,0)&&(lijinzz5<=(0-7))),0,35,2,0),COLOR7AB500;DRAWTEXT((CROSS(J,0)&&(lijinzz5<=(0-7))),15,'←机会'),COLOR0000FF;机会:CROSS(J,0)&&(lijinzz5<=(0-7)),COLORRED;LC:=REF(CLOSE,1);RSI:=SMA(MAX(CLOSE-LC,0),6,1)/SMA(ABS(CLOSE-LC),6,1)*100;预警:CROSS(80,RSI)*35,LINETHICK2,COLORGREEN;DRAWTEXT(CROSS(80,RSI),1.2,'逃'),COLORGREEN;逃啊:预警,COLORFFFF00;啊:IF(逃啊>REF(逃啊,1),35,0),COLORFFFF00;DRAWTEXT(啊=35,35,'←逃啊'),COLORFFFF00;



03 Py源码


通达信复制上方代码即可,下方代码仅用于学习交流使用。

import pandas as pd
import numpy as np

def calculate_SMA(series, period, weight=1):
    """计算加权平滑移动平均"""
    sma = np.zeros(len(series))
    if len(series) == 0:
        return sma
    sma[0] = series[0]
    for i in range(1, len(series)):
        sma[i] = (weight * series[i] + (period - weight) * sma[i-1]) / period
    return sma

def calculate_indicators(df):
    # 计算量化对冲套利指标
    df['price'] = (2 * df['close'] + df['high'] + df['low']) / 4
    df['MA30'] = df['price'].rolling(window=30).mean()
    df['temp'] = (df['close'] - df['MA30']) / df['MA30'] * 100
    df['量化对冲套利'] = df['temp'].ewm(span=3, adjust=False).mean()

    # 计算KDJ指标
    low_min = df['low'].rolling(window=9).min().fillna(0)
    high_max = df['high'].rolling(window=9).max().fillna(0)
    rsv = ((df['close'] - low_min) / (high_max - low_min + 1e-12)) * 100
    rsv = rsv.clip(0100)   # 限制在0-100范围
    
    # 计算K、D值
    K = calculate_SMA(rsv.values, 31)
    D = calculate_SMA(K, 31)
    J = 3 * np.array(K) - 2 * np.array(D)
    
    df['K'] = K
    df['D'] = D
    df['J'] = J

    # 计算lijinzz指标
    for period in [61224]:
        df[f'MA{period}'] = df['close'].rolling(window=period).mean()
    df['lijinzz1'] = (df['close'] - df['MA6']) / df['MA6'] * 100
    df['lijinzz2'] = (df['close'] - df['MA12']) / df['MA12'] * 100
    df['lijinzz3'] = (df['close'] - df['MA24']) / df['MA24'] * 100
    df['lijinzz4'] = (df['lijinzz1'] + 2*df['lijinzz2'] + 3*df['lijinzz3']) / 6
    df['lijinzz5'] = df['lijinzz4'].rolling(window=3).mean()

    # 计算机会信号
    df['J_prev'] = df['J'].shift(1)
    cross_j_0 = (df['J'] > 0) & (df['J_prev'] <= 0)
    df['机会信号'] = cross_j_0 & (df['lijinzz5'] <= -7)

    # 计算RSI指标
    df['LC'] = df['close'].shift(1)
    delta = df['close'] - df['LC']
    gain = np.where(delta > 0, delta, 0)
    loss = np.where(delta 0, -delta, 0)
    
    avg_gain = calculate_SMA(gain, 61)
    avg_loss = calculate_SMA(loss, 61)
    rs = avg_gain / (avg_loss + 1e-12)
    df['RSI'] = 100 - (100 / (1 + rs))

    # 计算预警信号
    rsi_prev = df[ 'RSI'].shift(1)
    df['预警信号'] = (df['RSI'] 80) & (rsi_prev >= 80)

    return df

if __name__ == "__main__":

    df = pd.DataFrame(data)
    
    # 计算指标
    df = calculate_indicators(df)
    
    # 获取最近100天的信号
    recent_signals = df.tail(100)
    
    # 打印信号结果
    print("机会信号出现位置:")
    print(recent_signals[recent_signals['机会信号']])
    
    print("\n预警信号出现位置:")
    print(recent_signals[recent_signals['预警信号']])



顺势而为 长期坚持 波段做T

通达信指标安装技巧:

1、电脑端 打开通达信软件;点击“功能”-“公式系统”-“公式管理器”;选择“技术指标公式”-“新建”;填写名称并复制粘贴公式,填写必需的参数(如有);

2、点击右上角的”测试公式“对你的新增指标进行测试,测试结果会在最下方显示。测试通过的话,一定要记得去点击右上角的”确定“按钮,这样你的新增指标就完成了。


3、手机版 

方法:通达信找到“我的指标”→自编在云(选本地也行)→创建云指标 →填写指标信息→填写源码编译→右上角最右边点选  保存→回股票界面选择 技术指标→“我的指标”里 对应找到






学习分享



学术交流:我们专注于市场的学术交流与研究包括自用指标零滞后均线最速曲线,以及自动化程序量化学习。

分享知识:田都元帅,敬神常在,爱人如己,我为人人,与人为善,分享快乐!


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/182119
 
57 次点击