社区所有版块导航
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

DeepSeek大模型:通达信基于主力异动关键K线因子指标量化Python实现

量化对冲套利 • 6 天前 • 32 次点击  

兄弟们,今天给大家说说一个挺有意思的技术分析指标,这玩意儿能帮咱们在复杂的市场里找找机会,看看有没有啥关键的信号能让我们少走弯路。

关键K线算法

涨停板:要是看到品种直接涨停了,那肯定得注意!这说明市场情绪挺嗨的,说不定有大资金在里头搞事儿。

双倍量:要是成交量突然翻倍,那肯定不简单!这说明双方都很积极,资金在动,说不定是个好机会。

建仓量、拉升量、试盘量:这几个信号就更讲究了,建仓量说明主力可能在悄悄进货,拉升量就是主力开始往上抬价了,试盘量呢,就是主力在试探市场反应,看看能不能继续往上干。

判断底部方法

位置要求:得看看价格是不是在相对低位,要是离13日均线挺近,涨幅又不大,那说不定就是个机会。

红线上行:13日均线要是往上走,那趋势肯定不差,说明后面可能有戏。

评分系统:这个评分系统挺有意思,它把均线、MACD、KDJ这些指标综合起来打个分,分数越高,市场越强,心里就更有底。

逻辑总结

关键K线:就是把上面那些信号结合起来,看看是不是符合关键K线的特征。要是符合了,那可能就是个机会。

底部判断:从价格位置、均线趋势、成交量这些维度看看是不是处于底部区域。

要是关键K线出来了,说不定市场就要动起来了,到时候大家自己看着办。

指标创新意义

趋势判断:用均线、MACD这些指标看看市场是往上走还是往下走。

资金流向:通过成交量、涨停板这些指标看看资金是进还是出。

风险控制:位置要求和XX评分这些指标能帮咱们控制风险,别在高位接盘。

通达信关键K线主图风控算法公式
ZTJ:=ZTPRICE(REF(C,1),0.1);DIF:=EMA(CLOSE,12)-EMA(CLOSE,26);DEA:=EMA(DIF,9);MACD:=(DIF-DEA)*2;XG1:=MACD>0;K线实体:=ABS(C-O);LIJIN1:=IF(MA(C,5)>MA(C,10),20,0);LIJIN2:=IF(MA(C,20)>MA(C,60),10,0);LIJIN3:=IF(KDJ.J>KDJ.K,10,0);LIJIN4:=IF(MACD.DIF>MACD.DEA,10,0);LIJIN5:=IF(MACD.MACD>0,10,0);LIJIN6:=IF(V>MA(V,60),10,0);LIJIN7:=IF(WINNER(C)>0.5,10,0);LIJIN8:=IF(C/REF(C,1)>1.03,10,0);XX:=LIJIN1+LIJIN2+LIJIN3+LIJIN4+LIJIN5+LIJIN6+LIJIN7+LIJIN8;涨停板1:=C=H&&C/REF(C,1)>1.0975&&C/REF(C,1)<1.11&&FINANCE(3)=1&&C=ZTJ;涨停板2:=C=H&&C/REF(C,1)>1.1985&&C/REF(C,1)<1.21&&FINANCE(3)=3;涨停板:=涨停板1||涨停板2;双倍量:=(V/REF(MA(V,5),1)>=2&&V/REF(V,1)>=1.5||V/REF(V,1)>=2)&&C>O&&H=HHV(H,6)&&C>EMA(C,13)&&V=HHV(V,6);建仓量:=TFILTER(双倍量&&K线实体>REF(K线实体,1),EVERY(V5),2),1);JCZQ:=BARSLAST(建仓量);拉升量:=双倍量&&NOT(建仓量)&&EXIST(建仓量,2);试盘量:=建仓量||拉升量;位置要求:=L/EMA(C,13)<1.05;


    
红线上行:=EMA(C,13)>=REF(EMA(C,13),1);SPX0:=H/REF(C,1)>=1.03&&试盘量&&H/C>1.005&&C/REF(C,1)>1.015&&位置要求&&FINANCE(3)=1&&XX>=40;SPLIJIN1:=H/REF(C,1)>=1.05&&试盘量&&H/C>1.005&&C/REF(C,1)>1.015&&位置要求&&(FINANCE(3)=3||FINANCE(3)=4)&&XX>=40;SPLIJIN2:=SPX0||SPLIJIN1;SPLIJIN3:=SPLIJIN2&&COUNT(SPLIJIN2,8)&&COUNT(涨停板,2)=0;试盘K线:=FILTER(SPLIJIN3,5);建仓:=FILTER(涨停板&&建仓量&&COUNT(涨停板,3)=1,10);关键K:=试盘K线||建仓;STICKLINE(关键K,H,L,0,0),COLORFF55FF;STICKLINE(关键K,C,O,3.1,0),COLOR880088;STICKLINE(关键K,C,O,2.6,0),COLORAA00AA;STICKLINE(关键K,C,O,1.9,0),COLORCC00CC;STICKLINE(关键K,C,O,1.1,0),COLOREE00EE;STICKLINE(关键K,C,O,0.2,0),COLORFF44FF;DRAWTEXT(关键K,L,'★关键K'),COLORYELLOW;DRAWICON(关键K,L,9);A1X:=关键K;IF(A1X>=0&&BARSLAST(CROSS(A1X,0.5))>0,REF(L,BARSLAST(CROSS(A1X,0.5))),DRAWNULL),LINETHICK4,COLORMAGENTA{,LINETHICK2};
关键K线主图风控算法公式Python
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

df['MA5'] = df[ 'C'].rolling(window=5).mean()
df['MA10'] = df['C'].rolling(window=10).mean()
df['MA20'] = df['C'].rolling(window=20).mean()
df['MA60'] = df['C'].rolling(window=60).mean()
df['EMA13'] = df['C'].ewm(span=13, adjust=False).mean()
df['EMA12'] = df['C'].ewm(span=12, adjust=False).mean()
df[ 'EMA26'] = df['C'].ewm(span=26, adjust=False).mean()
df['DIF'] = df['EMA12'] - df['EMA26']
df['DEA'] = df['DIF'].ewm(span=9, adjust=False).mean()
df['MACD'] = (df['DIF'] - df['DEA']) * 2
df['K线实体'] = (df['C'] - df['O']).abs()
df['WINNER'] = (df['C'] > df[ 'C'].shift(1)).astype(int)

# 计算涨停板
df['涨停板1'] = (df['C'] == df['H']) & (df['C'] / df['C'].shift(1) > 1.0975) & \
               (df['C'] / df['C'].shift(1) 1.11) & (df['FINANCE3'] == 1) & (df['C'] == df['ZTJ'])
df['涨停板2'] = (df['C'] == df[ 'H']) & (df['C'] / df['C'].shift(1) > 1.1985) & \
               (df['C'] / df['C'].shift(1) 1.21) & (df['FINANCE3'] == 3)
df['涨停板'] = df['涨停板1'] | df['涨停板2']

# 计算双倍量
df['双倍量'] = ((df['V'] / df['MA5'].shift(1) >= 2) & (df[ 'V'] / df['V'].shift(1) >= 1.5) | \
               (df['V'] / df['V'].shift(1) >= 2)) & (df['C'] > df['O']) & \
               (df['H'] == df['H'].rolling(window=6).max()) & (df['C'] > df['EMA13']) & \
               (df['V'] == df['V'].rolling(window=6).max())

# 计算建仓量
df['建仓量' ] = df['双倍量'] & (df['K线实体'] > df['K线实体'].shift(1)) & \
               (df['V'] < df['MA5']).rolling(window=2).all()

# 计算拉升量
df['拉升量'] = df['双倍量'] & ~df['建仓量'] & df['建仓量'].rolling(window=2).any()

# 计算试盘量
df['试盘量'] = df['建仓量'] | df['拉升量']

# 计算位置要求
df['位置要求'] = (df['L' ] / df['EMA13'] 1.05)

# 计算红线上行
df['红线上行'] = df['EMA13'] >= df['EMA13'].shift(1)

# 计算SPX0、SPLIJIN1、SPLIJIN2、SPLIJIN3
df['SPX0'] = (df['H'] / df['C'].shift(1) >= 1.03) & df['试盘量'] & (df['H'] / df['C'] > 1.005) & \
             (df['C'] / df['C'].shift(1) >  1.015) & df['位置要求'] & (df['FINANCE3'] == 1) & \
             (df['XX'] >= 40)
df['SPLIJIN1'] = (df['H'] / df['C'].shift(1) >= 1.05) & df['试盘量'] & (df['H'] / df['C'] > 1.005) & \
                 (df['C'] / df['C'].shift(1) > 1.015) & df['位置要求' ] & \
                 ((df['FINANCE3'] == 3) | (df['FINANCE3'] == 4)) & (df['XX'] >= 40)
df['SPLIJIN2'] = df['SPX0'] | df['SPLIJIN1']
df['SPLIJIN3'] = df['SPLIJIN2'] & df['SPLIJIN2'].rolling(window=8).sum() > 0 & \
                 (df['涨停板'].rolling(window=2).sum() == 0)

# 计算试盘K线
df['试盘K线'] = df[ 'SPLIJIN3'].rolling(window=5).sum() > 0

# 计算建仓
df['建仓'] = df['涨停板'] & df['建仓量'] & (df['涨停板'].rolling(window=3).sum() == 1)

# 计算关键K
df['关键K'] = df['试盘K线'] | df['建仓']

# 绘制关键K线
plt.figure(figsize=(147))
plt.plot(df.index, df['C'], label='Close Price')
plt.scatter(df[df['关键K' ]].index, df.loc[df['关键K'], 'C'], color='purple', label='关键K线', zorder=5)
plt.legend()
plt.show()

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






学习分享



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

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

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