交易中的机器学习:理论、模型、实践和算法交易 - 页 1138

 
康斯坦丁-尼基丁

根据我的观察,超过1的锐化还不起作用。是的,和其他人的账户/图表中的大指数没有见过。我还不知道。

阿列克谢-维亚兹米 金。

从公式的描述中不清楚如何检查,例如,如何计算"持仓时间的算术平均利润"?

也许这只是一个小小的数学期望值问题?

无论如何,我注意到指数越高越好,这不是小事,主要报告是用我理解的那些指数写到文件里的。

好吧,我可以告诉你们,亲爱的先生们......。

这些都是使用黑盒子、其他人的图书馆等的副作用。

我只能提供你在CSV中发布你的研究的股权,我将告诉你什么是你的模型的正确夏普比率,你可以自己计算所附的代码(python)。

import random

import csv

import matplotlib

import matplotlib.pyplot as plt


def rndWalk(length, start, var):

    rndwalk = []

    curent = start

    for _ in range(length):

        curent*= 1 + random.gauss(0,3) * var

        rndwalk.append(curent)

    return rndwalk


def ParseCsv(path, columnName):

    tab = csv.DictReader(open(path))

    price = []

    for row in tab: price.append(float(row[columnName]))

    return price


def diff(ts):

    return [ts[n] - ts[n - 1] for n in range(1, len(ts))]


def SharpRatio(PnL):

    ret = sum(PnL) / len(PnL)

    var = ((sum([(x - ret) ** 2 for x in PnL]) / len(PnL))) ** 0.5

    return len(PnL) ** 0.5 * ret / var


rw = rndWalk(10000,100,0.001)

sr = SharpRatio(diff(rw))

print(sr)


plt.plot(rw)

plt.show()


SharpRatio的代码本身只有3行

def SharpRatio(PnL):

ret = sum(PnL) / len(PnL)

var = ((sum([(x - ret) ** 2 for x in PnL]) / len(PnL))** 0.5

返回 len(PnL) ** 0.5 * ret / var


如果你把股票或PnL发给我,我会尝试找出问题所在。 我可以猜测PnL是否 "空载 "使用,即交易之间有间隙(这当然是不正确的),因此出现缩放。 我敢打赌100美元,这就是问题所在。

 
pantural

我可以告诉你们,先生们...

这些都是使用黑匣子、外星人库等的副作用。

我只能提供你公布你的研究的CSV股权,我会告诉你你的模型的正确夏普比率是多少,你可以自己计算所附的代码(python)。

如何给你的夏普比率,按小时按分钟计算?

 
阿列克谢-维亚兹米 金。

你如何给你的股权,按小时按分钟?

这并不重要,让它既是

顺便说一下,错误的夏普计算的迹象之一是,当不同规模的股权给出明显不同的夏普比率的数字,而他们通常应该非常接近。
 
pantural

不要紧,让我们两边都做吧。

顺便说一下,洗牌计算错误的标志之一是,在不同的规模下,股权的洗牌率明显不同,而它们通常应该非常接近。

好的,但要晚一点--现在所有的机器都在喘着气讲故事呢 :)

 
pantural:

不要紧,让我们两边都做吧。

顺便说一下,错误的夏普估计的迹象之一是不同规模的股票给出的夏普比率数字基本上是不同的,而它们通常应该非常接近。

我给出了每分钟的变体,并附上了测试者的 交易报告

的确,我对指标进行了一些改进。

夏普比率现在是0.29。

附加的文件:
KS.zip  102 kb
 
Aleksey Vyazmikin:

我给出了一个每分钟的变体,并附上测试者的交易报告。

但我对指标进行了一些改进。

夏普比率现在是0.29。

实际夏普比率=~3.79

那些试图计算你的数字的人的错误是显而易见的。 他们只是忘记了用系列长度的平方根 来衡量回归者与变化的比例。

def SharpRatio(PnL):

PnL = [x for x in PnL if abs(x) > 0] 。

ret = sum(PnL) / len(PnL)

var = ((sum([(x - ret) ** 2 for x in PnL]) / len(PnL))** 0.5

返回 len(PnL) ** 0.5 * ret / var


PS:SR=3.79是非常乐观的,当然,如果不是血汗工厂并且测试正确的话。

 
pantural

实际夏普比率=~3.79

那些制定算法来计算你的数字的人的错误是显而易见的。 他们愚蠢地忘记了用系列长度的平方根来衡量返回者与变化的比例。

def SharpRatio(PnL):

PnL = [x for x in PnL if abs(x) > 0] 。

ret = sum(PnL) / len(PnL)

var = ((sum([(x - ret) ** 2 for x in PnL]) / len(PnL))** 0.5

返回 len(PnL) ** 0.5 * ret / var


PS:SR=3.79是非常乐观的,当然,如果它不是汗水(在某种程度上),并且测试正确的话。

谢谢你的重新计算!

如果它真的是一个错误,也许值得在一个专门的线程 中报告,因为它是一个终端的全局错误?

至于拟合,我有自己的方法,我从树上收集叶子,然后看它们在历史上的表现,在训练过的和未知的样本中,如果对两个样本都有积极的影响,就进入下一组进行详细的选择和分析。这在一定程度上是一种配合,但要对这样的 "叶子 "在以前和现在都起作用的事实进行调整,而接下来会发生什么--没有人知道。

 
阿列克谢-维亚兹米 金。

谢谢你的重新计算!

如果它真的是一个错误,也许你应该在一个专门的线程 中报告它,因为它是一个终端的全局错误?

是的,这绝对是一个错误,应该报告,你介意我用你的报告作为例子吗?

阿列克谢-维亚兹米 金。

至于拟合,我有自己的方法,我从树上收集叶子,然后看它们在历史上的表现,在训练过的和未知的样本中,如果对两个样本都有积极的影响,就进入下一组进行详细选择和分析。这在一定程度上是合适的,但需要调整的是,这样的 "床单 "以前有效,现在也有效,而且没有人知道接下来会发生什么。

无论你怎么看,调整无处不在,问题是如何将其减少到一个可接受的水平。

 
pantural

无论你怎么看,合身是无处不在的,问题是如何将它减少到一个可接受的水平。

你不能。任何优化、任何调整、任何训练都是一种配合。你只需接受它是一种不可避免的情况,并与之合作。

这个问题在这里必须以不同的方式提出。不幸的是,可能没有一般的配方,而且不同的系统的配方本身也可能不同。

 
尤里-阿索连科

你不能。任何优化、任何调整、任何训练都是一种配合。

这里的问题必须以不同的方式提出。不幸的是,可能没有一般的配方,而且不同的系统的配方本身也可能不同。

不要使用需要调整的数字