Py学习  »  Python

Python编程学动量自动化:龙头主升浪主图指标公式

量化对冲套利 • 1 年前 • 421 次点击  

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

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

01 指标图例


图一

图二

02 Py源码






    
import pandas as pd
import numpy as np
import mplfinance as mpf
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import yfinance as yf

# 定义EMA计算函数
def EMA(series, window):
    return series.ewm(span=window, adjust=False).mean()

# 计算MACD相关指标
SHORT, LONG, M = 12269
df['EMA12'] = EMA(df['Close'], SHORT)
df['EMA26'] = EMA(df['Close'], LONG)
df['LIJINW1'] = df['EMA12'] - df['EMA26']
df['LIJINW2'] = EMA(df['LIJINW1'], M)

# 计算买卖信号
df['金叉'] = (df['LIJINW1'] > df['LIJINW2']) & (df['LIJINW1'].shift(1) <= df['LIJINW2'].shift(1))
df['死叉'] = (df['LIJINW1'] < df['LIJINW2']) & (df['LIJINW1'].shift(1) >= df['LIJINW2'].shift(1))

# 计算RSI类指标
N1, N2 = 714
df['LC'] = df['Close'].shift(1)
df['变化'] = df['Close'] - df['LC']
df['正变化'] = df['变化'].clip(lower=0)
df['MEMA正7'] = EMA(df['正变化'], N1)
df['MEMA绝7'] = EMA(df['变化'].abs(), N1)
df['LIJINWE1'] = df['MEMA正7'] / df['MEMA绝7'] * 100
df['MEMA正14'] = EMA(df['正变化'], N2)
df['MEMA绝14'] = EMA(df['变化'].abs(), N2)
df['LIJINWE2'] = df['MEMA正14'] / df['MEMA绝14'] * 100

# 计算均线
df['MA3'] = EMA(df[ 'Close'], 3)
df['MA26'] = EMA(df['Close'], 26)

# 准备绘图数据
df = df.dropna()
df['Date'] = df.index
df['Date_num'] = df['Date'].map(mdates.date2num)

# 创建自定义K线颜色
colors = []
for i in range(len(df)):
    if df['LIJINW1'].iloc[i] > df['LIJINW2'].iloc[i]:
        colors.append('red')
    else:
        colors.append('green')

# 创建绘图对象
fig, ax = plt.subplots(figsize=(158))

# 绘制K线
for i in range(len(df)):
    date = df['Date_num'].iloc[i]
    open_p = df['Open'].iloc[i]
    close = df['Close'].iloc[i]
    high = df['High'].iloc[i]
    low = df['Low'].iloc[i]
    color = colors[i]
    
    # 绘制影线
    ax.plot([date, date], [low, high], color=color, lw=1)
    
    # 绘制实体
    if close > open_p:
        ax.fill_between([date-0.2, date+0.2], open_p, close, color=color, edgecolor=color)
    else:
        ax.fill_between([date-0.2, date+0.2], close, open_p, color=color, edgecolor=color)

# 绘制均线
ax.plot(df['Date_num'], df['MA3'], color='white', lw=2, label='MA3')
ax.plot(df['Date_num'], df['MA26'], color='yellow', lw=2, label='MA26')

# 标记买卖信号
for idx in df[df['金叉']].index:
    ax.text(mdates.date2num(idx), df.loc[idx, 'Low'], '买'
            color='white', ha='center', va='bottom', fontsize=10)
for idx in df[df['死叉']].index:
    ax.text(mdates.date2num(idx), df.loc[idx, 'High'], '卖'
            color='yellow', ha='center', va='top', fontsize=10)

# 设置日期格式
ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d' ))
plt.xticks(rotation=45)
plt.title(f'{symbol} 股票分析图表')
plt.xlabel('日期')
plt.ylabel('价格')
plt.legend()

plt.tight_layout()
plt.show()



1. 参数定义:

SHORT:=12;LONG:=26;M:=9;N1:=7;N2:=14;M1:=75;M2:=25;

2. VAR1和VAR2的计算:

VAR1 := EMA(CLOSE,SHORT) - EMA(CLOSE,LONG);VAR2 := EMA(VAR1,M);

3. 金叉死叉信号:


VAR8 := CROSS(VAR1,VAR2);VAR9 := CROSS(VAR2,VAR1);

4. RSI计算:


LC := REF(CLOSE,1);RSI1:SMA(MAX(CLOSE-LC,0),N1,1)/SMA(ABS(CLOSE-LC),N1,1)*100;

5. K线多空染色部分:

STICKLINE(VAR1>VAR2, CLOSE, OPEN, 3.50), COLORRED;STICKLINE(VAR1>VAR2, HIGH, LOW, 00), COLORRED;STICKLINE(VAR1<=VAR2, CLOSE, OPEN, 3.50), COLORGREEN;STICKLINE(VAR1<=VAR2, HIGH, LOW, 00), COLORBLUE;


6. 最后是买卖信号的标注:

DRAWTEXT(VAR8LOW-MINPRICE*3'买'), COLORWHITE;DRAWTEXT(VAR9HIGH+MINPRICE*3'卖'), COLORYELLOW;




03 指标源码


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

SHORT:=12;LONG:=26;M:=9;N1:=7;N2:=14;M1:=75;M2:=25;LIJINW1:=EMA(CLOSE,SHORT)-EMA(CLOSE,LONG);LIJINW2:=EMA(LIJINW1,M);LIJINW8:=CROSS(LIJINW1,LIJINW2);LIJINW9:=CROSS(LIJINW2,LIJINW1);LC:=REF(CLOSE,1);LIJINWE1:=MEMA(MAX(CLOSE-LC,0),N1)/MEMA(ABS(CLOSE-LC),N1)*100;LIJINWE2:=MEMA(MAX(CLOSE-LC,0),N2)/MEMA(ABS(CLOSE-LC),N2)*100;STICKLINE(LIJINW1>LIJINW2,CLOSE,OPEN,3,0),COLORRED;STICKLINE(LIJINW1>LIJINW2,HIGH,LOW,0,0),COLORRED;STICKLINE(LIJINW1<=LIJINW2,HIGH,LOW,0,1),COLORGREEN;STICKLINE(LIJINW1<=LIJINW2,CLOSE,OPEN,3,1),COLORGREEN;MA3:EMA(CLOSE,3),COLORWHITE,LINETHICK2;MA26:EMA(CLOSE,26),COLORYELLOW,LINETHICK2;DRAWTEXT(LIJINW8,LOW,'买'),COLORWHITE;DRAWTEXT(LIJINW9,HIGH,'卖'),COLORYELLOW;

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





学习分享



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

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


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/182387