import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.colors import LinearSegmentedColormap
def FORCAST(series, n):
"""线性回归预测函数"""
result = np.full(len(series), np.nan)
for i in range(n, len(series)):
x = np.arange(n)
y = series[i-n:i]
A = np.vstack([x, np.ones(n)]).T
b, a = np.linalg.lstsq(A, y, rcond=None)[0]
result[i] = a + b * (n-1) # 主力筹码控盘指标公式通达信源码预测下一个值
return result
def EMA(series, n):
"""指数移动平均"""
return series.ewm(span=n, adjust=False).mean()
def calculate_lijin(df):
"""计算李津主力指标"""
# 计算中间变量
df['LIJINW1'] = (df['close']*2 + df['high'] + df['low']) / 4 * 10
df['FC13'] = FORCAST(df['LIJINW1'].values, 13)
df['FC34'] = FORCAST(df['LIJINW1'].values, 34)
df['LIJINW2'] = df['FC13'] - df['FC34']
df['LIJINW3'] = FORCAST(df['LIJINW2'].values, 5)
df['LIJINW4'] = 2 * (df['LIJINW2'] - df['LIJINW3']) * 5.5
# 主力筹码控盘指标公式通达信源码计算主力吃吐线
df['李津主力吃'] = np.where(df['LIJINW4'] >= 0, df['LIJINW4'], 0)
df['李津主力吐'] = np.where(df['LIJINW4'] <= 0, df['LIJINW4'], 0)
# 计算信号点
df['吃信号'] = (df['李津主力吃'].shift(1) <=
0.5) & (df['李津主力吃'] > 0.5)
df['吐信号'] = (df['李津主力吐'].shift(1) >= -0.5) & (df['李津主力吐'] -0.5)
return df
def plot_lijin(df):
"""绘制李津主力指标图"""
plt.figure(figsize=(14, 8))
# 主力筹码控盘指标公式通达信源码创建渐变颜色
red_cmap = LinearSegmentedColormap.from_list('red_band', ['#a00000', '#000000'], N=6)
green_cmap = LinearSegmentedColormap.from_list('green_band', ['#008cf0', '#000000'], N=6)
# 绘制主力吃区域(红色系渐变)
for i, factor in enumerate([1.0, 0.9, 0.8, 0.7, 0.6, 0.5]):
band = df['李津主力吃'] * factor
plt.fill_between(df.index, 0, band, color=red_cmap(i/5), alpha=0.8)
# 绘制主力吐区域(绿色系渐变)
for i, factor in enumerate([1.0, 0.9, 0.8, 0.7, 0.6, 0.5]):
band = df['李津主力吐'] * factor
plt.fill_between(df.index, band, 0, color=green_cmap(i/5), alpha=0.8)
# 绘制零线和吃货线
plt.axhline(0, color='gray', linestyle='-', alpha=0.7)
plt.axhline(6, color='#ff80ff', linewidth=2, label='李津主力吃货线')
# 主力筹码控盘指标公式通达信源码绘制信号标记
eat_signals = df[df['吃信号']]
spit_signals = df[df['吐信号']]
plt.scatter(eat_signals.index, [0]*len(eat_signals), marker='^',
color='red', s=100, label='买入信号', zorder=5)
plt.scatter(spit_signals.index, [0]*len(spit_signals), marker='v',
color='green', s=100, label='卖出信号', zorder=5)
# 主力筹码控盘指标公式通达信源码设置图表属性
plt.title('李津主力指标', fontsize=
16)
plt.ylabel('主力强度', fontsize=12)
plt.legend()
plt.grid(alpha=0.3)
plt.tight_layout()
# 显示图表
plt.show()