自己做量化交易软件(24)小白量化增强仿通达信财务基本数据公式

116 篇文章 122 订阅
116 篇文章 46 订阅

自己做量化交易软件(24)小白量化增强仿通达信财务基本数据公式
通达信公式指标中有很多关于系统或基本面的函数,小白量化公式系统只有关于行情方面的公式基本函数。为了便于移植更多的自编通达信公式指标,我们给大家介绍新一代小白量化系统框架中的增强仿通达信公式功能。
这个系统这个要完全依赖通达信行情,来获取股票行情和财务基本数据。
首先引入小白增强公式库HP_tdxgs模块。

import HP_tdx as htdx
from HP_formula import *
import HP_tdxgs as hgs

在HP_tdxgs模块中,我们已经定义了很多基本函数。

def WEEKDAY():
    now = dt.datetime.now()
    return now.weekday()

#取得当前客户端机器为星期几(1,2,3,4,5,6,0)
def MACHINEWEEK():
    return dt.datetime.now().weekday()    

#取得当前客户端机器从1900以来的的年月日,
def MACHINEDATE():
    today=dt.date.today()   #获取今天日期
    date=today.year*10000+today.month*100+today.day-19000000
    return date

#取得当前客户端机器的时间,比如11:01:15时为110115
def MACHINETIME():
    today=dt.datetime.now()
    time=today.hour*10000+today.minute*100+today.second
    return time

def FINANCE(n):
    global Cw,Base2
    global Mydf
    global Close,Low,High,Open,Vol,Amo
    global Vol
    global Period,Date,Time,Year,Month,Weekday,Day,Hour,Minute
    global Code,Market,Setcode,Name,Py
    global Mindiff,Tqflag,Useddatanum,Multiplier
    global Totalcapital,Capital,Type2
    if n==1:
        return Cw['zongguben' ]
    elif n==2:
        return Setcode
    elif n==3:
        return Base2['type2']
    elif n==4:
        return 0
    elif n==5:
        if Base2['type2']==5:
            return 1
        else:
            return 0
    elif n==6:
        if Cw['bgu']>0:
            return 1
        else:
            return 0
    elif n==7:
        return Capital
    elif n==8:
        return Cw['gudongrenshu' ]
    elif n==9:
        return (Cw['zongzichan']-Cw['jingzichan'])/Cw['zongzichan']
    elif n==10:
        return Cw['zongzichan']
    elif n==11:
        return Cw['liudongzichan']
    elif n==12:
        return Cw['gudingzichan']
    elif n==13:
        return Cw['wuxingzichan']
    elif n==14:
        return 0
    elif n==15:
        return Cw['liudongfuzhai']
    elif n==16:    
        return 0
    elif n==17:
        return Cw['zibengongjijin']
    elif n==18: #每股公积金
        return Cw['zibengongjijin']/Cw['zongguben']
    elif n==19:
        return Cw['jingzichan']/Cw['zongguben']
    elif n==20:
        return Cw['zhuyingshouru']
    elif n==21: #营业成本
        return Cw['zhuyingshouru']-Cw['zhuyinglirun']
    elif n==22:
        return Cw['zhuyingshouru']
    elif n==23: #营业利润
        return Cw['zhuyinglirun']
    elif n==24: #投资收益
        return Cw['touzishouyu']    
    elif n==25: #经营现金流量
        return Cw['jingyingxianjinliu']      
    elif n==26: #总现金流量
        return Cw['zongxianjinliu']         
    elif n==27: #存货
        return Cw['cunhuo' ]
    elif n==28: #营业利润
        return Cw['zhuyinglirun']
    elif n==29: #税后利润
        return Cw['shuihoulirun' ]    
    elif n==30: #净利润
        return Cw['jinglirun' ]      
    elif n==31: #未分配利润
        return Cw['weifenpeilirun' ]        
    elif n==32: #每股未分配利润
        return Cw['zhuyingshouru']/Cw['zongguben']
    elif n==33: # 每股收益(折算为全年收益),对于沪深品种有效
        return Cw['jinglirun' ]/Cw['zongguben']
    elif n==34: #每股净资产
        return Cw['meigujingzichan' ]    

    return None


def CW():
    return Cw

def MYDF():
    return Mydf

def BASE2():
    return Base2

def CODE():
    return Code

def NAME():
    return Name

def PY():
    return Py

def MARKET():
    return Market

def SETCODE():
    return Market

def PERIOD():
    return Period

def TOTALCAPITAL():
    return Totalcapital

def  CAPITAL():
    return Capital

def TYPE2():
    return Type2

def CLOSE():
    return Close

def C():
    return Close

def LOW():
    return Low

def L():
    return Low

def HIGH():
    return High

def H():
    return High

def OPEN():
    return Open

def O():
    return Open

def VOL():
    return Vol

def V():
    return Vol

def VOLUME():
    return Vol

def AMO():
    return Amo

def AMOUNT():
    return Amo

def MINDIFF():
    return Mindiff

def TQFLAG():
    return Tqflag

def USEDDATANUM():
    return Useddatanum

def MULTIPLIER():
    return Multiplier

def DATE():
   return Date

def TIME():
    return Time

def YEAR():
    return Year

def MONTH():
    return Month

def DAY():
    return Day

def HOUR():
    return Hour

def MINUTE():
    return Minute

这些函数,用户使用时要再封装一次。
其次,获取股票的财务数据信息。
财务信息基本公式要完全依赖通达信行情,获取股票行情和财务基本数据。
这里要用函数get_security_bars(nCategory=4,nMarket =-1,code=‘000776’,
nStart=0, nCount=240)
来获取股票行情数据,在读取股票行情时,顺便获取该股票的基本数据。

最后就可以在用户自编公式中使用这些基本财务数据函数了。
下面直接给出公式演示代码。

#增强通达信公式演示
'''
独狼荷蒲qq:2886002
通通小白python量化群:524949939
微信公众号:独狼股票分析
这个要完全依赖通达信行情,获取股票行情和财务基本数据.
用get_security_bars(nCategory=4,nMarket =-1,code='000776',\
                    nStart=0, nCount=240)
在读取股票行情时,顺便获取股票的基本数据.
下面是一个演示.
'''

import HP_tdx as htdx
from HP_formula import *
import HP_tdxgs as hgs


def FINANCE(x):
    return hgs.FINANCE(x)

tdxapi=htdx.TdxInit(ip='180.153.18.171')
df=hgs.get_security_bars()
print('净利润: ',FINANCE(30))  #净利润

程序最后运行结果如下:

净利润:  2070542.25
小白量化学习-自创指标设计 一、准备工作 1、首先把“HP_formula.py”文件复制到自己的工程目录中。 2、在新文件开始增加下面4条语句。 import numpy as np import pandas as pd from HP_formula import * import tushare as ts 二、对数据预处理 我们采用与tushare旧股票数据格式。 #首先要对数据预处理 df = ts.get_k_data('600080',ktype='D') mydf=df.copy() CLOSE=mydf['close'] LOW=mydf['low'] HIGH=mydf['high'] OPEN=mydf['open'] VOL=mydf['volume'] C=mydf['close'] L=mydf['low'] H=mydf['high'] O=mydf['open'] V=mydf['volume'] 三、仿通达信或大智慧公式 通达信公式转为python公式的过程。 1.‘:=’为赋值语句,用程序替换‘:=’为python的赋值命令‘='。 2.‘:’为公式的赋值带输出画线命令,再替换‘:’为‘=’,‘:’前为输出变量,顺序写到return 返回参数中。 3.全部命令转为英文大写。 4.删除绘图格式命令。 5.删除掉每行未分号; 。 6.参数可写到函数参数表中.例如: def KDJ(N=9, M1=3, M2=3): 例如通达信 KDJ指标公式描述如下。 参数表 N:=9, M1:=3, M2:=3 RSV:=(CLOSE-LLV(LOW,N))/(HHV(HIGH,N)-LLV(LOW,N))*100; K:SMA(RSV,M1,1); D:SMA(K,M2,1); J:3*K-2*D; # Python的KDJ公式 def KDJ(N=9, M1=3, M2=3): RSV = (CLOSE - LLV(LOW, N)) / (HHV(HIGH, N) - LLV(LOW, N)) * 100 K = SMA(RSV,M1,1) D = SMA(K,M2,1) J = 3*K-2*D return K, D, J #----------------------------------- #根据上面原理,我们把大智慧RSI指标改 # 为Python代码,如下。 def RSI(N1=6, N2=12, N3=24): """ RSI 相对强弱指标 """ LC = REF(CLOSE, 1) RSI1 = SMA(MAX(CLOSE - LC, 0), N1, 1) / SMA(ABS(CLOSE - LC), N1, 1) * 100 RSI2 = SMA(MAX(CLOSE - LC, 0), N2, 1) / SMA(ABS(CLOSE - LC), N2, 1) * 100 RSI3 = SMA(MAX(CLOSE - LC, 0), N3, 1) / SMA(ABS(CLOSE - LC), N3, 1) * 100 return RSI1, RSI2, RSI3 四、使用公式并绘图 #假定我们使用RSI指标 r1,r2,r3=RSI() mydf = mydf.join(pd.Series( r1,name='RSI1')) mydf = mydf.join(pd.Series( r2,name='RSI2')) mydf = mydf.join(pd.Series( r3,name='RSI3')) mydf['S80']=80 #增加上轨80轨迹线 mydf['X20']=20 #增加下轨20轨迹线 mydf=mydf.tail(100) #显示最后100条数据线 #下面是绘线语句 mydf.S80.plot.line() mydf.X20.plot.line() mydf.RSI1.plot.line(legend=True) mydf.RSI2.plot.line(legend=True) mydf.RSI2.plot.line(legend=True) 不懂就看我的博客 https://blog.csdn.net/hepu8/article/details/93378543
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荷蒲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值