用Python选一个自己的股票池!堪比资深的炒股选手

形态选股

股票的形态多种多样,这里以选择股票中的黄昏(早晨)十字星为例。

黄昏十字星与早晨十字星的区别在于所处趋势不一样。

图示如下:

如果需要程序判断,那么这些长度需要量化,不能模棱两可。所以根据十字星的定义,量化如下:

实体长度: 超过2.5%才算长实体,而且上下影线不能超过0.3%

十字星: 实体长度不超过1.5%

趋势: 包括十字星在内往前数6根k线,其中的第1根k线收盘价均小于它后面4根收盘价为向上趋势,反之趋势向下,并且幅度超过2.5%。

这里我只是主观的量化没有任何交易经验的选择,如果不认同的话,可以自行修改代码。

代码如下:

def select_doji():

fp = “by_ts_code/600249.SH-.csv”

fp = “by_ts_code/300130.SZ-.csv”
df = pd.read_csv(fp, index_col=“trade_date”, parse_dates=[“trade_date”])
df = df[[“open”, “high”, “low”, “close”]]

k线数量

k_size = 6

起始幅度大小

treand_threshold = 0.025

长实体最小长度

entity_length_threshold = 0.025

长实体上下最大影线长度

entity_shadow_line_length_threshold = 0.03

十字星实体长度最大长度

doji_entity_length_threshold = 0.015

十字星上下影线长度最小长度

doji_shadow_line_length_threshold = 0.005

trend_map = {1: “向上”, -1: “向下”}

def up_or_down_trend(row):
“”“1代表向上, -1代表向下, 0代表震荡”“”
first = row[0]
last = row[-1]

if all(first > row[1:]) and first > (last * treand_threshold):
return -1
elif all(first < row[1:]) and last > (first * treand_threshold):
return 1
else:
return 0

df[“trend”] = df.close.rolling(k_size).apply(up_or_down_trend, raw=True)
df.fillna(value=0, inplace=True)

def k_sharp(k):
“”“返回k线的上下影线长度, 实体长度”“”
open_, high, low, close = k[:4]
if open_ > close:
upper_line_length = (high - open_) / high
lower_line_length = (close - low) / close
entity_length = (open_ - close) / open_
else:
upper_line_length = (high - close) / high
lower_line_length = (open_ - low) / open_
entity_length = (close - open_) / close

return upper_line_length, lower_line_length, entity_length

def is_up_or_down_doji(k_lst, trend):

open, high, low, close

if len(k_lst) != 3:
sys.exit(“判断十字星需要三根K线”)

is_ok = False
k1, k2, k3 = k_lst

判断是否跳空

通过high, close过于严格

if trend > 0:

趋势向上时,最低点是否大于两个实体的最高价

if k2[0] < k1[1] or k2[0] < k3[1]:

if k2[0] < k1[1] :

return is_ok
else:

趋势向下时,最高点是否小于两个实体的最高价

if k2[0] > k1[2] or k2[0] > k3[2]:
return is_ok

k1_sharp = k_sharp(k1)

print(“k1 sharp”)

print(k1_sharp)

判断是否为长实体

if (k1_sharp[2] < entity_length_threshold
or k1_sharp[0] > entity_shadow_line_length_threshold
or k1_sharp[1] > entity_shadow_line_length_threshold):
return is_ok

k3_sharp = k_sharp(k3)

print(“k3 sharp”)

print(k3_sharp)

if (k3_sharp[2] < entity_length_threshold
or k3_sharp[0] > entity_shadow_line_length_threshold
or k3_sharp[1] > entity_shadow_line_length_threshold):
return is_ok

print(“ok”)

判断是否为十字星

k2_sharp = k_sharp(k2)

print(“k2 sharp”)

print(k2_sharp)

实体长度不超过0.2%, 上下影线长度超过0.6%, 如果规定上下影线的长度不太好找

if (k2_sharp[2] > doji_entity_length_threshold

or k2_sharp[0] < doji_shadow_line_length_threshold

or k2_sharp[1] < doji_shadow_line_length_threshold):

if k2_sharp[2] > doji_entity_length_threshold:
return is_ok

return True

df_values = df.values
ret = []

for index in range(len(df_values)):
if index < k_size:
continue

trend = df_values[index - 1][-1]
if trend == 0:
continue

val_slice = slice(index-2, index+1)
k_lst = df_values[val_slice]
if is_up_or_down_doji(k_lst, trend):
ret.append(index-1)
print(“在>>%s<<<找到趋势为[%s]的十字星” % (df.index[index-1], trend_map[trend]))

if not ret:
print(“没有发现任何十字星”)

ax = ohlc_plot(df[[“open”, “high”, “low”, “close”]])
for i in ret:

print(i)

mark_x = df.index[i]

mark_y = df.loc[mark_x].low

print(mark_x, mark_y)

ax.axvline(mark_x)
plt.show()

return ret

结果如下:

说实话标准的不太好找,所以代码的条件设置不是很严格。

形态选股很有意思,以后有机会单独出一篇文章。

交易额/流通股本选股

通过交易额过滤,选择股票最近一百个交易日的成交额平均值,然后进行排序。

交易额排序

def select_by_amount(data_path, top_size=20):

或许交易日比较好

day_range = 100

all_df = load_all_local_data(data_path, tail_size=day_range)
ret = []
for ts_code, df in all_df.items():
df[“amount_avg”] = df.amount.rolling(day_range).mean()
amount_avg = df[“amount_avg”][-1]

NaN的布尔值为True, 所以需要np.isnan判断

if np.isnan(amount_avg):
continue

ret.append((ts_code, amount_avg))

ret.sort(key=lambda x:x[1])
print(“交易额排名前%s的结果如下” % top_size)
print(ret[-top_size:])
return ret[-top_size:]

结果如下。

[(‘002714.SZ’, 2162871.9387400015), (‘000002.SZ’, 2294273.739109999), (‘002460.SZ’, 2372975.2177099977), (‘600745.SH’, 2461243.4350499995), (‘601990.SH’, 2551214.2825800003), (‘603986.SH’, 2679324.4020000002), (‘600703.SH’, 2759167.96963), (‘002456.SZ’, 2759314.642220001), (‘000651.SZ’, 2782179.0211499995), (‘000100.SZ’, 2853012.22389), (‘002185.SZ’, 3149773.6836400027), (‘000858.SZ’, 3168871.2845699983), (‘002475.SZ’, 3392269.47999), (‘300750.SZ’, 3511882.7076800014), (‘600030.SH’, 4039920.83439), (‘000725.SZ’, 4189700.4488400007), (‘300059.SZ’, 4447245.855129998), (‘600519.SH’, 4448082.42745), (‘601318.SH’, 4892206.13003), (‘000063.SZ’, 5128169.27109)]

流通市值排序

def select_by_float_market_value(trade_date, top_size=20):
df = pro.daily_basic(ts_code=‘’, trade_date=trade_date, fields=“ts_code,close,float_share”)

ret = []
for row in df.values:
ts_code = row[0]
float_market_value = row[1] * row[2]

if np.isnan(float_market_value) or not float_market_value:
continue

ret.append((ts_code, float_market_value))

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img



既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Python开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注Python)
img

如果你也是看准了Python,想自学Python,在这里为大家准备了丰厚的免费学习大礼包,带大家一起学习,给大家剖析Python兼职、就业行情前景的这些事儿。

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

二、学习软件

工欲善其必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

三、全套PDF电子书

书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。

四、入门学习视频

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

四、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

五、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

成为一个Python程序员专家或许需要花费数年时间,但是打下坚实的基础只要几周就可以,如果你按照我提供的学习路线以及资料有意识地去实践,你就有很大可能成功!
最后祝你好运!!!

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
img

作。

成为一个Python程序员专家或许需要花费数年时间,但是打下坚实的基础只要几周就可以,如果你按照我提供的学习路线以及资料有意识地去实践,你就有很大可能成功!
最后祝你好运!!!

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-6yeZMYRA-1712554028438)]

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值