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

 
Almaz:

In 5.0.29 aggiunto symbols_total(), symbols_get([group="EURUSD, "USDGBP", *RU*"]), richiede l'ultima versione beta del terminale per funzionare.

Inoltre in tutte le funzioni orders_get(), positions_get(), history_orders_get(), history_deals_get() aggiunto il filtraggio per gruppo - group="EURUSD, "USDGBP", *RU*".
I metodi order_check(), order_send() restituiranno la richiesta iniziale di esecuzione nel campo request.

Grazie.

 
Roman:

Cosa intende esattamente? Copiare un array da mql5 a py e viceversa?
Dovresti almeno leggere attentamente di cosa stiamo parlando.
E ciò che è necessario o no, non si dovrebbe pensare solo per se stessi. Se voi non ne avete bisogno, altri ne hanno bisogno.

Solo per curiosità, quali serie di dati vuoi trasferire da MT?

Gli sviluppatori hanno già detto più volte che non trasferiranno nulla a MT. Dovete usare altre funzioni per questo.

 
Vladimir Perervenko:

Solo per curiosità, quali serie di dati vuoi trasferire da MT?

Gli sviluppatori hanno già detto più volte che non trasferiranno nulla a MT. Dovete usare altre funzioni per farlo.

Sì qualsiasi, i loro array calcolati.
Costruisco esclusivamente sintetici, e la capacità di trasferire gli array in entrambe le direzioni è molto carente.
È chiaro che si può usare PyAPI, ma è di nuovo vincolante per la dll.
E usando PyAPI, allora non c'è affatto bisogno di questa libreria di integrazione.

 
Roman:

Sì qualsiasi, i vostri array calcolati.
Costruisco esclusivamente sintetici, e la capacità di trasferire gli array in entrambe le direzioni è molto carente.
È chiaro che si può usare PyAPI, ma si tratta di nuovo di un binding a una dll.
E usando PyAPI, allora non c'è affatto bisogno di questa libreria di integrazione.

Non pensare che io voglia fare una lezione. Si calcolano i sintetici in base alle quotazioni del terminale. Scaricate le citazioni in Python e fate tutti i calcoli in Python.

Ma dovrete fare ginnastica con il trasferimento inverso degli array. Il modo più semplice è attraverso il database.

Oppure usa questo. Da qualche parte c'era un piccolo thread con questo progetto. O questo.

In ogni caso, questa integrazione non risolverà tutti i vari desideri dei commercianti. Ma risolve due problemi principali e più importanti: ottenere quotazioni rapide e gestire il commercio.

Tutto il resto da solo con la propria infrastruttura.

Buona fortuna

khramkov/MQL5-JSON-API
khramkov/MQL5-JSON-API
  • khramkov
  • github.com
<a href="#metaquotes-mql5
 
Vladimir Perervenko:

Non pensare che io voglia fare una lezione. Si calcolano i sintetici in base alle quotazioni del terminale. Scaricate le citazioni in Python e fate tutti i calcoli in Python.

Ma dovrete fare ginnastica con il trasferimento inverso degli array. Il modo più semplice è attraverso il database.

Oppure usa questo. Da qualche parte c'era un piccolo thread con questo progetto. O questo.

In ogni caso, questa integrazione non risolverà tutti i vari desideri dei commercianti. Ma risolve due problemi fondamentali e molto importanti: quotazioni rapide e gestione del commercio.

Tutto il resto da solo con la propria infrastruttura.

Buona fortuna

È di questo che sto parlando, indipendentemente dall'implementazione, via dll o database, socket o anche file di testo, ecc.
Ma di nuovo, questa è una stampella aggiuntiva non legata alla biblioteca.
Il punto è che ora stiamo sviluppando attivamente l'integrazione della libreria mt5, quindi è auspicabile fornire tutte le caratteristiche necessarie per gli utenti in essa fin dall'inizio.

 
Dmitry Prokopyev:

Grazie, questo esempio che ho visto, funziona.

Sono un po' su qualcos'altro.


positions_get - la lista delle TradePosition mi sarà restituita. In linea di principio, si può buttare dentro i panda e lavorare bene.

Ma tutto non è limitato a un solo panda, e se avete bisogno di ottenere qualcosa come:

devi in qualche modo comporre, panda o per... in qualche modo un sacco di movimenti extra del corpo.

È diventato molto più conveniente con _asdict (), se chi scrive non è un prog MQL5, ma diciamo un pitonista... o un datasynetist, allora list / dict è

Gli elementi di base di python, molti stanno costruendo un trasferimento di dati su lista / dict.

Le tuple sono usate, troppo spesso e molto, ma solo se avete bisogno di controllare strettamente i tipi di dati che vi si muovono dentro.

e blocca anche un gestore di errori, se non utilizzato o assegnato correttamente. Beh, da qualche parte ... :) Potrei sbagliarmi.

Potreste invece usare una semplice comprensione della lista quando assegnate la vostra variabile.

positions = [p._asdict() for p in mt5.positions_get()]
 
nicholi shen:

Potreste invece usare una semplice comprensione della lista quando assegnate la vostra variabile.

questo non cambia l'essenza ... questo è un ciclo aggiuntivo

 

Signori, i ragazzi nel prossimo thread fanno domande sui libs:

URL:https://www.mql5.com/en/forum/306742/page11#comment_15595095

Puoi darci un po' di sostegno?


La funzione symbols_get dovrebbe restituire un generatore di tuple di nome SymbolInfo. Una chiamata a symbols_get senza args dovrebbe restituire tutti i simboli disponibili nel terminale. La funzione dovrebbe prendere un callback che verrebbe passato in un SymbolInfo namedtuple per essere processato usando la funzione filtro. Ecco alcuni esempi.

import MetaTrader5 as mt5
from contextlib import contextmanager
import re


@contextmanager
def metatrader_connection(**kw):
    try:
        if not mt5.initialize(**kw):
            print("Failed to initialize python MT5")
            raise Exception
        yield
    finally:
        mt5.shutdown()


def symbols_get(function=None):
    """
    No function passed in will result in all symbols returned to the caller.
    If a callable function is passed in then the function is passed a SymbolInfo tuple for filtering
    :param function: callback function to filter the symbols
    """
    all_symbols_in_terminal_info = map(
        mt5.symbol_info,
        ['EURUSD', 'USDJPY', 'GBPJPY', 'EURGBP'] # *example only* this would represent all symbols available to the terminal
    )
    if function is not None:
        return filter(function, all_symbols_in_terminal_info)
    return all_symbols_in_terminal_info


if __name__ == "__main__":
    with metatrader_connection():
        all_terminal_symbols = symbols_get()
        jpy_symbols = symbols_get(lambda s: "JPY" in s.name)
        jpy_symbols_using_re = symbols_get(lambda s: re.match(r'\w*JPY\w*', s.name))
        visible_symbols = symbols_get(lambda s: s.visible)
        selected_symbols = symbols_get(lambda s: s.select)


        def my_criteria(symbol_info):
            return 'USD' in symbol_info.name and symbol_info.session_deals > 0


        usd_symbols_with_session_deals = symbols_get(my_criteria)
 

Buona sera, potreste consigliarmi, mi sembra di capire che questo connettore non è in grado di prendere informazioni dagli indicatori collegati?

Esempio:

int  iMA(
   string              symbol,        // имя символа
   ENUM_TIMEFRAMES      period,        // период
   int                 ma_period,    // период усреднения
   int                 ma_shift,     // смещение индикатора по горизонтали
   ENUM_MA_METHOD       ma_method,    // тип сглаживания
   ENUM_APPLIED_PRICE   applied_price  // тип цены или handle
   );
 
9805244:

Buona sera, potreste consigliarmi, mi sembra di capire che questo connettore non è in grado di prendere informazioni dagli indicatori collegati?

Esempio:

A cosa ti serve? Non puoi calcolarlo in Python? Mi sorprendi.

Motivazione: