说明
例行的推进,保持一个习惯。
上次对SMA和EMA进行了一次暴力搜索,跑了两天,进度正常。
跑数用了两个worker在处理,所以比较慢。主要是平时事太多,这两个worker肯定比我回过神要快,哈哈。如果是正儿八经跑的话,我觉得给100个worker跑是没问题的,其实速度不是事。
我想了想,所谓对经典策略的变体,目前在我这也就是时隙单位变为分钟,以及我搜索了更大的参数空间,从而选定了一组或几组合适的空间。另外就是这些策略会作为强化学习框架的元素,最后的结果不仅取决于算法,还取决于强化学习框架。
就目前处理的3000组参数中,没有一组参数能够在总体、最近3年和最近1年都获胜的。有些赢得多的,这两年输的也多。就策略本身的获益水平来说还不是特别吸引我。
但是从反过来看可能更有意思。就是不以赢为目标,而是以不输为目标。那么符合条件的case就多了。「不输」可以作为一种模式或者precondition来服务与其他一般判别模型。(双刃剑模型)
接下来,我会继续把一些基准的策略都纳入,通过变体,产生可实盘的工程结果。
内容
接下来是RSI策略。
RSI指标的计算有点类似与净买入、净卖出的意思,体会一下就好。
数据模型
from Basefuncs import *
from typing import List, Optional
from pydantic import BaseModel
class RSI(BaseModel):
clickhouse_ip : str
clickhouse_db : str
clickhouse_table_name : str
clickhouse_select_cols : list = ['shard','part','block','brick','code','amt','close','high','low',
'open', 'data_dt', 'pid', 'ts','vol']
gfgo_lite_server : str
current_year : int = 2024
t : int
buy_rsi : float
sell_rsi: float
t的话没啥好说,从300一直往后轰到12000差不多了。rsi会做一些变换
反正deepseek说是70和30,但是在变换了时隙之后,以及标的不对应股票,这些会发生变化。我更倾向与相信rsi会来自与一个稳定的分布,所以我觉得用分位数作为实际的控制参数比较好。
中间耽搁了一下,结果都跑完了。不过这次参数没有完全展开,其实完全可以让参数无脑的在5,95之间自己尝试。
看看结果吧,我发现rabbitmq很适合干这种(元数据、块数据任务)。我甚至都不想把消息拿出来ack掉。
rm = RabbitManager()
# 获取1个数据
data_list = rm.get_message('rsi510300_result', count=2000)
df = pd.DataFrame(data_list)
sel1 = (df['rsi.total_mean_npr'] > 0) & (df['rsi.last3_mean_npr'] > 0) & (df['rsi.last1_mean_npr'] > 0)
df[sel1]
Amazing, 竟然有一直赚钱的策略,不过这区间也够窄的
不错哦,冠军恰好就是全赢的
嗯,看来可以收货几个candidates了。下一步搞搞MACD,然后布林带,然后就结束经典策略的类型 。