AI量化投资的星辰大海!

之前我们说过,策略开发(回测)与实盘,我们建议是分开考虑的。

因此,策略开发依赖的回测框架,不强求实盘功能。

而市场上开源的回测框很多,很多新手不知道用哪个?

我的建议是试试,每个框架有其设计理念和出发点,然后再决定选择合适自己的。

bt(不是backtrader)的优点是做资产配置,内置了风险平价,波动率控制等算子,可以复用。但bt的仓位管理是等权或者风险平价,而“不支持”入多少股之类的——当然按仓位比例其实是够用的。

昨天发布的策略,年化21%:年化达21%(K=1),最大回撤35%,K=3时,卡玛比最优,最大回撤20%(年化15.2%)| Quantlab5.0代码发布

图片

在Quantlab5.x开始,我们会引入多个底层框架,当某个策略最适合某个框架时,就选用它。

今天回到pybroker一个兼容机器学习和传统规则量化的回测框架。

它还支持numba加速,数据缓存等。

首先当然还是数据,尽管pybroker支持yfinance, akshare等datasource,我们还是直接使用dataframe。

@staticmethod
def get_df(symbols: list[str], set_index=False, start_date='20100101'):
    dfs = []
    for s in symbols:
        df = CSVDataloader.read_csv(s)
        if df is not None:
            dfs.append(df)

    df = pd.concat(dfs, axis=0)
    if set_index:
        df.set_index('date', inplace=True)
        df.index = pd.to_datetime(df.index)
        df.sort_index(inplace=True, ascending=True)
        df = df[start_date:]
    else:
        df.sort_values(by='date', ascending=True, inplace=True)
        df = df[df['date']>=start_date]

return df

它的数据格式与bt不同,bt是把所有close抽出来,而pybroker把所有dataframe叠加在一起。

图片

写一个策略特别简单——pybroker支持多个子策略复合,

就是add_execution,加一个函数以及对应的symbols列表:

def buy_and_hold(ctx):
    if ctx.long_pos():
        return
    ctx.buy_shares = ctx.calc_target_shares(0.3)

from pybroker import Strategy
strategy = Strategy(data, '20100101','20240601')
strategy.add_execution(buy_and_hold, ['000300.SH', '000905.SH','159915.SZ'])
#strategy.add_execution(short_high, ['159915.SZ'])
result = strategy.backtest()
result.orders

图片

交易之道

期货交易者追求平稳收益曲线,即通过多次交易逐步积累利润。这种策略对大资金投资者适用,因为他们能承受更大回撤,适合轻仓长线。

然而,对于资金量较小的投资者,这种策略可能并不理想。小资金投资者应采取更激进的策略,如重仓甚至梭哈,同时严格控制止损,以实现快速翻倍。

大资金和小资金在相同收益率下,收益金额差异巨大

小资金若过于保守,难以在期货市场取得显著成就。

期货市场高杠杆特性意味着高风险高回报,小资金投资者应敢于抓住大行情。

如果追求稳定收益,期货可能不是最佳选择,其他更稳健的投资方式可能更合适。

投资者应根据自己的资金量和风险承受能力,选择合适的交易策略。

吾日三省吾身

出奇制胜:在快速变化的世界如何加速成功》,这本书里讲了很多“出奇制胜”的招数,其中有一个就是我们在:以交易为生,定一个小目标|10倍法则:思考与行动,提及的——10倍法则,有些事情,做得10倍好,比提升10%会更加容易。

把目标提升10倍很容易,但你与之匹配的努力也需要提升10倍。

比如你做自媒体,原先一天写1000字左右,现在要在质量不明显下降的条件下,每天写出10000字的原创稿件。——这个付出的心力可想而知!

10个的思考+10倍的努力才是关键中的关键——知行合一,知易而行难。

聚焦而专注,当下你最关心财富自由,那么一切非此无关之事,都应该少投入或不投入精力,懂重取舍。

——成功的关键是找到你生命中最重要的事情,集中你的时间和精力,然后在这些事情上取得进展。

之前我们说过,策略开发(回测)与实盘,我们建议是分开考虑的。

因此,策略开发依赖的回测框架,不强求实盘功能。

而市场上开源的回测框很多,很多新手不知道用哪个?

我的建议是试试,每个框架有其设计理念和出发点,然后再决定选择合适自己的。

bt(不是backtrader)的优点是做资产配置,内置了风险平价,波动率控制等算子,可以复用。但bt的仓位管理是等权或者风险平价,而“不支持”入多少股之类的——当然按仓位比例其实是够用的。

昨天发布的策略,年化21%:年化达21%(K=1),最大回撤35%,K=3时,卡玛比最优,最大回撤20%(年化15.2%)| Quantlab5.0代码发布

图片

在Quantlab5.x开始,我们会引入多个底层框架,当某个策略最适合某个框架时,就选用它。

今天回到pybroker一个兼容机器学习和传统规则量化的回测框架。

它还支持numba加速,数据缓存等。

首先当然还是数据,尽管pybroker支持yfinance, akshare等datasource,我们还是直接使用dataframe。

@staticmethod
def get_df(symbols: list[str], set_index=False, start_date='20100101'):
    dfs = []
    for s in symbols:
        df = CSVDataloader.read_csv(s)
        if df is not None:
            dfs.append(df)

    df = pd.concat(dfs, axis=0)
    if set_index:
        df.set_index('date', inplace=True)
        df.index = pd.to_datetime(df.index)
        df.sort_index(inplace=True, ascending=True)
        df = df[start_date:]
    else:
        df.sort_values(by='date', ascending=True, inplace=True)
        df = df[df['date']>=start_date]

return df

它的数据格式与bt不同,bt是把所有close抽出来,而pybroker把所有dataframe叠加在一起。

图片

写一个策略特别简单——pybroker支持多个子策略复合,

就是add_execution,加一个函数以及对应的symbols列表:

def buy_and_hold(ctx):
    if ctx.long_pos():
        return
    ctx.buy_shares = ctx.calc_target_shares(0.3)

from pybroker import Strategy
strategy = Strategy(data, '20100101','20240601')
strategy.add_execution(buy_and_hold, ['000300.SH', '000905.SH','159915.SZ'])
#strategy.add_execution(short_high, ['159915.SZ'])
result = strategy.backtest()
result.orders

图片

交易之道

期货交易者追求平稳收益曲线,即通过多次交易逐步积累利润。这种策略对大资金投资者适用,因为他们能承受更大回撤,适合轻仓长线。

然而,对于资金量较小的投资者,这种策略可能并不理想。小资金投资者应采取更激进的策略,如重仓甚至梭哈,同时严格控制止损,以实现快速翻倍。

大资金和小资金在相同收益率下,收益金额差异巨大

小资金若过于保守,难以在期货市场取得显著成就。

期货市场高杠杆特性意味着高风险高回报,小资金投资者应敢于抓住大行情。

如果追求稳定收益,期货可能不是最佳选择,其他更稳健的投资方式可能更合适。

投资者应根据自己的资金量和风险承受能力,选择合适的交易策略。

吾日三省吾身

出奇制胜:在快速变化的世界如何加速成功》,这本书里讲了很多“出奇制胜”的招数,其中有一个就是我们在:以交易为生,定一个小目标|10倍法则:思考与行动,提及的——10倍法则,有些事情,做得10倍好,比提升10%会更加容易。

把目标提升10倍很容易,但你与之匹配的努力也需要提升10倍。

比如你做自媒体,原先一天写1000字左右,现在要在质量不明显下降的条件下,每天写出10000字的原创稿件。——这个付出的心力可想而知!

10个的思考+10倍的努力才是关键中的关键——知行合一,知易而行难。

聚焦而专注,当下你最关心财富自由,那么一切非此无关之事,都应该少投入或不投入精力,懂重取舍。

——成功的关键是找到你生命中最重要的事情,集中你的时间和精力,然后在这些事情上取得进展。

Quantlab5.0代码发布:

值得说明,Quantlab5与4没有继承关系,5开始的思路是:

1、尽量少封装,保留回测框架最原始的功能。

2、取消配置、可视化界面,使用notebook写策略,方便大家直观学习。

后续会引入多框架,包含但不限于:bt, pybroker, backtesting.py, backtrader, qlib,vnpy, wonder trader…

图片

先从方法论上讲讲,投资的三个层次:大类资产配置、战术资产调优和择时。

续前文:稳稳的长期年化10%,想以投资为生?先理解投资三大层次——大类资产配置背后的逻辑基础

大类资产——风险平价——配置曲线看就就挺舒服的:

图片

我们先来一个”大类资产——等权配置“作为对比:

图片

波动会大一些,但作为普通用户,其实等权也是可以的。

——曾经有人问马可维茨(因投资组合理论获诺奖),他自己是否使用”均值—方差理论来做配置“。

他的回答是,他做股债平衡时,也是自己给一个固定比例的股债平衡,然后定期再平衡。

今天我们来聊——战术资产配置。

战略资产配置,就是给不同类型的投资品,分配相应的权重,不做预测。

而战术资产配置,在战略资产的基础上,加上一些择优。——这里仍然不做市场预测,就像我们不预测气温,但夏天的时候少穿衣服,冬天时候多穿衣服肯定是没错的。

那如何判断当前投资品的市场是夏天还是冬天呢?

——低相关性的标的之间,使用趋势指标来择优。

bt内置没有实现轮动函数,我扩展了一个:

class SelectTopK(bt.AlgoStack):
    def __init__(self, signal, K, sort_descending=True, all_or_none=False, filter_selected=False):
        super(SelectTopK, self).__init__(bt.algos.SetStat(signal),
                                         bt.algos.SelectN(K, sort_descending, all_or_none, filter_selected))

回测结果如下:——另外,bt有一个很大的优点,可以多策略一起跑,然后参数进行对比,其实框架这一点需要自己实现。

图片

图片

可以看出,K=1,也就是选择最强的标的最优,年化达到21%,最大回撤35%,但K=3时,卡玛比最优,最大回撤才20%(年化15.2%)。

代码在如下位置:

图片

发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/103220
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!

(0)
股市刺客的头像股市刺客
上一篇 2024 年 7 月 26 日
下一篇 2024 年 7 月 26 日

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注