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

 
Документация по MQL5: Интеграция / MetaTrader для Python / order_send
Документация по MQL5: Интеграция / MetaTrader для Python / order_send
  • www.mql5.com
[in]  Структура типа MqlTradeRequest, которая описывает требуемое торговое действие. Обязательный неименованный параметр. Пример заполнения запроса и состав перечислений смотрите ниже. Идентификатор эксперта. Позволяет организовать аналитическую обработку торговых ордеров. Каждый эксперт может выставлять свой собственный уникальный...
 
AxxelTrader:

Actualizado para a versão 2432.
Mas o erro continua lá...
Experimentei-o em diferentes corretores até...

r = mt5.Buy(...)
if r is None:
    print(mt5.last_error())
else:
    if r.retcode ...
 

copy_rates_from não fornece dados suficientes sobre o período de tempo M1.


Será esta a linha de acção correcta?

from datetime import datetime 
import matplotlib.pyplot as plt
import pandas as pd
from pandas.plotting import register_matplotlib_converters
import pytz

register_matplotlib_converters()
import MetaTrader5 as mt5


 if not mt5.initialize():
    print("initialize() failed")
    mt5.shutdown()


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

timezone = pytz.timezone("Etc/UTC")
utc_from = datetime ( 2020 , 1 , 10 , tzinfo=timezone)


eurusd_rates_m1 = mt5.copy_rates_from("EURUSD", mt5.TIMEFRAME_M1, utc_from, 1000 )
print('M1 eurusd_rates(', len(eurusd_rates_m1), ')')
eurusd_rates_m5 = mt5.copy_rates_from("EURUSD", mt5.TIMEFRAME_M5, utc_from, 1000 )
print('M5 eurusd_rates(', len(eurusd_rates_m5), ')')
eurusd_rates_m10 = mt5.copy_rates_from("EURUSD", mt5.TIMEFRAME_M10, utc_from, 1000 )
print('M10 eurusd_rates(', len(eurusd_rates_m10), ')')
eurusd_rates_m15 = mt5.copy_rates_from("EURUSD", mt5.TIMEFRAME_M15, utc_from, 1000 )
print('M15 eurusd_rates(', len(eurusd_rates_m15), ')')
eurusd_rates_m30 = mt5.copy_rates_from("EURUSD", mt5.TIMEFRAME_M30, utc_from, 1000 )
print('M30 eurusd_rates(', len(eurusd_rates_m30), ')')


mt5.shutdown()
M1 eurusd_rates( 1 )      ???
M5 eurusd_rates( 1000 )
M10 eurusd_rates( 1000 )
M15 eurusd_rates( 1000 )
M30 eurusd_rates( 1000 )
 
Sei que este tópico rapidamente se tornará muito longo. As metaquotas precisam de acrescentar um novo subforum (Python) para cada língua.
 
Christian:

copy_rates_range não fornece dados suficientes sobre o período de tempo M1.


Será esta a linha de acção correcta?

Preste atenção à gama de taxas de cópia

Nota

Ver a função CopyRates() para mais informações.

O terminal MetaTrader 5 fornece barras apenas dentro de um histórico disponível para um utilizador nos gráficos. O número de barras disponíveis para os utilizadores é definido no parâmetro "Max. barras no gráfico".

Ao criar o objecto 'datetime', Python utiliza o fuso horário local, enquanto que o MetaTrader 5 armazena o tick e o bar aberto no fuso horário UTC (sem o turno). Portanto, a 'data/hora' deve ser criada em tempo UTC para executar funções que utilizam o tempo. Os dados recebidos do terminal MetaTrader 5 têm tempo UTC.


Documentation on MQL5: Integration / MetaTrader for Python / copy_rates_range
Documentation on MQL5: Integration / MetaTrader for Python / copy_rates_range
  • www.mql5.com
# create 'datetime' objects in UTC time zone to avoid the implementation of a local time zone offset # get bars from USDJPY M5 within the interval of 2020.01.10 00:00 - 2020.01.11 13:00 in UTC time zone                  time     open     high      low    close  tick_volume  spread  real_volume...
 
Rashid Umarov:

Preste atenção à Nota sobre a gama de taxas de cópia

Há um erro nas taxas de cópia. Afixei isto várias vezes, mas ninguém o reconheceu.

import MetaTrader5 as mt5

mt5.initialize()
maxbars = mt5.terminal_info().maxbars
for count in range(maxbars):
    rates = mt5.copy_rates_from_pos('EURUSD', mt5.TIMEFRAME_M1, 0, count)
    errno, strerror = mt5.last_error()
    if errno != mt5.RES_S_OK:
        print(f"Failed on count={count} with strerror={strerror}")
        break
mt5.shutdown()

##
# Failed on count=7844 with strerror=IPC recv failed
##
 
É uma pena, mas o meu entendimento é que existe um problema com a inicialização de estruturas em MT.
 
A propósito, tenho de apresentar a minha neta a Python e não o conheço... Adeus.
 

Tenho um guião que funciona durante algumas horas. mas depois começo a receber estes erros, Invalid_Stops, e depois já não abre mais comércios.

1.BUY order send (): by EURUSD 0.01 lots at 1.0949 

2. order_send failed, retcode = 10016 
   retcode = 10016 
   deal = 0 
   order = 0 
   volume = 0.0 
   price = 0.0 
   bid = 0.0 
   ask = 0.0 
   comment = Invalid stops 
   request_id = 0 
   retcode_external = 0 

   request = TradeRequest (action = 1, magic = 234000, order = 0, symbol = 'EURUSD', volume = 0.01, price = 1.0949, stoplimit = 0.0, sl = 1.0939, tp = 1.0979, 
   deviation = 0, type = 0, type_filling = 0, type_time = 0, expiration = 0, commen 

t = 'EURUSD Buy.', Position = 0, position_by = 0) 

Alguém pode, por favor, ajudar a orientar para onde começar a procurar este assunto?

Obrigado

 
fbrand:

Tenho um guião que funciona durante algumas horas. mas depois começo a receber estes erros, Invalid_Stops, e depois já não abre mais comércios.

Alguém pode, por favor, ajudar a orientar para onde começar a procurar este assunto?

Obrigado

Qual era o preço actual (Bid and Ask)? Qual foi o nível de congelamento (SYMBOL_TRADE_FREEZE_LEVEL)?