大智慧、通达信winner函数python代码实现

大智慧、通达信软件,公式中有一个winner函数,函数的作用是计算收盘获利比率。即计算按照目前收盘价,计算有多少比例持仓是盈利的。要计算获利比率,首先得计算筹码分布,就是持仓价格分布。由于无法知道真实的交易情况,只能大致的估计。首先举个例子,假如某只股票有1000万股,第一天平均交易价格10元,第二天换手率20%,平均交易价格11元,那第二天的筹码分布为,10元:1000 * (1 - 0.2)=800万,11元:1000 * 0.2 = 200万。第三天换手率30%,平均交易价格12元,那第三天的筹码分布为,10元:1000 * (1 - 0.2)* (1 - 0.3)= 560万,11元:1000 * 0.2 * (1 - 0.3) = 140万,12元:1000 * 0.3 = 300万,以此类推。代码如下:

def winner_core(ContextInfo, close):
	close_price = close[-1]
	
	#获取上市日期
	#ipo_date = ContextInfo.get_open_date(ContextInfo.get_universe()[0])
	df = ContextInfo.get_market_data(['volume', 'amount'], stock_code = ContextInfo.get_universe(), skip_paused = True, period = '1d', dividend_type = 'front', end_time = close.index[-1], count = 250)
	df = df.loc[df['volume'] != 0]
	df['mean'] = df['amount'] / df['volume'] / 100
	turnover_rate = ContextInfo.get_turnover_rate(ContextInfo.get_universe(), df.index[0], df.index[-1])
	df['turnover'] = turnover_rate['000001.SZ'].values
	df['turnover'][0] = 0
	#1减去换手率
	df['1_turnover'] = 1 - df['turnover']
	df['2_turnover'] = df['1_turnover'][::-1].values
	df['3_turnover'] = df['2_turnover'].shift(periods = 1)
	df['3_turnover'][0] = 1
	#print(df[['1_turnover', '2_turnover', '3_turnover']])
	df['4_turnover'] = df['3_turnover'].cumprod()[::-1].values
	df['turnover'][0] = 1
	df['chouma'] = df['turnover'] * df['4_turnover']
	return df.loc[df['mean'] < close_price]['chouma'].sum()

def winner(ContextInfo, close):
	result = []
	n = len(close)
	for i in range(n):
		res = winner_core(ContextInfo, close[: i + 1])
		result.append(res)
	return pd.Series(result, index = close.index)

以上是000001计算出来的收盘获利比率,跟同花顺对比,还是很相近的。

注意:以上计算都是估算值。

  • 3
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值