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

 
Дмитрий Прокопьев:

Sono cambiate anche le costanti?

In uscita:

sì le costanti hanno il prefisso MT5_ rimosso, ecco un esempio di utilizzo:

from datetime import datetime
import MetaTrader5 as mt5

mt5.initialize()
mt5.wait()

print(mt5.terminal_info())
print(mt5.version())

ticks1 = mt5.copy_ticks_from("EURAUD", datetime(2020,1,28,13), 10000, mt5.COPY_TICKS_ALL)
ticks2 = mt5.copy_ticks_range("AUDUSD", datetime(2020,1,27,13), datetime(2020,1,28,13,1), mt5.COPY_TICKS_ALL)

rates1 = mt5.copy_rates_from("EURUSD", mt5.TIMEFRAME_M1, datetime(2020,1,28,13), 1000)
rates2 = mt5.copy_rates_from_pos("EURGBP", mt5.TIMEFRAME_M1, 0, 1000)
rates3 = mt5.copy_rates_range("EURCAD", mt5.TIMEFRAME_M1, datetime(2020,1,27,13), datetime(2020,1,28,13))

mt5.shutdown()

print('ticks1(', len(ticks1), ')')
print('ticks2(', len(ticks2), ')')
print('rates1(', len(rates1), ')')
print('rates2(', len(rates2), ')')
print('rates3(', len(rates3), ')')

import matplotlib.pyplot as plt

plt.plot(rates2['time'], rates2['low'], 'g-')
plt.plot(rates2['time'], rates2['high'], 'r-')

plt.show()

esempio più complesso - Expert Advisor con trading su due medie mobili senza usare la storia:

import MetaTrader5 as mt5
import time

mt5.initialize()
mt5.wait()

info = mt5.terminal_info()
if info.trade_allowed == False:
    print("Auto-trading disabled in Terminal, enable it")
    quit()

symbol = "EURUSD" #  currency
lot = 0.01;       #  buy lot
interval = 5      #  price requesting interval in sec
long_len = 11     # long moving average length
short_len = 7     # short moving average length
long_ma = []      # long ma list
short_ma = []     # short ma list
ticket = 0        #  ticket for sell

mt5.symbol_select(symbol)

#  wait some time
time.sleep(1)

print("\nPreparing...")
for i in range(long_len):
    p = mt5.symbol_info_tick(symbol)
    print(p.bid,'/',p.ask)
    avg = (p.ask + p.bid) / 2

    long_ma.append(avg)
    if i >= long_len - short_len:
        short_ma.append(avg)
    time.sleep(interval)

print("\nWorking...")
while True:
    p = mt5.symbol_info_tick(symbol)
    print(p.bid,'/',p.ask)
    avg = (p.ask + p.bid) / 2
    
    # short values
    prev_short = sum(short_ma) / short_len
    short_ma.pop(0)
    short_ma.append(avg)
    short = sum(short_ma) / short_len
    
    # long values
    prev_long = sum(long_ma) / long_len
    long_ma.pop(0)
    long_ma.append(avg)
    long = sum(long_ma) / long_len

    #  buy signal
    if prev_short < prev_long and short > long:
        print("BUY: ([-1]:",prev_short,"/",prev_long,", [0]:",short,"/",long,")")
        r = mt5.Buy(symbol, lot)
        if r.retcode != mt5.TRADE_RETCODE_DONE:
            print("Buy failed: ", r)
        else:
            ticket = r.order
    elif prev_short > prev_long and short < long and ticket>0:
        print("CLOSE: ([-1]:",prev_short,"/",prev_long,", [0]:",short,"/",long,")")
        r = mt5.Sell(symbol, lot, ticket=ticket)
        if r.retcode != mt5.TRADE_RETCODE_DONE:
            print("Sell failed: ", r)
        else:
            ticket = 0
           
    time.sleep(interval)

mt5.shutdown()
 
Almaz:

Sì, il prefisso MT5_ è stato rimosso dalle costanti, ecco un esempio di come usarlo:

Un esempio più complesso è un Expert Advisor con trading su due medie mobili senza usare la storia:

Grazie.

L'evoluzione della biblioteca è buona. Domanda agli sviluppatori - dov'è la roadmap per la lib pinova?

Quali innovazioni possiamo ancora aspettarci, cosa non aspettarci?

 
Vorrei un aggiornamento sulla documentazione, sì
 

Nel server di prova (MetaQuotes-Beta server, indirizzo 78.140.180.203:443) è disponibile una versione beta del terminale 2323 con nuove caratteristiche. La beta pubblica sarà rilasciata domani.

Abbiamo anche rilasciato la nuova versione di MetaTrader 5.0.20 per Python (pip install --upgrade metatrader5) con una nuova sintassi per il cambio di conto:

import MetaTrader5 as mt5

mt5.initialize(timeout=10000)
mt5.initialize(login=25035662, password="oxeb7lpb", server="MetaQuotes-Demo")
mt5.login(25035662)
mt5.login(25035662, timeout=10000)
mt5.login(25035662, "oxeb7lpb")
mt5.login(25035662, password="oxeb7lpb")
mt5.login(25035662, password="oxeb7lpb", server="MetaQuotes-Demo")

Ora è possibile specificare l'autorizzazione direttamente nell'inizializzazione, sia nella forma completa che in quella breve.

La funzione di attesa è abolita e ora l'intero ciclo di inizializzazione con attesa viene eseguito direttamente in initialize, dove è possibile specificare il tempo di attesa in millisecondi.

La libreria Python è ora garantita per trovare l'ultima copia attiva del terminale anche se è stato installato in modalità portatile (chiave /portable).


I programmi Python sono già mostrati direttamente nel navigatore:


Il rilascio di questo venerdì permetterà di eseguirli come normali script MQL5 e saranno legati ai grafici.


Più tardi aggiungeremo l'accesso a tutti gli indicatori (compresi quelli personalizzati) in modalità di lettura alla libreria Python. Questo renderà il lavoro in python più produttivo. Ma questo non è ancora una priorità, lo faremo molto più tardi.

 
Renat Fatkhullin:

Rilasciata anche una nuova versione di MetaTrader 5.0.20 per Python (pip install --upgrade metatrader5) con nuova sintassi per il cambio di account

Ci sono più caratteristiche di MQL5.

 

In parallelo, stiamo espandendo le capacità dell'editor e nella prossima release (che non arriverà questo venerdì) sarà completamente possibile usare Clang/LLVM e Microsoft Visual Studio per compilare programmi C++:


Forse includeremo anche C#.


Ampio lavoro per utilizzare completamente i database SQLite: SQLite: lavoro nativo con i database SQL in MQL5

Questo permette di operare e scambiare facilmente grandi quantità di dati tra diversi sistemi e all'interno del terminale.

 
fxsaber:

Più caratteristiche di MQL5.

Ci stiamo arrivando?

 
Renat Fatkhullin:

In parallelo, stiamo espandendo le capacità dell'editor e nella prossima release (che non arriverà questo venerdì)
sarà pienamente capace di usare Clang/LLVM e Microsoft Visual Studio per compilare programmi C++:

Sarà aggiunto un linker per collegare i file .lib nei progetti
?

 
Roman:

Per collegare i file .lib nei progetti
sarà aggiunto un linker?

Si possono specificare più varianti di destinazione all'interno dei progetti:



I file DLL/EXE hanno definizioni personalizzate, librerie e parametri aggiuntivi per il compilatore:

Il linker viene usato automaticamente da Clang o Visual Studio. Non è necessario specificarlo esplicitamente.

 
fxsaber:

Ci sono più caratteristiche di MQL5.

Di conseguenza, la piattaforma MetaTrader 5 ha più caratteristiche.

Di per sé, qualsiasi linguaggio è inutile senza una piattaforma informativa e di trading (una piattaforma non è un terminale, ma un intero complesso di server con un'infrastruttura e un ecosistema) che lo alimenta con i dati e fornisce l'esecuzione degli scambi.

Il nostro obiettivo è quello di presentare una piattaforma senza soluzione di continuità con un ampio set di strumenti per l'algotrading, coprendo diversi segmenti di consumatori.

Python è un chiaro vincitore in ML e un linguaggio molto efficace per fare ricerca. Anche se non è possibile metterlo in un tester, è anche buono in modalità di integrazione diretta.


A proposito, a differenza di altre librerie Python (spesso scritte di testa e scarsamente ottimizzate), abbiamo fortemente ottimizzato il payoff dei dati grafici massicci. Questo significa che si può ottenere la storia profonda in modo efficiente nella memoria e rapidamente.

Motivazione: