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
  • fengwo模块支持Python3.4~Python3.12的32位和64位版本(暂仅支持Windows版,Linux版开发中,linux版不支持对通达信dll文件的调用)

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.rar​fengwo.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
  • 25
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以帮您提供一些思路,但需要注意的是,股票软件的cost函数不是一个标准的函数,因此实现方式可能会有所不同,需要根据具体的需求进行定制化开发。 在一般的股票软件中,cost函数通常是用来计算股票或其他证券的交易成本的。成本主要包括以下几个方面: 1. 手续费:包括交易手续费、印花税等。 2. 滑点成本:由于市场波动等原因,实际成交价格可能与委托价格不一致,这部分成本由滑点成本承担。 3. 利息成本:如果采用融资融券等方式购买证券,则需要支付利息成本。 WINNER函数通常用于计算股票的盈利能力。具体实现方式因软件而异,但通常考虑以下几个因素: 1. 股票买入价格 2. 股票当前价格 3. 股票持有时间 4. 手续费等成本 以下是一个简单的C代码实现可能会是这样的: ```c #include <stdio.h> float cost(float price, int amount) { // 假设手续费为万3,滑点成本为0.5元,印花税为万1 float fee_rate = 0.0003; float slippage = 0.5; float stamp_duty = 0.0001; float total_cost = price * amount * (1 + fee_rate) + slippage * amount + stamp_duty * amount; return total_cost; } float winner(float buy_price, float current_price, int hold_days) { // 假设持有期间无利息成本 float profit = (current_price - buy_price) / buy_price; float annualized_profit = profit / (hold_days / 365.0); return annualized_profit; } int main() { float buy_price = 10.0; float current_price = 12.0; int amount = 1000; int hold_days = 30; float cost_value = cost(buy_price, amount); float winner_value = winner(buy_price, current_price, hold_days); printf("交易成本:%f\n", cost_value); printf("盈利能力:%f\n", winner_value); return 0; } ``` 需要注意的是,这只是一个简单的实现,实际开发中需要根据具体需求进行适当的修改和完善。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值