MetaTrader 5 Python User Group - Comment utiliser Python dans Metatrader - page 65

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

Mise à niveau vers la version 2432.
Mais l'erreur est toujours là...
Je l'ai essayé sur différents courtiers, même...

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

copy_rates_from ne fournit pas suffisamment de données sur la période M1.


Est-ce la bonne marche à suivre ?

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 )
 
Je sais que ce sujet va rapidement devenir très long. Metaquotes doit ajouter un nouveau sous-forum (Python) pour chaque langue.
 
Christian:

copy_rates_range ne fournit pas suffisamment de données sur l'horizon temporel M1.


Est-ce la bonne marche à suivre ?

Faites attention à la note sur la fourchette des tarifs de copie

Note

Voir la fonction CopyRates() pour plus d'informations.

Le terminal MetaTrader 5 fournit des barres uniquement dans le cadre d'un historique disponible pour un utilisateur sur les graphiques. Le nombre de barres disponibles pour les utilisateurs est défini dans le paramètre "Max. bars in chart".

Lors de la création de l'objet 'datetime', Python utilise le fuseau horaire local, alors que MetaTrader 5 enregistre les heures d'ouverture des tick et des bar dans le fuseau horaire UTC (sans le décalage). Par conséquent, 'datetime' doit être créé en temps UTC pour l'exécution des fonctions qui utilisent le temps. Les données reçues du terminal MetaTrader 5 sont à l'heure 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:

Faites attention à la note sur la fourchette des tarifs de copie

Il y a un bug dans les taux de copie. J'ai posté ceci plusieurs fois mais personne ne l'a reconnu.

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
##
 
C'est dommage, mais je crois savoir qu'il y a un problème avec l'initialisation des structures dans MT.
 
Au fait, je dois présenter ma petite-fille à Python et je ne le connais pas... Au revoir.
 

J'ai un script qui a fonctionné pendant quelques heures, mais ensuite je commence à avoir ces erreurs, Invalid_Stops, et ensuite il n'ouvre plus de trades.

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) 

Quelqu'un peut-il m'indiquer où commencer à chercher ce problème ?

Merci.

 
fbrand:

J'ai un script qui a fonctionné pendant quelques heures, mais ensuite je commence à avoir ces erreurs, Invalid_Stops, et ensuite il n'ouvre plus de trades.

Quelqu'un peut-il m'indiquer où commencer à chercher ce problème ?

Merci.

Quel était le prix actuel (Bid et Ask) ? Quel était le niveau de gel (SYMBOL_TRADE_FREEZE_LEVEL) ?