Py学习  »  Python

Python编程学动量自动化:主力趋势力度指标

量化对冲套利 • 2 月前 • 83 次点击  

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

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

01 指标图例


图一

图二

02 Py 源码






    
import pandas as pd
import numpy as np

def calculate_indicator(df):
    # 计算LIJIN2
    df['LLV24'] = df['low'].rolling(24).min()
    df['HHV24'] = df['high'].rolling(24).max()
    df['LIJIN2'] = (df['close'] - df['LLV24']) / (df['HHV24'] - df['LLV24']) * 2000
    
    # 计算力道(SMA)
    df['力道'] = df['LIJIN2'].ewm(alpha=1/3, adjust=False).mean()
    
    # 计算LIJIN3
    denominator = (df['high'] - df['low']) * 2 - abs(df['close'] - df['open'])
    df['LIJIN3'] = df['volume'] / np.where(denominator != 0, denominator, 1)
    
    # 计算LIJIN4
    condition1 = df['close'] > df['open']
    condition2 = df['close'] < df['open']
    
    numerator = np.where(
        condition1,
        df['LIJIN3'] * (df['high'] - df['low']),
        np.where(
            condition2,
            df['LIJIN3'] * (df['high'] - df['open'] + df['close'] - df['low']),
            df['volume'] / 2
        )
    )
    
    denominator_part = np.where(
        condition1,
        -df['LIJIN3'] * (df['high'] - df['close'] + df['open'] - df['low']),
        np.where(
            condition2,
            -df['LIJIN3'] * (df['high'] - df['low']),
            -df['volume'] / 2
        )
    )

    df['LIJIN4'] = (numerator / (denominator_part * -1)) - (denominator_part * -1) / numerator
    
    # 计算LIJIN5-LIJIN7
    df['LIJIN5'] = df['amount'] / (100 * df['volume'])
    df['LIJIN6'] = df['LIJIN5'].rolling(40).mean()
    df['LIJIN7'] = 100 * (df['close'] - df['LIJIN6']) / df['LIJIN6']
    
    # 计算底部追击
    df['底部追击'] = np.where(
        (df['LIJIN4'] > 0) & (df['LIJIN7'] -12) & (df['close']/df['open'] > 1.08),
        300,
        200
    )
    
    # 计算LIJIN8-LIJINA
    df['LLV34'] = df['low'].rolling(34).min()
    df['HHV34'] = df['high'].rolling(34).max()
    df['LIJIN8'] = (df['close'] - df['LLV34']) / (df['HHV34'] - df['LLV34']) * 100
    df['LIJIN9'] = df['LIJIN8'].ewm(alpha=1/3, adjust=False).mean()
    df['LIJINA'] = df['LIJIN9'].ewm(alpha=1/3, adjust=False).mean()
    df['D'] = df['LIJINA'].ewm(alpha=1/5, adjust=False).mean() * 20
    
    # 计算趋势线
    window = 55
    sma1 = ((df['close'] - df['low'].rolling(window).min()) / 
           (df['high'].rolling(window).max() - df['low'].rolling(window).min()) * 100)
    sma1 = sma1.rolling(5).mean()
    sma2 = sma1.rolling(3).mean()
    df[ '趋势线'] = 3 * sma1 - 2 * sma2
    df['趋势线'] = df['趋势线'].ewm(span=3, adjust=False).mean()
    
    # 计算BB信号
    df['LIJIN12'] = (df['趋势线'] - df['趋势线'].shift(1)) / df['趋势线'].shift(1) * 100
    df['BB'] = (df['趋势线'] <= 13) & (df['LIJIN12'] > 13)
    
    # 计算MACD相关
    ema13 = df['close'].ewm(span=13, adjust=False).mean()
    ema24 = df['close'].ewm(span=24, adjust=False).mean()
    df['LIJINDIF'] = ema13 - ema24
    df['LIJINDEA'] = df['LIJINDIF'].ewm(span=6, adjust=False).mean()
    df['LIJINMACD'] = (df['LIJINDIF'] - df['LIJINDEA']) * 3

    
    return df




03 指标源码



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

LIJIN2:=(CLOSE-LLV(LOW,24))/(HHV(HIGH,24


    
)-LLV(LOW,24))*2000;力道:SMA(LIJIN2,3,1),COLORLIGRAY;LIJIN3:=VOL/((HIGH-LOW)*2-ABS(CLOSE-OPEN));LIJIN4:=(IF(CLOSE>OPEN,LIJIN3*(HIGH-LOW),IF(CLOSE<OPEN,LIJIN3*(HIGH-OPEN+CLOSE-LOW),VOL/2))/(IF(CLOSE>OPEN,0-LIJIN3*(HIGH-CLOSE+OPEN-LOW),IF(CLOSE<OPEN,0-LIJIN3*(HIGH-LOW),0-VOL/2))*(-1))-IF(CLOSE>OPEN,0-LIJIN3*(HIGH-CLOSE+OPEN-LOW),IF(CLOSE<OPEN,0-LIJIN3*(HIGH-LOW),0-VOL/2))*(-1)/IF(CLOSE>OPEN,LIJIN3*(HIGH-LOW),IF(CLOSE<OPEN,LIJIN3*(HIGH-OPEN+CLOSE-LOW),VOL/2)));LIJIN5:=AMOUNT/(100*VOL);LIJIN6:=MA(LIJIN5,40);LIJIN7:=100*(CLOSE-LIJIN6)/LIJIN6;底部追击:=IF(LIJIN4>0&&LIJIN7<-12&&CLOSE/OPEN>1.08,300,200),COLORGREEN;STICKLINE(LIJIN4>0&&LIJIN7<-12&&CLOSE/OPEN>1.08,1200,200,10,0),COLORGREEN;LIJIN8:=(CLOSE-LLV(LOW,34))/(HHV(HIGH,34)-LLV(LOW,34))*100;LIJIN9:=SMA(LIJIN8,3,1);LIJINA:=SMA(LIJIN9,3,1);D:SMA(LIJINA,5,1)*20,COLORCYAN;LIJIN11:=3*SMA((C-LLV(L,55))/(HHV(H,55)-LLV(L,55))*100,5,1)-2*SMA(SMA((C-LLV(L,55))/(HHV(H,55)-LLV(L,55))*100,5,1),3,1);趋势线:=EMA(LIJIN11,3);LIJIN12:=(趋势线-REF(趋势线,1))/


    
REF(趋势线,1)*100;BB:(趋势线<=13&&LIJIN12>13)&&FILTER((趋势线<=13&&LIJIN12>13),10);量化:=(趋势线<=13&&LIJIN12>13),COLORRED;LIJINCC:=(趋势线>=90&&LIJIN12)&&FILTER((趋势线>=90&&LIJIN12),10);对冲:=FILTER(趋势线>=90&&LIJIN12&&CROSS(D,力道),5),COLORYELLOW;套利:对冲+1800,COLORYELLOW;中:(0+套利)/2,COLORGREEN;STICKLINE(力道>=&&力道>=REF(力道,1),中,力道+/10,0,0),COLORMAGENTA;STICKLINE(力道>=&&力道<REF(力道,1),中,力道+/10,0,0),COLORBROWN;STICKLINE(力道<&&力道>=REF(力道,1),中,力道-/10,0,0),COLORGREEN;STICKLINE(力道<&&力道<REF(力道,1),中,力道-/10,0,0),COLORBLUE;DRAWICON(量化,中,15);DRAWTEXT(BB,0,'买股'),COLORYELLOW;DRAWTEXT(对冲,力道,'顶'),COLORYELLOW;STICKLINE(对冲,力道,力道+0.01,2,0),COLORBLUE;DRAWICON(CROSS(D,中),中,13);DRAWICON(CROSS(中,力道),力道,2);LIJINDIF:=(EMA(CLOSE,13)-EMA(CLOSE,24));LIJINDEA:=(EMA(LIJINDIF,6));LIJINMACD:=(LIJINDIF-LIJINDEA)*3;红线:=IF(LIJINMACD>=0&&LIJINMACD>REF(LIJINMACD,1),中,DRAWNULL);青线:=IF(LIJINMACD>=0&&LIJINMACD<REF(LIJINMACD,1),中,DRAWNULL);粉线:=IF(LIJINMACD<0&&LIJINMACD>=REF(LIJINMACD,1),中,DRAWNULL);蓝线:=IF(LIJINMACD<0&&LIJINMACD<REF(LIJINMACD,1),中,DRAWNULL);STICKLINE(红线,200,250,1,0),COLORRED,LINETHICK1;STICKLINE(青线,200,250,1,0),COLORCYAN,LINETHICK1;STICKLINE(粉线,200,250,1,0),COLORMAGENTA,LINETHICK1;STICKLINE(蓝线,200,250,1,0),COLORBLUE,LINETHICK1;



学习分享



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

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


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