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

 
Mihail Marchukajtes: C'est la raison pour laquelle ZZ n'est pas la meilleure cible.

J'utilise ZZ depuis environ 15 ans maintenant. Je connais tous les inconvénients de cet outil. Et je sais beaucoup d'autres choses, c'est pourquoi j'ai parlé de mon idée.

---

Le système devrait trouver les points d'achat/de vente par lui-même. Il n'entre pas en concurrence avec les acteurs du marché, mais avec le marché lui-même (désolé pour cette tautologie).

 
Eugeni Neumoin:

Je m'entraîne avec ZZ depuis environ 15 ans maintenant. Je connais toutes les faiblesses de cet outil. Et j'en sais beaucoup plus, c'est pourquoi je vous ai parlé de mon idée ci-dessus.

---

Le système devrait identifier lui-même les points d'achat/de vente. Elle n'est pas en concurrence avec les acteurs du marché, mais avec le marché lui-même (désolé pour cette tautologie).

Pouvez-vous m'en dire plus à ce sujet ? Comment l'avez-vous mis en œuvre ? Lorsqu'il y a une lutte entre acheteurs et vendeurs, qui aboutit à une cotation, je le comprends, mais si l'adversaire dans le jeu est le marché lui-même, je ne comprends pas. Si nous parlons d'Alpha, il a appris à jouer tout seul selon certaines règles. Vous ne pouvez pas dicter les règles au marché, il ne s'agit donc pas de faire concurrence au marché mais d'essayer de lui ressembler. Elle étudie le marché, mais elle ne lui fait pas concurrence. Si le marché est un acteur idéal et que nous essayons de devenir meilleurs que lui. Eh bien, oui. Je suis d'accord, mais alors l'exemple de l'alpha n'est pas pertinent. Parce qu'alpha était autodidacte. Auto-apprentissage avec lui-même. Et pourtant décrivez en quelques mots comment vous en avez fait exactement un moment de compétition entre le marché et les ns dans lequel le marché est a priori gagnant. ZZ n'a pas de valeurs finales a priori, il est donc inutile.
 

un article sur Habra avec un titre très remarqué "L'IA pour les gens : des mots simples sur la technologie"https://habr.com/ru/company/jetinfosystems/blog/471626/

J'ai feuilleté l'article - tout se résumait à l'apprentissage automatique, .... et je me suis souvenu d'une vieille anecdote :

Un étudiant passe un examen de zoologie. Il ne connaît que les puces. A l'examen, il a une question sur les chiens.

L'étudiant commence :

- Les chiens sont des mammifères, couverts de poils. Il y a des puces dans leur fourrure...alors tout est question de puces....

Prédicateur :

- OK, jeune homme, parle-nous des chats.

Étudiant :

- Les chats sont des mammifères couverts de poils. Ils ont des puces dans leur fourrure...plus sur les puces....

Étudiant :

- Parlons du poisson.

Étudiant :

- Les poissons ne sont pas des mammifères. Ils n'ont pas de fourrure. Ils sont couverts d'écailles, mais s'ils étaient recouverts de fourrure, il y aurait des puces dedans.....

 
 

La fin de la formation des rapatriés


 
Eugeni Neumoin:

N'utilisez pas du tout ZZ ou d'autres indicateurs supplémentaires. Seulement OHLC de plusieurs tf's (les tf's devraient différer par un facteur de 4-6. Par exemple, 1-5-30-H3... dans un délai d'un mois. Sélectionnez-le vous-même) et, peut-être, plus de tics pour l'alerte précoce.

Par les prix des maximums et minimums séparément des structures convolutionnelles. Par OHLC - la structure de récurrence. Et ainsi de suite pour tous les prix d'occasion. Les signaux de tout cela sont ensuite transmis, par exemple, au réseau maillé complet.

De plus, entrez les ticks passés par le réseau de récurrence dans l'une des entrées du réseau à maille complète.

Optimiser par la vitesse d'augmentation des dépôts. Par conséquent, le maillage doit décider lui-même du volume du lot et sélectionner les points d'ouverture et de fermeture. C'est à peu près comme ça.

Pourquoi vous précipiter avec des mots ? Dessinez simplement la structure de votre réseau proposé. Et vous aurez beaucoup de questions.

Mais c'est juste de l'air chaud. L'idée est bonne, mais la direction est mauvaise.

 
Maxim Dmitrievsky:

La fin de la formation des rapatriés


Et si vous fixez un testeur maison, je me demande si vous avez évité une erreur très courante ? Ou dans un message privé.

Bonne chance

 
Vladimir Perervenko:

Et si vous joignez un testeur fait maison, je me demande si vous avez évité une erreur très courante ? Ou dans un message privé.

Bonne chance

le carnet de notes jupiter fonctionnera-t-il ?

Dossiers :
 
Maxim Dmitrievsky:

l'ordinateur portable jupiter fonctionnera-t-il ?

(gloussements) Bien sûr. Merci. (gloussements) Je vais y jeter un coup d'œil et faire un rapport

 
Maxim Dmitrievsky:

l'ordinateur portable jupiter est ok ? j'ai téléchargé le tout, ce n'est pas un secret, car tout le code est dans la vidéo.

C'est beaucoup de travail de démonter le code de quelqu'un d'autre. Regardez uniquement la fonction custom_tester() et uniquement la partie mise en évidence.

def custom_tester(symbol, timeframe, frompos, pricesnumber, lag, num, markup = 0.0):   
    symbols_list = [symbol]
    pr_test = pd.DataFrame()
    for i in symbols_list:
        rates = MT5CopyRatesFromPos(i, timeframe, frompos, pricesnumber)
        pr_test[i] = [y.close for y in rates]

    #creating price returns with lag
    returns = np.array(np.log(1 + pr_test.pct_change(lag)))
    returns = returns[lag:]
    comp_returns = np.array(returns)
    #                   
    for i in range(num-1):
        comp_returns = np.c_[comp_returns, returns]
    #putting returns into dataframe    
    comp_returns = pd.DataFrame(comp_returns)
    #shifting columns to use it as delayed features
    for i in range(num):
        comp_returns[i] = comp_returns.shift(i)
    #deleting first 'num' rows with NaN's
    comp_returns_shifted = pd.DataFrame(comp_returns[num:]).reset_index(drop=True)
    
    testpr = np.array(pr_test[lag+num:])
    X = pd.DataFrame(comp_returns_shifted)
    p = model.predict_proba(X) # непрерывное предсказание классификатора (типа вероятность)
    
    result = np.array([0])
    
    lastdeal = int(2)
    lastpr = float(0.0)

    for i in range (X[0].size):
# При первом входе
        if lastdeal == 2:
# переводим непрерывное предсказание в номинальные значенияю Порог 0.5
            if p[i][0] > 0.5:
                lastdeal = 1
            else:
                lastdeal = 0
            lastpr = testpr[i] # сохраняем значение Close 
            continue
# при следующей итерации
        if lastdeal == 1 and p[i][0] > 0.5:
            lastdeal = 0 # это я не понял зачем
# При вычислении результата ошибка
            result = np.append(result, result[-1] - markup + lastpr - testpr[i])
            lastpr = testpr[i]
            continue
# при последующей итерации
        if lastdeal == 0 and p[i][0] < 0.5:
            lastdeal = 1 # здесь не должно быть -1?
# и здесь ошибка
            result = np.append(result, result[-1] - markup + testpr[i] - lastpr)
            lastpr = testpr[i]
            continue
            
    plt.figure(figsize=(20,5))
    plt.plot(result)
    
    from sklearn.linear_model import LinearRegression
    y = result.reshape(-1,1)
    X = np.arange(result.size).reshape(-1,1)
    lr = LinearRegression()
    lr.fit(X,y)
#     print(lr.score(X,y))
    return lr.score(X,y)

Quelle est l'erreur dans le calcul du résultat ? Vous calculez le résultat pour chaque itération en ajoutant result +=testpr[i] - lastpr à la valeur précédente. C'est la différence entre la clôture de la barre actuelle et la précédente. Idéalement, il serait préférable d'utiliser Close - Open, mais cela n'a pas d'importance. L'important est que, ayant reçu un signal à la clôture de la barre actuelle, vous le considérerez comme un signal diff(Close) de la même barre. Ceci est incorrect. La prime du signal de la barre actuelle est diff(Close) de la barresuivante. Le signal doit être déplacé vers la droite d'une barre pour calculer correctement le résultat. p = model.predict_proba(X) à droite d'une barre. Je vais montrer d'autres calculs sur R, c'est plus facile pour moi.

ifelse(p >= 0.5, 1, -1)%>% lag()%>% na.omit() -> sig
cumsum(sig * {diff(testpr) %>% tail(lenght(sig))})-> result

Dans la première ligne, on convertit la prédiction en nominal (1,-1), on la décale vers la droite d'une barre, on enlève NA et on obtient un vecteur de signaux. La deuxième ligne résume de manière cumulative le produit du vecteur des signaux et du vecteur diff(Close), en l'ayant préalablement aligné sur le vecteur des signaux en longueur. Cela nous donnera le bon résultat.

Bonne chance

Документация по MQL5: Основы языка / Операции и выражения / Побитовые операции
Документация по MQL5: Основы языка / Операции и выражения / Побитовые операции
  • www.mql5.com
Дополнение до единицы значения переменной. Значение выражения содержит 1 во всех разрядах, в которых значение переменной содержит 0, и 0 во всех разрядах, в которых значения переменной содержит 1. Сдвиг вправо Двоичное представление x сдвигается вправо на y разрядов. Если сдвигаемое значение имеет беззнаковый тип, то осуществляется логический...