backtrader策略库:强化学习二:应用

news/2024/7/7 22:21:33

点此获取backtrader技术教程

========

前一个帖子介绍了梯度提升gradient ascent的概念,本文介绍如何使用梯度提升最大化回报函数。

文末有github源码链接。

In my last post we learned what gradient ascent is, and how we can use it to maximize a reward function. This time, instead of using mean squared error as our reward function, we will use the Sharpe Ratio. We can use reinforcement learning to maximize the Sharpe ratio over a set of training data, and attempt to create a strategy with a high Sharpe ratio when tested on out-of-sample data.

def gradient(x, theta, delta):
    Ft = positions(x, theta)
    R = returns(Ft, x, delta)
    T = len(x)
    M = len(theta) - 2
    
    A = np.mean(R)
    B = np.mean(np.square(R))
    S = A / np.sqrt(B - A ** 2)

    dSdA = S * (1 + S ** 2) / A
    dSdB = -S ** 3 / 2 / A ** 2
    dAdR = 1. / T
    dBdR = 2. / T * R
    
    grad = np.zeros(M + 2)  # initialize gradient
    dFpdtheta = np.zeros(M + 2)  # for storing previous dFdtheta
    
    for t in range(M, T):
        xt = np.concatenate([[1], x[t - M:t], [Ft[t-1]]])
        dRdF = -delta * np.sign(Ft[t] - Ft[t-1])
        dRdFp = x[t] + delta * np.sign(Ft[t] - Ft[t-1])
        dFdtheta = (1 - Ft[t] ** 2) * (xt + theta[-1] * dFpdtheta)
        dSdtheta = (dSdA * dAdR + dSdB * dBdR[t]) * (dRdF * dFdtheta + dRdFp * dFpdtheta)
        grad = grad + dSdtheta
        dFpdtheta = dFdtheta

        
    return grad, S

Once again the model outperforms the asset! This model may be able to be improved by engineering more features (inputs), but it is a great start. If you found this post useful, be sure to cite my paper,Cryptocurrency Trading Using Machine Learning。

As always, the notebook for this post is available on my Github.


http://lihuaxi.xjx100.cn/news/1974207.html

相关文章

IDA Pro 7.7和8.3共用方案

1.问题 IDA 8.3版本放出来后,我安装之后,把之前用的正好的7.7给卸载了,然后发现:IDA 8.3版本只能反编译x86和x64两个架构,而我又是arm和arm64的重度用户,只能把旧版下载回来。问题就出现在这里。 &#x…

【SpringBoot】SpringBoot 项目初始化方法

github 搜索 springboot 模板 github 搜索 springboot 模板,拉取现成代码。 SpringBoot 官方的模板生成器 SpringBoot 官方的模板生成器(https://start.spring.io/) 在 IDEA 开发工具中生成 这里我修改成阿里的镜像主要是要使用 Java8。 …

Scrcpy:掌握你的Android设备

Scrcpy:掌握你的Android设备 本文将介绍Scrcpy工具,它是一种强大的安卓设备控制工具,可以实现屏幕镜像、操作控制等功能。我们将探讨Scrcpy的基本原理和工作方式,并介绍如何使用Scrcpy连接和控制安卓设备。此外,我们还…

【Git】 取消上一次commit或push

一、取消上一次commit 如果你需要取消上一次的 Git 提交,有几个不同的方法可以实现。其中包括撤消提交、提交到新的分支、使用 Git 回滚等等。 下面介绍三种方法: 方法1:使用 Git reset 使用 Git reset 命令来取消上一次提交: …

【算法练习】leetcode算法题合集之栈和队列篇

普通栈 LeetCode20 有效的括号 LeetCode20 有效的括号 定义一个辅助map&#xff0c;判断字符串的字符是否在]})中。一旦是右括号就要弹出元素&#xff0c;判断匹配。 class Solution {public boolean isValid(String s) {if (s.length() % 2 1) {return false;}Map<Chara…

c++ 函数参数的传递

在 C++ 中,函数参数可以通过值传递、指针传递或引用传递的方式来传递。每种传递方式有其用途和行为特点。理解这些不同之处对于有效地使用 C++ 来说非常重要。 先大概了解一下各个指针的信息,再看实例 值传递(Pass by Value):创建实参的副本,函数中的改动不影响实际的变…

30天精通Nodejs--第二十二天:express-认证和授权

目录 引言理解JWT及其工作原理安装与引入JWT库生成JWT令牌验证JWT令牌注意事项与最佳实践结语引言 在现代Web应用开发中,JSON Web Tokens(JWT)作为一种轻量级、自包含且安全的标准,已被广泛用于实现用户身份验证和授权。尤其是在Node.js环境下的Express框架中,JWT提供了一…

【安装VMware Tools】实现Vmware虚拟机和主机之间复制、粘贴内容、拖拽文件

https://www.bilibili.com/video/BV1rN411277B/?spm_id_from333.788.recommend_more_video.6&vd_sourcefb8dcae0aee3f1aab700c21099045395 https://blog.csdn.net/wxqian25/article/details/19406673 待解决方案&#xff1a; 重新下载ubuntu&#xff0c;然后按照 https://…