MetaTrader 5 Python User Group - como usar o Python no Metatrader - página 42

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

Será que as constantes também mudaram?

Na saída:

sim, as constantes têm o prefixo MT5_ removido, aqui está um exemplo de utilização:

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()

exemplo mais complexo - Expert Advisor com negociação em duas médias móveis sem utilização de histórico:

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:

Sim, as constantes têm o prefixo MT5_ removido, aqui está um exemplo de utilização:

Um exemplo mais complexo é uma EA com negociação em duas médias móveis sem utilização de histórico:

Obrigado.

A evolução da liberdade é boa. Pergunta aos promotores - onde está o roteiro para a pinova lib?

Que inovações podemos ainda esperar, o que não esperar?

 
Gostaria de uma actualização sobre a documentação, sim
 

No servidor de teste (MetaQuotes-Beta server, endereço 78.140.180.203:443) está disponível uma versão beta do terminal 2323 com novas funcionalidades. O beta público será lançado amanhã.

Lançámos também a nova versão do MetaTrader 5.0.20 para Python (pip install --upgrade metatrader5) com nova sintaxe para mudança de conta:

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")

É agora possível especificar a autorização directamente na inicialização, tanto na sua forma completa como curta.

A função de espera é abolida e agora o ciclo completo de inicialização com espera é executado directamente na inicialização, onde se pode especificar o tempo de espera em milissegundos.

A biblioteca Python já tem a garantia de encontrar a última cópia activa do terminal, mesmo que tenha sido instalada em modo portátil (/ chave portátil).


Os programas Python já são mostrados directamente no navegador:


O lançamento desta sexta-feira permitirá a sua execução, como é habitual, de scripts MQL5 e eles serão vinculados a gráficos.


Mais tarde acrescentaremos acesso a todos os indicadores (incluindo os personalizados) em modo de leitura à biblioteca Python. Isto tornará o trabalho em python mais produtivo. Mas isto ainda não é uma prioridade, fá-lo-emos muito mais tarde.

 
Renat Fatkhullin:

Lançada também uma nova versão do MetaTrader 5.0.20 para Python (pip install --upgrade metatrader5) com nova sintaxe para mudança de conta

Existem mais características do que a MQL5.

 

Em paralelo, estamos a expandir as capacidades do editor e no próximo lançamento (que não se realizará esta sexta-feira) será totalmente possível utilizar Clang/LLVM e Microsoft Visual Studio para compilar programas C++:


Talvez incluamos também C#.


Trabalho extensivo para utilizar totalmente as bases de dados SQLite: SQLite: trabalho nativo com bases de dados SQL em MQL5

Isto permite-lhe operar e trocar facilmente grandes quantidades de dados entre diferentes sistemas e dentro do terminal.

 
fxsaber:

Mais características do que a MQL5.

Estamos a chegar lá?

 
Renat Fatkhullin:

Em paralelo, estamos a expandir as capacidades do editor e no próximo lançamento (que não será na sexta-feira)
será totalmente capaz de utilizar Clang/LLVM e Microsoft Visual Studio para compilar programas C++:

Será adicionado um linker para ligar ficheiros .lib em projectos
?

 
Roman:

Para ligação de ficheiros .lib em projectos
será acrescentado um linker?

Podem ser especificadas múltiplas variantes alvo dentro dos projectos:



Os ficheiros DLL/EXE têm definições personalizadas, bibliotecas e parâmetros adicionais para o compilador:

O linker é automaticamente utilizado a partir de Clang ou Visual Studio. Não precisa de ser explicitamente especificado.

 
fxsaber:

Existem mais características do que a MQL5.

É como resultado que a plataforma MetaTrader 5 tem mais características.

Por si só, qualquer linguagem é inútil sem uma plataforma de informação e comércio (uma plataforma não é um terminal, mas todo um complexo de servidores com uma infra-estrutura e um ecossistema) que a alimenta com dados e fornece a execução do comércio.

O nosso objectivo é apresentar uma plataforma sem falhas com um vasto conjunto de ferramentas para algotrading, cobrindo diferentes segmentos de consumidores.

Python é um claro vencedor no ML e uma linguagem muito eficaz para fazer investigação. Mesmo que não se consiga entrar num testador, também é bom no modo de integração directa.


A propósito, ao contrário de outras bibliotecas Python (muitas vezes escritas de frente e mal optimizadas), optimizámos fortemente o pagamento de grandes quantidades de dados cartográficos. Isto significa que se pode obter uma história profunda de forma eficiente e rápida na memória.

Razão: