L'apprendimento automatico nel trading: teoria, modelli, pratica e algo-trading - pagina 1557

 
Mihail Marchukajtes: Questo è il motivo per cui ZZ non è il miglior obiettivo

Uso ZZ da circa 15 anni ormai. Conosco tutti gli svantaggi di questo strumento. E so molte altre cose, per questo ho detto sopra la mia idea.

---

Il sistema dovrebbe trovare da solo i punti di acquisto/vendita. Non compete con i giocatori sul mercato, ma con il mercato stesso (scusate la tautologia).

 
Eugeni Neumoin:

Mi esercito con ZZ da circa 15 anni. Conosco tutti i difetti di questo strumento. E so molto di più, ecco perché vi ho parlato della mia idea qui sopra.

---

Il sistema dovrebbe identificare da solo i punti di acquisto/vendita. Non compete con i giocatori del mercato, ma con il mercato stesso (scusate la tautologia).

Puoi dirmi di più su questo. Come lo avete implementato? Quando c'è una lotta tra acquirenti e venditori, che si traduce in una quotazione, lo capisco, ma se l'avversario nel gioco è il mercato stesso, non lo capisco. Se parliamo di Alpha, ha imparato a giocare da solo secondo certe regole. Non si possono dettare le regole al mercato, quindi non si tratta di competere con il mercato ma di cercare di essere come lui. Studia il mercato, ma non compete con esso. Se il mercato è un giocatore ideale e noi stiamo cercando di diventare migliori di esso. Beh, sì. Sono d'accordo, ma allora l'esempio alfa è irrilevante. Perché Alpha era un autodidatta. Auto-addestrato con se stesso. E ancora descrivi in poche parole come hai fatto a renderlo esattamente un momento competitivo tra il mercato e il ns in cui il mercato è a priori vincente. ZZ non ha valori finali a priori, quindi è inutile.
 

un articolo su Habra dal titolo altisonante "AI per le persone: parole semplici sulla tecnologia"https://habr.com/ru/company/jetinfosystems/blog/471626/

Ho sfogliato l'articolo - tutto si riduceva al Machine Learning, .... e ho ricordato un vecchio aneddoto:

Uno studente sta facendo un esame di zoologia. Conosce solo le pulci. All'esame riceve una domanda sui cani.

Lo studente inizia:

- I cani sono mammiferi, ricoperti di peli. Ci sono pulci nella loro pelliccia....allora si tratta solo di pulci....

Predicatore:

- Ok, giovanotto, parlaci dei gatti.

Studente:

- I gatti sono mammiferi ricoperti di peli. Hanno le pulci nella loro pelliccia...di più sulle pulci....

Studente:

- Parliamo del pesce.

Studente:

- I pesci non sono mammiferi. Non hanno la pelliccia. Sono coperti di squame, ma se fossero coperti di pelo ci sarebbero le pulci in loro....

 
 

Il finale della formazione dei rimpatriati


 
Eugeni Neumoin:

Non usare ZZ o altri indicatori aggiuntivi. Solo OHLC da diversi tf (i tf dovrebbero differire di un fattore 4-6). Per esempio, 1-5-30-H3... fino a un mese di tempo. Sceglietelo voi stessi) e, forse, più zecche per l'allarme precoce.

Con i prezzi dei massimi e dei minimi separatamente le strutture convoluzionali. Per OHLC - la struttura di ricorrenza. E così per tutti i prezzi dell'usato. I segnali di tutto questo sono ulteriormente alimentati, per esempio, alla rete mesh completa.

Inoltre, inserite i tick passati attraverso la rete di ricorrenza in uno degli ingressi della rete a maglie piene.

Ottimizzare la velocità di aumento dei depositi. Di conseguenza, la maglia deve decidere da sola il volume del lotto e selezionare i punti di apertura e chiusura. All'incirca è così.

Perché ti affretti con le parole? Disegna semplicemente la struttura della tua rete proposta. E riceverete molte domande.

Ma è solo aria fritta. L'idea è giusta, ma la direzione è sbagliata.

 
Maxim Dmitrievsky:

Il finale della formazione dei rimpatriati


E puoi allegare un tester fatto in casa, mi chiedo se hai evitato un errore molto comune? O in un messaggio privato.

Buona fortuna

 
Vladimir Perervenko:

E puoi allegare un tester fatto in casa, mi chiedo se hai evitato un errore molto comune? O in un messaggio privato.

Buona fortuna

il notebook di jupiter funzionerà?

 
Maxim Dmitrievsky:

il portatile jupiter funzionerà?

(Certo. Grazie. Darò un'occhiata e riferirò

 
Maxim Dmitrievsky:

Il portatile di Jupiter va bene? Ho scaricato tutto, non è un segreto, perché tutto il codice è nel video.

È un sacco di lavoro smontare il codice di qualcun altro. Guardate solo la funzione custom_tester() e solo la parte evidenziata.

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)

Qual è l'errore nel calcolo del risultato? Si calcola il risultato per ogni iterazione aggiungendo risultato +=testpr[i] - lastpr al valore precedente. È la differenza tra la chiusura della barra attuale e quella precedente. Idealmente, sarebbe meglio usare Close - Open, ma non importa. L'importante è che avendo ricevuto un segnale alla chiusura della barra corrente, lo considererete come un segnale diff(Close) della stessa barra. Questo non è corretto. Il premio di segnale della barra attuale è diff(Close) della barrasuccessiva. Il segnale deve essere spostato a destra di una barra per calcolare correttamente il risultato. p = model.predict_proba(X) a destra di una barra. Mostrerò altri calcoli su R, è più facile per me.

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

Nella prima linea, convertire la previsione in nominale (1,-1), spostarla a destra di una barra, rimuovere NA e ottenere un vettore di segnali. La seconda linea riassume cumulativamente il prodotto del vettore segnali e del vettore diff(Close), avendolo precedentemente allineato al vettore segnali in lunghezza. Questo ci darà il risultato corretto.

Buona fortuna

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