L'apprentissage automatique dans la négociation : théorie, modèles, pratique et algo-trading - page 1138

 
Konstantin Nikitin:

Pour mes observations, aiguiser plus de 1 n'a pas encore fonctionné. Oui, et les comptes d'autres personnes / graphiques avec un grand indice n'a pas vu. Je ne sais pas encore.

Aleksey Vyazmikin:

La description de la formule n'indique pas clairement comment la vérifier, par exemple comment calculer le"bénéfice moyen arithmétique sur la durée de détention d'une position" ?

Peut-être s'agit-il d'une petite espérance mathématique ?

En tout cas, j'ai remarqué que plus l'indice est élevé, mieux c'est, et ce n'est pas rien, et le rapport principal est écrit dans le fichier avec ces indices que je comprends.

Eh bien, que puis-je vous dire, chers messieurs...

Ce sont des effets secondaires de l'utilisation des boîtes noires, des bibliothèques d'autres personnes, etc.

Je ne peux que vous proposer de publier les fonds propres en CSV de vos recherches et je vous dirai quel est le bon ratio de Sharp de vos modèles, vous pouvez calculer le code vous-même ci-joint (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()


Le code SharpRatio lui-même ne comporte que 3 lignes

def SharpRatio(PnL) :

ret = somme(PnL) / len(PnL)

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

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


Si vous m'envoyez l'equity ou le PnL, j'essaierai de trouver quel est le problème. Je peux deviner que le PnL est utilisé "unloaded", c'est-à-dire avec des écarts entre les trades (ce qui n'est bien sûr pas correct), d'où le scaling. Je parierais 100 $ que c'est le problème.

 
pantural:

Que puis-je vous dire, messieurs...

Ce sont les effets secondaires de l'utilisation des boîtes noires, des bibliothèques extraterrestres, etc.

Je ne peux que vous proposer de publier les fonds propres en CSV de vos recherches et je vous dirai quel est le bon Sharp Ratio de vos modèles, vous pouvez calculer le code vous-même ci-joint (python).

Comment vous donner le ratio Sharp, à l'heure et à la minute ?

 
Aleksey Vyazmikin:

Comment donnez-vous votre équité, à l'heure, à la minute ?

Peu importe, que ce soit les deux

À propos, l'un des signes d'un calcul erroné du Sharp est lorsque l'équité sur des échelles différentes donne des chiffres significativement différents du ratio Sharp alors qu'ils devraient normalement être très proches.
 
pantural:

Peu importe, faisons-le dans les deux sens.

À propos, l'un des signes d'un mauvais calcul du mélange est lorsque l'équité à différentes échelles donne des nombres de rapports de mélange significativement différents alors qu'ils devraient normalement être très proches.

D'accord, mais un peu plus tard - en ce moment, toutes les machines sont à l'affût d'une histoire à raconter :)

 
pantural:

Peu importe, faisons-le dans les deux sens.

À propos, l'un des signes d'une mauvaise estimation du ratio Sharp est que les actions à différentes échelles donnent des chiffres essentiellement différents du ratio Sharp alors qu'ils devraient normalement être très proches.

Je donne la variante par minute, et je joins le rapport de trading du testeur.

Il est vrai que j'ai un peu amélioré les indicateurs.

Le ratio de Sharpe est maintenant de 0,29.

Dossiers :
KS.zip  102 kb
 
Aleksey Vyazmikin:

Je donne une variante par minute, et je joins le rapport de négociation du testeur.

Mais j'ai un peu amélioré les indicateurs.

Le ratio Sharp est maintenant de 0,29.

Rapport réel Sharp = ~3.79

L'erreur de ceux qui ont tenté de calculer vos chiffres est évidente : ils ont tout simplement oublié de mettre à l'échelle le rapport entre le nombre de retours et la variation par la racine carrée de la longueur de la série.

def SharpRatio(PnL) :

PnL = [x pour x dans PnL si abs(x) > 0]

ret = somme(PnL) / len(PnL)

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

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


PS : SR=3.79 est assez optimiste, bien sûr s'il ne s'agit pas d'un atelier clandestin et s'il est testé correctement.

 
pantural:

ratio réel Sharp = ~3.79

L'erreur de ceux qui ont créé l'algorithme pour calculer vos chiffres est évidente. Ils ont stupidement oublié de mettre à l'échelle le rapport entre le nombre de retours et la variation par la racine carrée de la longueur de la série.

def SharpRatio(PnL) :

PnL = [x pour x dans PnL si abs(x) > 0]

ret = somme(PnL) / len(PnL)

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

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


PS : SR=3.79 est très optimiste, bien sûr s'il ne s'agit pas d'une sueur (dans une certaine mesure) et s'il est testé correctement.

Merci pour le recalcul !

S'il s'agit vraiment d'une erreur, cela vaut peut-être la peine de la signaler dans un fil de discussion spécial, puisqu'il s'agit d'une erreur globale dans le terminal ?

En ce qui concerne l'adaptation, j'ai ma propre approche de la MO, je collecte des feuilles d'arbres et je regarde ensuite leur performance sur l'historique en termes d'échantillon entraîné et inconnu, lorsqu'il y a un effet positif sur les deux échantillons, on passe au groupe suivant pour une sélection et une analyse détaillées. Il s'agit en partie d'une adaptation, mais avec des ajustements pour tenir compte du fait qu'une telle "feuille" a fonctionné auparavant et fonctionne aujourd'hui, et ce qui se passera ensuite - personne ne le sait.

 
Aleksey Vyazmikin:

Merci pour le recalcul !

S'il s'agit vraiment d'une erreur, vous devriez peut-être la signaler dans un fil de discussion spécial, puisqu'il s'agit d'une erreur globale dans le terminal ?

Oui, il ne fait aucun doute que c'est une erreur, elle doit être signalée, cela vous dérange-t-il si j'utilise votre rapport comme exemple ?

Aleksey Vyazmikin:

En ce qui concerne l'adaptation, j'ai ma propre approche de la MO, je collecte des feuilles d'arbres et je regarde ensuite leur performance sur l'historique en termes d'échantillon entraîné et inconnu, lorsqu'il y a un effet positif sur les deux échantillons, on passe au groupe suivant pour une sélection et une analyse détaillées. C'est en partie approprié, mais avec l'ajustement qu'une telle "liste" a fonctionné auparavant et fonctionne maintenant, et que personne ne sait ce qui se passera ensuite.

L'ajustement est partout, quelle que soit la façon dont on le considère, la question est de savoir comment le réduire à un niveau acceptable.

 
pantural:

L'ajustement est partout, quelle que soit la façon dont on le regarde, la question est de savoir comment le réduire à un niveau acceptable.

Tu ne peux pas. Toute optimisation, tout réglage, toute formation est un ajustement. Il faut juste l'accepter comme une fatalité et faire avec.

La question doit être posée différemment ici. Malheureusement, il n'existe probablement pas de recettes générales, et la formulation elle-même peut être différente pour différents systèmes.

 
Yuriy Asaulenko:

Tu ne peux pas. Toute optimisation, tout réglage, toute formation est un ajustement.

Ici, la question doit être posée différemment. Malheureusement, il n'existe probablement pas de recettes générales, et la formulation elle-même peut être différente pour différents systèmes.

Voir

N'utilisez pas de chiffres qui doivent être ajustés

Raison: