Python fengwo模块筹码峰函数(COST与WINNER)及调用通达信DLL实战示例解析
经常炒股的朋友们都知道,在使用通达信行情软件的时候,经常会使用各种各样的通达信公式进行选股,股票监测、预警,甚至使用指标进行排序,这些操作很方便,可以快速锁定我们想要的目标股票。
量化炒股者为了使用这些类似于通达信的指标,发明了麦语言。但是现在网上流传的麦语言库包括一直流行的TAlib库,均未对定义筹码峰COST、WINNER等函数,这两个函数对于计算股票平均成本和获利盘比例非常重要。网上有大量的关于COST、WINER的Python算法实现教程。但实际计算结果不是和通达信、同花顺等软件的计算结果相差甚远,就是计算速度爆慢,用之对全市场选一次股可能已经收市。
为此,fengwo模块实现了这两个函数,甚至实现了对通达信公式dll的调用(通达信dll都是32位动态链接库,即便是64位fengwo模块也可以直接绑定调用)。
fengwo模块式采用C/C++语言编译制作,运行效率极高,比如SLOPE函数,比循环调用numpy的相关函数快很多;破除了Python全局线程锁(GIL)的限制,所有函数均可在多线程环境下发挥并行计算的优势(包含64位python对32位通达信dll的调用)。所有基础函数均支持变量,比如MA,EMA,SMA函数的周期值均可使用序列值计算,全面模仿通达信公式系统的设计,使得通达信公式可以通过较小的改造就可以使用到Python量化程序上来。
fengwo模块的安装:
pip install fengwo
COST函数:
fengwo.COST(HIGH,LOW,VOL,Turnrate,percent)
Turnrate为换手率,比如当日5%的换手应取值0.05,当日10%的换手应取值0.1。(注意:换手率即成交量/流通股本,但是由于流通股本可能发生变化,所以这里采用了即输入成交量VOL,又输入换手率的方式)
percent为获利比率,要获得平均成本则可以取值50,要获取使得90%的筹码获利价格,则取值90。
import fengwo
df=pd.read_csv(os.path.join(HERE,'603065.csv'))
#计算90%获利盘的价格
print(fw.COST(df['high'],df['low'],df['volume'],df['TurnoverRate']/100,90))
#计算每日平均成本:
print(fw.COST(df['high'],df['low'],df['volume'],df['TurnoverRate']/100,50))
WINNER函数:
fengwo.WINNER(HIGH,LOW,VOL,Turnrate,price)
Turnrate为换手率,同COST函数
price即输入的价格,在实际使用过程中,常常取CLOSE(收盘价),即获得该价格处的获利比例。
import fengwo
df=pd.read_csv(os.path.join(HERE,'603065.csv'))
#计算每日平均成本:
print(fw.WINNER(df['high'],df['low'],df['volume'],df['TurnoverRate']/100,df['close'])
通达信DLL操作:
1、同样要先绑定dll文件
fengwo.binddll(dllno,dllpath)
dllno即绑定dll的号数,同通达信,取值1-10
dllpath:即通达信dll文件的路径,这个dll文件必须能够被通达信软件所使用
返回值:绑定成功返回True,失败则返回失败原因:比如说不是通达信的dll
2、按照通达信调用dll文件的方式调用
fengwo.TDXDLL1(fucno,ina,inb,inc)
fucno:调用通达信dll的功能号
ina,inb,inc为输入的值,其中ina必须为序列值,inb,inc可以为序列值,也可以是常量
import fengwo
if(fw.binddll(1,os.path.join(HERE,'todayKCount.dll'))):
print(fw.TDXDLL1(5,df['close'],90,20))
程序实例下载:
fwjc.rarfengwo.run/static/upload/fwjc.rar
全文示例:
import fengwo as fw
fw.showMsg(False)
import pandas as pd
import os
HERE=os.path.abspath(os.path.dirname(__file__))
df=pd.read_csv(os.path.join(HERE,'603065.csv'))
#筹码峰相关函数实例
def cmfsl():
#计算90%获利盘的价格
print(fw.COST(df['high'],df['low'],df['volume'],df['TurnoverRate']/100,90))
#计算收盘价的获利比例
print(fw.RD(fw.WINNER(df['high'],df['low'],df['volume'],df['TurnoverRate']/100,df['close']),2))
def tdxdllsl():
if(fw.binddll(1,os.path.join(HERE,'todayKCount.dll'))):
print(fw.TDXDLL1(5,df['close'],90,20))
if __name__=="__main__":
#筹码峰相关函数实例
cmfsl()
#调用通达信DLL函数实例
tdxdllsl()
欢迎大家安装使用fengwo模块!
pip install fengwo
作者:kogj