MetaTrader 5 Python User Group - Come usare Python in Metatrader - pagina 81

 
Maxim Dmitrievsky:

e se, ipoteticamente, si prende il supporto ONNX, i modelli importati saranno più lenti del MQL stesso?

Controllate voi stessi.

Ma non dimenticare che il vero wrapper su ONNX sarà sicuramente in C++ come libreria/modulo per python, e poi il driver/librerie della specifica scheda video (se è adatto).

Python è solo un corridoio tra le chiamate a librerie efficienti, che devono essere scambiate con esso sotto forma di set di dati abbastanza costosi.

La gente non capisce abbastanza che Python è davvero solo un involucro sopra le chiamate di libreria e niente di più. Pensano che python sia un linguaggio potente e moderno. Ma in realtà è un binding tra librerie C++ ;)

E ogni libreria ha costi mostruosi per assicurare la compatibilità con le strutture dinamiche di python (anche in numpy).

 
Renat Fatkhullin:

Controllate voi stessi.

Ma non dimenticate che il vero wrapper su ONNX sarà sicuramente in C++ sotto forma di una libreria/modulo per python, e poi il driver/librerie della specifica scheda video (se è adatto).

Python è solo un corridoio tra le chiamate a librerie efficienti, che devono essere scambiate con esso sotto forma di set di dati abbastanza costosi.

La gente non capisce abbastanza che Python è davvero solo un involucro sopra le chiamate di libreria e niente di più. Pensano che python sia un linguaggio potente e moderno. Ma in realtà è un binding tra librerie C++ ;)

E ogni libreria ha un costo mostruoso per assicurare la compatibilità con le strutture dinamiche di python (anche in numpy).

Lo controllerò... non ho ancora guardato i dettagli

È chiaro che python è soprattutto per la ricerca.

Ma per tirare il codice di qualche rete neurale già addestrata dopo (e cambiano ogni volta durante la ricerca), è già irreale trasferire qualcosa da qualche parte :)

Forse non ho capito bene cosa volevi fare. Comunque, avete abbastanza possibilità con le api python. A meno che tu non riesca a metterlo sul mercato.

 
Renat Fatkhullin:

Nein. Es ist naiv zu glauben, dass wir Selbstmord begehen und eine Sprache wählen werden, die hunderte Male langsamer ist alsere, um den Tester loszuwerden.

Per noi è molto più facile, la nostra idea è di mettere in pratica, C ++ - Bibliotheken von Drittanbietern in MQL5-Module neu zu kompilieren. Per questo motivo abbiamo iniziato a mettere a punto un compilatore LLVM esterno nell'editor.

Non so se la mia domanda è stata tradotta correttamente. La domanda è leggermente diversa.

Il modulo Python riceve i comandi per il tester di strategia? Alla fine o sicuramente no?
 

Ci metto anche i miei cinque copechi ))))

Ho preso Python proprio perché è molto più facile (mi sembra) lavorare con le reti. Ci sono molti sviluppi. Basta prenderlo e applicarlo. E non ci si può liberare delle reti neurali. Secondo me, MQL ha solo bisogno di librerie per lavorare con questa entità...

 
Almaz:

Fammi un esempio del tuo codice Python che rallenta, non è chiaro dalle parole cosa fa e come ottieni i dati. E perché scrive costantemente sul file? Non si può fare alla fine?

Ho cambiato un po' il codice Python: ho aumentato la richiesta di tick da un giorno a 30, organizzato la scrittura nel file non riga per riga, ma in blocchi di 500 righe. Il tempo di esecuzione è diminuito di un paio di secondi. L'indicatore non riguarda nulla.

Ho ridisegnato il mio indicatore. Ho aggiunto dei buffer e ho scritto i dati nel file riga per riga. La richiesta di zecche rimane la stessa - un giorno.

Ho messo l'indicatore sul grafico.

2020.11.29 17:58:07.306 newCandles_F_1.01 (GBPUSD,H2)   00:01:01

L'indicatore ha reso e scritto tutti i dati su file in un minuto.

Python - 3 ore

MQL - 1 minuto

 

Saluti a tutti.

Può dirmi perché.

Leggo un file csv in un dataframe. Poi impilo alcune righe in una e scrivo in un nuovo file csv

....
csv_framе = pd.read_csv(flname, delimiter=',')
#  тут меняю имя файла
if os.path.isfile(flname):
    os.remove(flname)

rows, cols = csv_framе.shape
for i in range(candles_in_train, rows):
    lst = list()
    for k in range(candles_in_train):
        m = i - candles_in_train + k
        l = list(csv_framе.iloc[m])
        if m < i - 1:
            del l[-1]
        lst += l
    mf.write_csv_data(flname, 'a', lst)

Questo codice funziona per 17 secondi.

Ma se lo metto tutto in una volta in un nuovo quadro csv e poi lo scarico in un file, allora il tempo di esecuzione del codice aumenta a 1 minuto. 44 sec.

...
new_frame = pd.DataFrame()

rows, cols = csv_framе.shape
for i in range(candles_in_train, rows):
    lst = list()
    for k in range(candles_in_train):
        m = i - candles_in_train + k
        l = list(csv_fraim.iloc[m])
        if m < i - 1:
            del l[-1]
        lst += l
    #mf.write_csv_data(flname, 'a', lst)
    r, c = new_frame.shape
    if r == 0:
        new_frame = pd.DataFrame([lst])
    else:
        new_frame.loc[r] = lst
new_frame.to_csv(flname, header=None, index=False)

Perché?

 

problema di codifica? (traduttore di Google)


 

C'è una tabella (pandas DataFrame). Come creare una nuova colonna per condizione: se colonna "1" < colonna "2" allora scrivere 145 altrimenti scrivere 874?


aggiungere:

Comunque risolto da

import numpy as np
... np.where(
 
Buon pomeriggio, Python può essere usato in MT5 per raggiungere WinApi?

In particolare voglio sapere se funzionerà?

keybd_event(VK_CONTROL,0,0,0);
 

Come faccio a fare un offset?

Questa è la tabella (Data Frame)

      time  
2020-11-25
2020-11-26
2020-11-27
2020-11-30 
2020-12-01        

Come fare in questo modo:

      time             time_1
2020-11-25	   2020-11-26
2020-11-26         2020-11-27
2020-11-27         2020-11-30
2020-11-30         2020-12-01 
2020-12-01         ничего не писать 
Motivazione: