MetaTrader 5 Python User Group - wie man Python in Metatrader verwendet - Seite 65

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

Ich habe auf Version 2432 aktualisiert.
Aber der Fehler ist immer noch da...
Habe es sogar bei verschiedenen Brokern versucht...

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

copy_rates_from liefert nicht genügend Daten für den Zeitrahmen M1.


Ist dies die richtige Vorgehensweise?

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 )
 
Ich weiß, dass dieses Thema schnell sehr lang werden wird. Metaquotes muss für jede Sprache ein neues Unterforum (Python) einrichten.
 
Christian:

copy_rates_range liefert nicht genügend Daten für den Zeitrahmen M1.


Ist dies die richtige Vorgehensweise?

Achten Sie auf den Hinweis zum Kopierpreisbereich

Hinweis

Siehe die Funktion CopyRates() für weitere Informationen.

Das MetaTrader 5-Terminal bietet nur Balken innerhalb einer Historie, die dem Benutzer auf Charts zur Verfügung steht. Die Anzahl der Balken, die dem Benutzer zur Verfügung stehen, wird mit dem Parameter "Max. Balken im Diagramm" festgelegt.

Bei der Erstellung des 'datetime'-Objekts verwendet Python die lokale Zeitzone, während MetaTrader 5 die Tick- und Bar-Open-Zeit in der UTC-Zeitzone (ohne die Verschiebung) speichert. Daher sollte "datetime" in UTC-Zeit erstellt werden, um Funktionen ausführen zu können, die die Zeit verwenden. Die vom MetaTrader 5-Terminal empfangenen Daten haben UTC-Zeit.


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:

Achten Sie auf den Hinweis auf den Kopierkostenbereich

Es gibt einen Fehler in den Kopierraten. Ich habe dies schon mehrmals gepostet, aber niemand hat es zur Kenntnis genommen.

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
##
 
Es ist schade, aber soweit ich weiß, gibt es ein Problem mit der Initialisierung von Strukturen in MT.
 
Übrigens muss ich meine Enkelin Python vorstellen, und ich kenne ihn nicht... Auf Wiedersehen.
 

Ich habe ein Skript, das für ein paar Stunden lief. aber dann fange ich an, diese Fehler zu bekommen, Invalid_Stops, und dann ist es nicht mehr öffnen 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) 

Kann mir jemand sagen, wo ich mit der Suche nach diesem Problem beginnen soll?

Dankeschön

 
fbrand:

Ich habe ein Skript, das für ein paar Stunden lief. aber dann fange ich an, diese Fehler zu bekommen, Invalid_Stops, und dann ist es nicht mehr öffnen Trades.

Kann mir jemand sagen, wo ich mit der Suche nach diesem Problem beginnen soll?

Dankeschön

Wie hoch war der aktuelle Kurs (Bid und Ask)? Wie hoch war der Freeze Level (SYMBOL_TRADE_FREEZE_LEVEL)?