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

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

Provato, tutto dipende dall'hardware su cui gira.

Un'istanza mangia circa 45-50Mb di RAM + 2,5-4% di CPU. (Sì, la % di CPU dipende dal tipo di CPU, nel mio caso Intel Xeon L5640 @ 2.27GHz).

Lo stesso, un'istanza di python.

Se python funziona con la storia, + 200-300Mb di RAM. La CPU è quasi inutilizzata.

Beh, per cosa, dipende dai tuoi ToR o dalla tua idea.

Capito. Grazie per le informazioni.

 
Sviluppatori, per favore rendete la funzione API copy_buffer(). Ottenere i dati dell'indicatore dall'analogico.
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyBuffer
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyBuffer
  • www.mql5.com
Отсчет элементов копируемых данных (индикаторный буфер с индексом buffer_num) от стартовой позиции ведется от настоящего к прошлому, то есть стартовая позиция, равная 0, означает текущий бар (значение индикатора для текущего бара). При копировании заранее неизвестного количества данных в качестве массива-приемника buffer[] желательно...
 
Denis Kirichenko:
Sviluppatori, per favore rendete la funzione API copy_buffer(). Ottenere i dati dell'indicatore via analogico.

Non c'è un pacchetto di indicatori in Python? O è una specie di indicatore speciale. Questo sembra funzionare https://github.com/twopirllc/pandas-ta

twopirllc/pandas-ta
twopirllc/pandas-ta
  • twopirllc
  • github.com
Technical Analysis (TA) is an easy to use library that is built upon Python's Pandas library with more than 80 Indicators. These indicators are comminly used for financial time series datasets with columns or labels similar to: datetime, open, high, low, close, volume, et al. Many commonly used indicators are included, such as: Moving Average...
 
Vladimir Perervenko:

Non c'è un pacchetto di indicatori in Python? O è una specie di indicatore speciale. Questo sembra funzionare https://github.com/twopirllc/pandas-ta

copy_buffer() implica l'ottenimento di un array di dati per i vostri calcoli.
Ecopy_buffer() dovrebbe funzionare in entrambi i modi.
Quello che manca è un trasferimento bidirezionale dell'array.

 
Roman:

Le funzioni symbols_total e symbol_name mancano
Per ottenere una lista di simboli, come questa:

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() aggiunta la possibilità di filtrare per gruppo - group="EURUSD, "USDGBP", *RU*".
I metodi order_check(), order_send() restituiranno la richiesta iniziale di esecuzione nel campo request.

 
Roman:

Lacopy_buffer() implica l'ottenimento di un array di dati per i propri calcoli.
Ecopy_buffer() dovrebbe funzionare in entrambe le direzioni.
Quello che manca è il passaggio bidirezionale dell'array.

Ce ne sono molti su github, ci sono sia libs b/gbin che pacchetti a pagamento...

Non trasferite il modello di lavoro con MQL5 a python. Sono diversi e hanno scopi diversi.

 
Almaz:

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

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

E la lista di _todict() non è ancora in grado di restituire?

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

Non possono ancora restituire una lista di _todict()?

Sì, possono, vedi l'esempio.

import MetaTrader5 as mt5
# выведем данные о пакете MetaTrader5
print("MetaTrader5 package author: ",mt5.__author__)
print("MetaTrader5 package version: ",mt5.__version__)

# установим подключение к терминалу MetaTrader 5
if not mt5.initialize():
    print("initialize() failed")
    mt5.shutdown()

# подключимся к торговому счету с указанием пароля и сервера
authorized=mt5.login(25115284, password="gqsdfgtdm",server="MetaQuotes-Demo")
if(authorized):
    # выведем данные о торговом счете
    print(mt5.account_info())
else:
    print("failed to connect to trade account 25115284 with password=gqz0lbdm")

account_info_dict=mt5.account_info(). _asdict()
for prop in account_info_dict:
    print("{}={}".format(prop,account_info_dict[prop]))

mt5.shutdown()

Risultato

AccountInfo(login=25115284, trade_mode=0, leverage=100, limit_orders=200, margin_so_mode=0, trade_allowed=True, trade_expert=True, margin_mode=2, currency_digits=2, fifo_close=False, balance=99511.4, credit=0.0, profit=9.04, equity=99520.44, margin=98.18, margin_free=99422.26, margin_level=101365.28824607862, margin_so_call=50.0, margin_so_so=30.0, margin_initial=0.0, margin_maintenance=0.0, assets=0.0, liabilities=0.0, commission_blocked=0.0, name='MetaQuotes Dev Demo', server='MetaQuotes-Demo', currency='USD', company='MetaQuotes Software Corp.')
login=25115284
trade_mode=0
leverage=100
limit_orders=200
margin_so_mode=0
trade_allowed=True
trade_expert=True
margin_mode=2
currency_digits=2
fifo_close=False
balance=99511.4
credit=0.0
profit=9.04
equity=99520.44
margin=98.18
margin_free=99422.26
margin_level=101365.28824607862
margin_so_call=50.0
margin_so_so=30.0
margin_initial=0.0
margin_maintenance=0.0
assets=0.0
liabilities=0.0
commission_blocked=0.0
name=MetaQuotes Dev Demo
server=MetaQuotes-Demo
currency=USD
company=MetaQuotes Software Corp.
 
Rashid Umarov:

Possono, vedi esempio

Risultato

Grazie, ho visto questo esempio, funziona.

La mia domanda è un po' diversa.

    if mt5.initialize('c:\\Works\\MT5 - terminals\\RoboForex - MT5\\terminal64.exe',
                            login=500036189, server='RoboForex-MetaTrader 5', password='',  portable=True):
        positions = mt5.positions_get()
        print(positions)
        pList = []
        for elem in positions:
            pList.append(elem._asdict())

positions_get - mi restituisce una lista di TradePosition. In linea di principio, va bene, possiamo gettarlo in pandas e lavorare bene.

(TradePosition(ticket=164661016, time=1585075408, time_msc=1585075408163, time_update=1585075408, time_update_msc=1585075408163, type=1, magic=0, identifier=164661016, reason=0, volume=0.01, price_open=120.306, sl=0.0, tp=0.0, price_current=120.279, swap=0.0, profit=0.24, symbol='EURJPY', comment='', external_id=''), 
 TradePosition(ticket=164661051, time=1585075426, time_msc=1585075426062, time_update=1585075426, time_update_msc=1585075426062, type=0, magic=0, identifier=164661051, reason=0, volume=0.01, price_open=1.07798, sl=0.0, tp=0.0, price_current=1.07806, swap=0.0, profit=0.08, symbol='EURUSD', comment='', external_id=''))

Ma non si limita ai panda e se volete ottenere qualcosa di simile:

[{'ticket': 164661016, 'time': 1585075408, 'time_msc': 1585075408163, 'time_update': 1585075408, 'time_update_msc': 1585075408163, 'type': 1, 'magic': 0, 'identifier': 164661016, 'reason': 0, 'volume': 0.01, 'price_open': 120.306, 'sl': 0.0, 'tp': 0.0, 'price_current': 120.328, 'swap': 0.0, 'profit': -0.2, 'symbol': 'EURJPY', 'comment': '', 'external_id': ''}, 
{'ticket': 164661051, 'time': 1585075426, 'time_msc': 1585075426062, 'time_update': 1585075426, 'time_update_msc': 1585075426062, 'type': 0, 'magic': 0, 'identifier': 164661051, 'reason': 0, 'volume': 0.01, 'price_open': 1.07798, 'sl': 0.0, 'tp': 0.0, 'price_current': 1.07881, 'swap': 0.0, 'profit': 0.83, 'symbol': 'EURUSD', 'comment': '', 'external_id': ''}]

dobbiamo convertirlo in qualche modo, panda o per ... Sono un sacco di gesti inutili.

_asdict() è diventato molto più conveniente, se lo sviluppatore non è un programmatore MQL5, ma, diciamo, un pitonista ... o uno scienziato dei dati, l'elenco/dettato è

list/dict sono gli elementi principali di python. Molte libs usano list/dict per creare trasferimenti di dati.

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

e avere un gestore di errori per l'uso o l'assegnazione errata. Da qualche parte ... :) Potrei sbagliarmi.

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

Ce ne sono molti su github, ci sono sia libs b/gbin che pacchetti a pagamento...

Non trasferite il modello di lavoro con MQL5 a python. Sono diversi e hanno obiettivi diversi.

Cosa vuoi dire con questo? Copiare un array da mql5 a py e viceversa?
Dovresti almeno leggere attentamente di cosa stiamo parlando.
Non devi pensare solo per te stesso. Se voi non ne avete bisogno, altri ne hanno bisogno.