
Erstellen von MQL5-ähnlichen Handelsklassen in Python für MetaTrader 5
Inhalt
- Einführung
- Die Klasse CAccountInfo
- Die Klasse CSymbolInfo
- Die Klasse COrderInfo
- Die Klasse CHistoryOrderInfo
- Die Klasse CPositionInfo
- Die Klasse CDealInfo
- Die Klasse CTerminalInfo
- Die Klasse CTrade
- Schlussfolgerung
Einführung
Die Erstellung von algorithmischen Handelssystemen in der Programmiersprache MQL5 wurde durch die in MetaEditor vorinstallierten Standardbibliotheken erleichtert. Diese Module (Bibliotheken) enthalten Funktionen und Variablen, die den Prozess der Eröffnung, Validierung, Schließung von Dealen usw. vereinfachen.
Ohne diese Abhängigkeiten wird es schwieriger, auch nur ein einfaches Programm zu schreiben, z. B. ein einfaches Skript zur Eröffnung einer Kaufposition (Handel).
Ohne die Klasse CTrade
void OnStart() { MqlTradeRequest request; MqlTradeResult result; MqlTick ticks; SymbolInfoTick(Symbol(), ticks); //--- setting a trade request ZeroMemory(request); request.action =TRADE_ACTION_DEAL; request.symbol =Symbol(); request.magic =2025; request.volume =0.01; request.type =ORDER_TYPE_BUY; request.price =ticks.ask; request.sl =0; request.tp =0; request.deviation = 10; // Max price slippage in points request.magic = 2025; request.comment = "Buy Order"; request.type_filling= ORDER_FILLING_IOC; // or ORDER_FILLING_IOC, ORDER_FILLING_RETURN request.type_time = ORDER_TIME_GTC; // Good till canceled //--- action and return the result if(!OrderSend(request, result)) { Print("OrderSend failed retcode: ", result.retcode); } }
Mit der Klasse CTrade
#include <Trade\Trade.mqh> CTrade m_trade; //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { //--- MqlTick ticks; SymbolInfoTick(Symbol(), ticks); m_trade.SetTypeFillingBySymbol(Symbol()); m_trade.SetExpertMagicNumber(2025); m_trade.SetDeviationInPoints(10); //Slippage m_trade.Buy(0.01, Symbol(), ticks.ask,0,0,"Buy Order"); }
Beide Funktionen eröffnen eine Kaufposition in MetaTrader 5, aber der erste Ansatz ist sehr grob, zeitaufwändig und erhöht die Wahrscheinlichkeit von Fehlern aufgrund der großen Anzahl von Codezeilen, die Sie schreiben müssen, um eine einfache Funktionalität zu erhalten.
Ganz zu schweigen davon, dass man dafür technisch versierter sein muss (um alles zu verstehen, was beim Senden einer Kaufposition im MetaTrader 5 abläuft).
Es gibt ein Python-Paket, bekannt als MetaTrader 5, das Python-Entwicklern den Zugang zur Plattform, die Möglichkeit, fast alle Informationen von der Plattform zu erhalten (Symbole, geöffnete Positionen usw.) und die Möglichkeit, einige Befehle zum Eröffnen, Ändern, Löschen von Dealen usw. zu senden. Ähnlich wie mit der Programmiersprache MQL5.
So nützlich dieses Paket auch ist, es enthält keine integrierten Module, wie sie in der Sprache MQL5 vorhanden sind, um uns bei der Entwicklung zu helfen.
Ähnlich wie beim ersten Programmbeispiel müssen Sie beim Schreiben eines einfachen Programms in Python mehr Codezeilen schreiben, und was noch schlimmer ist: Das MetaTrade5-Python-Paket arbeitet nicht gut mit den meisten integrierten Entwicklungsumgebungen (IDEs) wie Visual Studio Code zusammen, was bedeutet, dass Sie die sehr nützliche Intellisense-Codierungsunterstützung nicht erhalten.
Aufgrund der fehlenden Unterstützung von Intellisense in IDE(s) für dieses Paket werden Sie sich oft dabei ertappen, dass Sie für einfache Konzepte, die Sie vergessen haben, in der Dokumentation nachschlagen, anstatt sie in der IDE herauszufinden. Dies führt zu einer schrecklichen Erfahrung bei der Arbeit mit diesem Paket.
In diesem Artikel werden wir die Handelsklassen in Python auf dem MetaTrader 5-Paket implementieren, um uns zu helfen, Programme effektiv in Python wie in MQL5 zu schreiben.
Die Klasse CAccountInfo
In MQL5 ist diese Klasse für die Arbeit mit den Eigenschaften des Handelskontos. Auf alle Informationen über das Handelskonto bei einem Broker kann mit dieser Klasse zugegriffen werden. Erstellen wir ihr Äquivalent in Python.
Python Nutzerdefinierte Handelsklasse CAccountInfo | MQL5 integrierte Handelsklasse CAccountInfo | Beschreibung |
---|---|---|
Eigenschaften vom Typ Integer & String | ||
login() | Login | Ruft die Kontonummer ab. |
trade_mode() | TradeMode | Ruft den Handelsmodus ab. |
trade_mode_description() | TradeModeDescription | Ruft den Handelsmodus als String ab. |
leverage() | Leverage | Ermittelt den Betrag der gegebenen Hebelwirkung. |
stopout_mode() | StopoutMode | Ruft den Modus für die Einstellung der Abschaltung ab. |
stopout_mode_description() | StopoutModeDescription | Ruft den Modus für den Stop-Out als String ab. |
margin_mode() | MarginMode | Ruft den Modus für die Berechnung des Spielraums ab. |
margin_mode_description() | MarginModeDescription | Ruft den Modus der Margenberechnung als String ab. |
trade_allowed() | TradeAllowed | Ermittelt das Flag der Handelszulage. |
trade_expert() | TradeExpert | Ruft das Flag der automatischen Handelserlaubnis ab. |
limit_orders() | LimitOrders | Ermittelt die maximale Anzahl der zulässigen schwebenden Aufträge. |
Eigenschaften des Typs Double | ||
balance() | Balance | Ruft den Saldo des MetaTrader 5-Kontos ab. |
credit() | Credit | Ermittelt den Betrag des gegebenen Kredits. |
profit() | Profit | Ermittelt den Betrag des aktuellen Gewinns auf einem Konto |
equity() | Equity | Ruft den Betrag des aktuellen Eigenkapitals auf dem Konto ab. |
margin() | Margin | Ruft den Betrag der reservierten Marge ab. |
free_margin() | FreeMargin | Ermittelt den Betrag der freien Marge. |
margin_level() | MarginLevel | Ermittelt die Höhe des Spielraums. |
margin_call() | MarginCall | Ruft die Höhe der Marge für die Einzahlung ab. |
margin_stopout() | MarginStopOut | Ermittelt die Höhe der Marge für den Stop-Out. |
Eigenschaften der Textart | ||
name() | Name | Ermittelt den Kontonamen |
server() | Server | Ermittelt den Namen des Handelsservers |
company() | Company | Ruft den Namen des Unternehmens ab, das das Konto betreut |
currency() | Currency | Ruft den Namen der Einzahlungswährung ab. |
Zusätzliche Methoden | ||
margin_check(self, symbol, order_type, volume, price) | MarginCheck | Ruft den Betrag der Marge ab, der für die Ausführung einer Handelsoperation erforderlich ist. |
free_margin_check(self, symbol, order_type, volume, price) | FreeMarginCheck | Ermittelt den Betrag der freien Marge, der nach der Ausführung der Handelsoperation verbleibt. |
order_profit_check(self, symbol, order_type, volume, price_open, price_close) | OrderProfitCheck | Ermittelt den geschätzten Gewinn auf der Grundlage der übergebenen Parameter. |
max_lot_check(self, symbol, order_type, price, percent=100) | MaxLotCheck | Ermittelt das maximal mögliche Volumen der Handelsoperation. |
Beispiel für die Verwendung
import MetaTrader5 as mt5 from Trade.AccountInfo import CAccountInfo if not mt5.initialize(r"c:\Users\Omega Joctan\AppData\Roaming\Pepperstone MetaTrader 5\terminal64.exe"): print("Failed to initialize Metatrader5 Error = ",mt5.last_error()) quit() acc = CAccountInfo() print(f""" Account Information ------------------- Login: {acc.login()} Name: {acc.name()} Server: {acc.server()} Company: {acc.company()} Currency: {acc.currency()} Trade Mode: {acc.trade_mode()} ({acc.trade_mode_description()}) Leverage: {acc.leverage()} Stopout Mode: {acc.stopout_mode()} ({acc.stopout_mode_description()}) Margin Mode: {acc.margin_mode()} ({acc.margin_mode_description()}) Trade Allowed: {acc.trade_allowed()} Trade Expert: {acc.trade_expert()} Limit Orders: {acc.limit_orders()} ------------------- Balance: {acc.balance()} Credit: {acc.credit()} Profit: {acc.profit()} Equity: {acc.equity()} Margin: {acc.margin()} Free Margin: {acc.free_margin()} Margin Level: {acc.margin_level()} Margin Call: {acc.margin_call()} Margin StopOut: {acc.margin_stopout()} ------------------- """) mt5.shutdown()
Ausgabe:
Account Information ------------------- Login: 61346344 Name: John Doe Server: MetaQuotes-Demo Company: MetaQuotes Software Corp Currency: USD Trade Mode: 0 (Demo) Leverage: 400 Stopout Mode: 0 (Percent) Margin Mode: 2 (Retail Hedging) Trade Allowed: True Trade Expert: True Limit Orders: 500 ------------------- Balance: 928.42 Credit: 0.0 Profit: -2.21 Equity: 926.21 Margin: 2.81 Free Margin: 923.4 Margin Level: 32961.20996441281 Margin Call: 90.0 Margin StopOut: 20.0 -------------------
Die Klasse CSymbolInfo
Diese Klasse ermöglicht den Zugriff auf die Symboleigenschaften.
Pythons nutzerdefinierte Klasse CSymbolInfo | MQL5 integrierte Klasse CSymbolInfo | Beschreibung |
---|---|---|
Kontrolle | ||
refresh() | Refresh | Aktualisiert die Symboldaten. |
refresh_rates() | RefreshRates | Aktualisiert die Symbolpreise |
Eigenschaften | ||
name() | Name | Ruft den Symbolnamen ab. |
select(self, select=True) | Select | Fügt das Symbol zur „Marktbeobachtung“ hinzu bzw. entfernt es daraus. |
is_synchronized() | IsSynchronized | Überprüft die Synchronisierung der Symbole mit dem Server. |
Volumes | ||
volume() | Volume | Ermittelt das Volumen des letzten Deals. |
volume_high() | VolumeHigh | Ermittelt das maximale Volumen für einen Tag |
volume_low() | VolumeLow | Erreicht das kleinste Volumen für einen Tag. |
Verschiedenes | ||
time() | Time | Ermittelt den Zeitpunkt des letzten Angebots. |
spread() | Spread | Ermittelt den Betrag der Spanne (in Punkten). |
spread_float() | SpreadFloat | Ermittelt das Flag des variablen Spreads. |
ticks_book_depth() | TicksBookDepth | Ermittelt die Tiefe der Speicherung von Ticks. |
Level | ||
stops_level() | StopsLevel | Ermittelt den minimalen Abstand für Aufträge (in Punkten). |
freeze_level() | FreezeLevel | Ermittelt den Abstand der eingefrorenen Handelsoperationen (in Punkten). |
Geldkurs | ||
bid() | Bid | Ermittelt den aktuellen Geldkurs. |
bid_high() | BidHigh | Ermittelt den maximalen Geldkurs für einen Tag. |
bid_low() | BidLow | Ermittelt den kleinsten Geldkurs für einen Tag. |
Briefkurs | ||
ask() | Ask | Ermittelt den aktuellen Briefkurs |
ask_high() | AskHigh | Ermittelt den maximalen Briefkurs für einen Tag |
ask_low() | AskLow | Ermittelt den minimalen Briefkurs für einen Tag |
Preise | ||
last() | Last | Gibt den aktuellen letzten Preis zurück |
last_high() | LastHigh | Gibt den maximalen letzten Preis für einen Tag zurück |
last_low() | LastLow | Gibt den minimalen letzten Preis für einen Tag zurück |
Handelsformen | ||
trade_calc_mode() | TradeCalcMode | Ruft den Modus der Vertragskostenberechnung im Ganzzahlformat ab. |
trade_calc_mode_description() | TradeCalcModeDescription | Ruft den Modus der Vertragskostenberechnung im String-Format ab. |
trade_mode() | TradeMode | Ruft die Art der Auftragsausführung im Ganzzahlformat ab. |
trade_mode_description() | TradeModeDescription | Ruft die Art der Auftragsausführung im String-Format ab. |
trade_execution() | TradeExecution | Ruft den Handelsausführungsmodus im Ganzzahlformat ab. |
trade_execution_description() | TradeExecutionDescription | Ruft den Handelsausführungsmodus im String-Format ab |
Swaps | ||
swap_mode() | SwapMode | Ermittelt den Swap-Berechnungsmodus im Ganzzahlformat |
swap_mode_description() | SwapModeDescription | Ermittelt den Swap-Berechnungsmodus im String-Format |
swap_rollover_3days() | SwapRollover3days | Ermittelt den Tag der dreifachen Tauschgebühr als Ganzzahl |
swap_rollover_3days_description() | SwapRollover3daysDescription | Ruft den Tag der dreifachen Tauschgebühr als String ab. |
Margin | ||
margin_initial() | MarginInitial | Ermittelt den Wert der Anfangsmarge |
margin_maintenance() | MarginMaintenance | Ermittelt den Wert der Haltemarge |
margin_hedged() | Gibt den abgesicherten Margin-Wert für das angegebene Symbol zurück. | |
margin_hedged_use_leg() | Gibt einen booleschen Wert zurück, der angibt, ob die abgesicherte Marge für jedes Bein (Positionsseite) einzeln gilt. | |
Informationen zu den Ticks | ||
digits() | Digits | Ermittelt die Anzahl der Dezimalstellen nach dem Punkt |
point() | Point | Ermittelt den Wert eines Punktes |
tick_value() | TickValue | Ermittelt den Tickwert (minimale Preisänderung) |
tick_value_profit() | TickValueProfit | Ermittelt den berechneten Tickpreis einer profitablen Position |
tick_value_loss() | TickValueLoss | Ermittelt den berechneten Tickpreis für eine Verlustposition |
tick_size() | TickSize | Ermittelt die minimale Preisänderung |
Kontraktgrößen | ||
contract_size() | ContractSize | Ermittelt den Betrag des Handelsvertrags |
lots_min() | LotsMin | Erzielt das minimale Volumen, um ein Deal abzuschließen |
lots_max() | LotsMax | Erzielt das maximale Volumen, um ein Deal abzuschließen |
lots_step() | LotsStep | Erreicht die minimale Veränderung des Volumens, um ein Deal abzuschließen |
lots_limit() | LotsLimit | Ermittelt das maximal zulässige Volumen von offenen Positionen und schwebenden Aufträgen in beiden Richtungen für ein Symbol |
Größen des Swaps | ||
swap_long() | SwapLong | Ermittelt den Wert des Swaps einer Kaufposition |
swap_short() | SwapShort | Ermittelt den Wert des Swaps einer Verkaufsposition |
Informationen zu Symbolen/Währungen | ||
currency_base() | CurrencyBase | Ermittelt den Namen der Basiswährung des Symbols |
currency_profit() | CurrencyProfit | Ermittelt den Namen der Gewinnwährung |
currency_margin() | CurrencyMargin | Ruft die Marge des Symbolnamens ab |
bank() | Bank | Ermittelt den Namen der aktuellen Quelle der Preise |
description() | Description | Liefert die Beschreibung eines Symbols in der Textform |
path() | Path | Ermittelt den Pfad im Symbolbaum |
page() | Die Adresse einer Webseite mit Informationen über das Symbol | |
Informationen zur Sitzung | ||
session_deals() | SessionDeals | Ermittelt die Anzahl der Deals in der aktuellen Sitzung |
session_buy_orders() | SessionBuyOrders | Ermittelt die Anzahl der aktuellen Kaufaufträge |
session_sell_orders() | SessionSellOrders | Ermittelt die Anzahl der aktuellen Verkaufsaufträge |
session_turnover() | SessionTurnover | Ruft die Zusammenfassung des Umsatzes der aktuellen Sitzung ab |
session_interest() | SessionInterest | Ruft die Zusammenfassung des offenen Interesses der aktuellen Sitzung ab |
session_buy_orders_volume() | SessionBuyOrdersVolume | Ermittelt das Volumen der Kaufaufträge |
session_sell_orders_volume() | SessionSellOrdersVolume | Ermittelt das Volumen der Verkaufsaufträge |
session_open() | SessionOpen | Ermittelt den Eröffnungskurs der aktuellen Sitzung |
session_close() | SessionClose | Ermittelt den Schlusskurs der aktuellen Sitzung |
session_aw() | SessionAW | Ermittelt den durchschnittlichen gewichteten Preis der aktuellen Sitzung |
session_price_settlement() | SessionPriceSettlement | Ermittelt den Abrechnungspreis der aktuellen Sitzung |
session_price_limit_min() | SessionPriceLimitMin | Ermittelt den Mindestpreis der aktuellen Sitzung |
session_price_limit_max() | SessionPriceLimitMax | Ermittelt den Höchstpreis der aktuellen Sitzung |
Dies sind einige der Methoden in der Python-Klasse, eine vollständige Liste ist in der Datei SymbolInfo.py zu finden.
Beispiel für die Verwendung
import MetaTrader5 as mt5 from Trade.SymbolInfo import CSymbolInfo if not mt5.initialize(r"c:\Users\Omega Joctan\AppData\Roaming\Pepperstone MetaTrader 5\terminal64.exe"): print("Failed to initialize Metatrader5 Error = ",mt5.last_error()) quit() m_symbol = CSymbolInfo("EURUSD") print(f""" Symbol Information --------------------- Name: {m_symbol.name()} Selected: {m_symbol.select()} Synchronized: {m_symbol.is_synchronized()} --- Volumes --- Volume: {m_symbol.volume()} Volume High: {m_symbol.volume_high()} Volume Low: {m_symbol.volume_low()} --- Time & Spread --- Time: {m_symbol.time()} Spread: {m_symbol.spread()} Spread Float: {m_symbol.spread_float()} Ticks Book Depth: {m_symbol.ticks_book_depth()} --- Trade Levels --- Stops Level: {m_symbol.stops_level()} Freeze Level: {m_symbol.freeze_level()} --- Bid Parameters --- Bid: {m_symbol.bid()} Bid High: {m_symbol.bid_high()} Bid Low: {m_symbol.bid_low()} --- Ask Parameters --- Ask: {m_symbol.ask()} Ask High: {m_symbol.ask_high()} Ask Low: {m_symbol.ask_low()} --- Last Parameters --- Last: {m_symbol.last()} Last High: {m_symbol.last_high()} Last Low: {m_symbol.last_low()} --- Order & Trade Modes --- Trade Calc Mode: {m_symbol.trade_calc_mode()} ({m_symbol.trade_calc_mode_description()}) Trade Mode: {m_symbol.trade_mode()} ({m_symbol.trade_mode_description()}) Trade Execution Mode: {m_symbol.trade_execution()} ({m_symbol.trade_execution_description()}) --- Swap Terms --- Swap Mode: {m_symbol.swap_mode()} ({m_symbol.swap_mode_description()}) Swap Rollover 3 Days: {m_symbol.swap_rollover_3days()} ({m_symbol.swap_rollover_3days_description()}) --- Futures Dates --- Start Time: {m_symbol.start_time()} Expiration Time: {m_symbol.expiration_time()} --- Margin Parameters --- Initial Margin: {m_symbol.margin_initial()} Maintenance Margin: {m_symbol.margin_maintenance()} Hedged Margin: {m_symbol.margin_hedged()} Hedged Margin Use Leg: {m_symbol.margin_hedged_use_leg()} --- Tick Info --- Digits: {m_symbol.digits()} Point: {m_symbol.point()} Tick Value: {m_symbol.tick_value()} Tick Value Profit: {m_symbol.tick_value_profit()} Tick Value Loss: {m_symbol.tick_value_loss()} Tick Size: {m_symbol.tick_size()} --- Contracts sizes--- Contract Size: {m_symbol.contract_size()} Lots Min: {m_symbol.lots_min()} Lots Max: {m_symbol.lots_max()} Lots Step: {m_symbol.lots_step()} Lots Limit: {m_symbol.lots_limit()} --- Swap sizes Swap Long: {m_symbol.swap_long()} Swap Short: {m_symbol.swap_short()} --- Currency Info --- Currency Base: {m_symbol.currency_base()} Currency Profit: {m_symbol.currency_profit()} Currency Margin: {m_symbol.currency_margin()} Bank: {m_symbol.bank()} Description: {m_symbol.description()} Path: {m_symbol.path()} Page: {m_symbol.page()} --- Session Info --- Session Deals: {m_symbol.session_deals()} Session Buy Orders: {m_symbol.session_buy_orders()} Session Sell Orders: {m_symbol.session_sell_orders()} Session Turnover: {m_symbol.session_turnover()} Session Interest: {m_symbol.session_interest()} Session Buy Volume: {m_symbol.session_buy_orders_volume()} Session Sell Volume: {m_symbol.session_sell_orders_volume()} Session Open: {m_symbol.session_open()} Session Close: {m_symbol.session_close()} Session AW: {m_symbol.session_aw()} Session Price Settlement: {m_symbol.session_price_settlement()} Session Price Limit Min: {m_symbol.session_price_limit_min()} Session Price Limit Max: {m_symbol.session_price_limit_max()} --------------------- """) mt5.shutdown()
Ausgabe:
Symbol Information --------------------- Name: EURUSD Selected: True Synchronized: True --- Volumes --- Volume: 0 Volume High: 0 Volume Low: 0 --- Time & Spread --- Time: 2025-05-21 20:30:36 Spread: 0 Spread Float: True Ticks Book Depth: 0 --- Trade Levels --- Stops Level: 0 Freeze Level: 0 --- Bid Parameters --- Bid: 1.1335600000000001 Bid High: 1.13623 Bid Low: 1.12784 --- Ask Parameters --- Ask: 1.1335600000000001 Ask High: 1.13623 Ask Low: 1.12805 --- Last Parameters --- Last: 0.0 Last High: 0.0 Last Low: 0.0 --- Order & Trade Modes --- Trade Calc Mode: 0 (Calculation of profit and margin for Forex) Trade Mode: 4 (No trade restrictions) Trade Execution Mode: 2 (Market execution) --- Swap Terms --- Swap Mode: 1 (Swaps are calculated in points) Swap Rollover 3 Days: 3 (Wednesday) --- Futures Dates --- Start Time: 0 Expiration Time: 0 --- Margin Parameters --- Initial Margin: 100000.0 Maintenance Margin: 0.0 Hedged Margin: 0.0 Hedged Margin Use Leg: False --- Tick Info --- Digits: 5 Point: 1e-05 Tick Value: 1.0 Tick Value Profit: 1.0 Tick Value Loss: 1.0 Tick Size: 1e-05 --- Contracts sizes--- Contract Size: 100000.0 Lots Min: 0.01 Lots Max: 100.0 Lots Step: 0.01 Lots Limit: 0.0 --- Swap sizes Swap Long: -8.99 Swap Short: 4.5 --- Currency Info --- Currency Base: EUR Currency Profit: USD Currency Margin: EUR Bank: Pepperstone Description: Euro vs US Dollar Path: Markets\Forex\Majors\EURUSD Page: --- Session Info --- Session Deals: 1 Session Buy Orders: 647 Session Sell Orders: 2 Session Turnover: 10.0 Session Interest: 0.0 Session Buy Volume: 3.0 Session Sell Volume: 13.0 Session Open: 1.12817 Session Close: 1.12842 Session AW: 0.0 Session Price Settlement: 0.0 Session Price Limit Min: 0.0 Session Price Limit Max: 0.0 ---------------------
Die Klasse COrderInfo
Diese Klasse ermöglicht den Zugriff auf die Eigenschaften der schwebenden Aufträge.
Pythons nutzerdefinierte Klasse COrderInfo | MQL5 integrierte Klasse COrderInfo | Beschreibung |
---|---|---|
Eigenschaften vom Typ integer & datetime | ||
ticket() | Ticket | Ruft das Ticket eines Auftrags ab, das zuvor für den Zugriff ausgewählt wurde. |
type_time() | TypeTime | Ermittelt die Art des Auftrags zum Zeitpunkt des Ablaufs. |
type_time_description() | TypeTimeDescription | Liefert die Auftragsart nach Ablauf als String |
time_setup() | TimeSetup | Ermittelt den Zeitpunkt der Auftragserteilung. |
time_setup_msc() | TimeSetupMsc | Erhält die Zeit der Auftragserteilung in Millisekunden seit dem 01.01.1970. |
order_type() | OrderType | Ruft den Auftragstyp im Ganzzahlformat ab. |
order_type_description() | OrderTypeDescription | Liefert den Auftragstyp als String |
state() | State | Ruft den Auftragsstatus als Ganzzahl ab. |
state_description() | StateDescription | Ruft den Auftragsstatus als String ab. |
magic() | Magic | Ruft die ID des Experten ab, der den Auftrag aufgegeben hat. |
position_id() | PositionId | Ermittelt die ID der Position. |
type_filling() | TypeFilling | Ruft die Art der Auftragsausführung durch Rest als Ganzzahl ab. |
type_filling_description() | TypeFillingDescription | Ruft den Typ der Orderausführung nach Restbetrag als Zeichenfolge ab. |
time_done() | TimeDone | Ermittelt den Zeitpunkt der Auftragsausführung oder -stornierung. |
time_done_msc() | TimeDoneMsc | Empfängt die Zeit der Auftragsausführung oder -stornierung in Millisekunden seit dem 01.01.1970. |
time_expiration() | TimeExpiration | Ermittelt den Zeitpunkt des Ablaufs des Auftrags. |
Eigenschaften des Typs Double | ||
volume_initial() | VolumeInitial | Ermittelt das ursprüngliche Auftragsvolumen. |
volume_current() | VolumeCurrent | Ermittelt das noch nicht abgewickelte Volumen des Auftrags. |
price_open() | PriceOpen | Ermittelt den Preis des Auftrag. |
price_current() | PriceCurrent | Ermittelt den aktuellen Preis nach Auftragssymbol. |
stop_loss() | StopLoss | Ermittelt den Stop-Loss des Auftrags. |
take_profit() | TakeProfit | Ermittelt den Take-Profit des Auftrags. |
price_stop_limit() | PriceStopLimit | Ermittelt den Preis eines Limitauftrags. |
Zugriff auf Texteigenschaften | ||
comment() | Symbol | Ermittelt den Kommentar des Auftrags. |
symbol() | Comment | Ruft den Namen des Auftragssymbols ab. |
Auswahl | ||
select_order(self, order) -> bool | Wählt eine Order anhand ihres Objekts (Dictionaries) aus der Liste der Orders aus, die von der Funktion MetaTrader5.orders_get() zurückgegeben wird. |
Beispiel für die Verwendung
import MetaTrader5 as mt5 from Trade.OrderInfo import COrderInfo if not mt5.initialize(r"c:\Users\Omega Joctan\AppData\Roaming\Pepperstone MetaTrader 5\terminal64.exe"): print("Failed to initialize Metatrader5 Error = ",mt5.last_error()) quit() # Get all orders from MT5 orders = mt5.orders_get() # Loop and print info m_order = COrderInfo() for i, order in enumerate(orders): if m_order.select_order(order=order): print(f""" Order #{i} --- Integer & datetime type properties --- Ticket: {m_order.ticket()} Type Time: {m_order.type_time()} ({m_order.type_time_description()}) Time Setup: {m_order.time_setup()} Time Setup (ms): {m_order.time_setup_msc()} State: {m_order.state()} ({m_order.state_description()}) Order Type: {m_order.order_type()} ({m_order.order_type_description()}) Magic Number: {m_order.magic()} Position ID: {m_order.position_id()} Type Filling: {m_order.type_filling()} ({m_order.type_filling_description()}) Time Done: {m_order.time_done()} Time Done (ms): {m_order.time_done_msc()} Time Expiration: {m_order.time_expiration()} External ID: {m_order.external_id()} --- Double type properties --- Volume Initial: {m_order.volume_initial()} Volume Current: {m_order.volume_current()} Price Open: {m_order.price_open()} Price Current: {m_order.price_current()} Stop Loss: {m_order.stop_loss()} Take Profit: {m_order.take_profit()} Price StopLimit: {m_order.price_stop_limit()} --- Text type properties --- Comment: {m_order.comment()} Symbol: {m_order.symbol()} """) mt5.shutdown()
Ausgabe:
Order #0 --- Integer & datetime type properties --- Ticket: 153201235 Type Time: 2 (ORDER_TIME_SPECIFIED) Time Setup: 2025-05-21 23:56:16 Time Setup (ms): 1747860976672 State: 1 (Order accepted) Order Type: 3 (Sell Limit pending order) Magic Number: 1001 Position ID: 0 Type Filling: 2 (IOC (Immediate or Cancel)) Time Done: 1970-01-01 03:00:00 Time Done (ms): 0 Time Expiration: 2025-05-21 23:57:14.940000 External ID: --- Double type properties --- Volume Initial: 0.01 Volume Current: 0.01 Price Open: 1.13594 Price Current: 1.1324 Stop Loss: 0.0 Take Profit: 0.0 Price StopLimit: 0.0 --- Text type properties --- Comment: Sell Limit Order Symbol: EURUSD
Die Klasse CHistoryOrderInfo
Diese Klasse ermöglicht einen einfachen Zugriff auf die Eigenschaften historischer Aufträge.
Pythons nutzerdefinierte Klasse CHistoryOrderInfo | MQL5 integrierte Klasse CHistoryOrderInfo | Beschreibung |
---|---|---|
Eigenschaften vom Typ Integer, Datetime und String | ||
time_setup() | TimeSetup | Ermittelt den Zeitpunkt der Auftragserteilung. |
time_setup_msc() | TimeSetupMsc | Gibt die Zeit der Auftragserteilung in Millisekunden seit dem 01.01.1970 zurück |
time_done() | TimeDone | Ermittelt den Zeitpunkt der Auftragsausführung oder -stornierung. |
time_done_msc() | TimeDoneMsc | Gibt die Zeit der Auftragsausführung oder -stornierung in Millisekunden seit dem 01.01.1970 zurück |
magic() | Magic | Ruft die ID eines Expertenberaters ab, der einen ausgewählten Auftrag erteilt hat |
ticket() | Gibt das Ticket des ausgewählten Auftrags zurück. | |
order_type() | OrderType | Gibt den Typ des ausgewählten Auftrags zurück. |
order_type_description() | OrderTypeDescription | Gibt den Typ des ausgewählten Auftrags als String zurück |
state() | State | Gibt den Auftragsstatus als Ganzzahl zurück. |
state_description() | StateDescription | Gibt den Status des Auftrags als String zurück. |
time_expiration() | TimeExpiration | Ermittelt den Zeitpunkt des Ablaufs des ausgewählten Auftrags. |
type_filling() | TypeFilling | Liefert die Art der Auftragsausführung nach Restwert im Ganzzahlformat. |
type_filling_description() | TypeFillingDescription | Ruft den Typ der Orderausführung nach Restbetrag als Zeichenfolge ab. |
type_time() | TypeTime | Liefert den Typ der ausgewählten Auftragsart zum Zeitpunkt des Verfalls als Ganzzahl. |
type_time_description() | TypeTimeDescription | Liefert den ausgewählten Auftragstyp zum Zeitpunkt des Verfalls im String-Format. |
position_id() | PositionId | Ermittelt die Positions-ID |
Eigenschaften des Typs Double | ||
volume_initial() | VolumeInitial | Ermittelt das Anfangsvolumen des ausgewählten Auftrags |
volume_current() | VolumeCurrent | Ermittelt das nicht erfüllte Volumen des ausgewählten Auftrags. |
price_open() | PriceOpen | Ermittelt den Preis des ausgewählten Auftrags. |
price_current() | PriceCurrent | Ermittelt den aktuellen Preis nach Auftragssymbol. |
stop_loss() | StopLoss | Ermittelt den Stop-Loss des ausgewählten Auftrags. |
take_profit() | TakeProfit | Ermittelt den Take-Profit des ausgewählten Auftrags. |
price_stop_limit() | PriceStopLimit | Ermittelt den Preis eines ausgewählten Limitauftrags. |
Text-Eigenschaften | ||
symbol() | Symbol | Gibt das Symbol eines ausgewählten Auftrags zurück. |
comment() | Comment | Gibt den Kommentar eines ausgewählten Auftrags zurück. |
Auswahl | ||
select_order(self, order) -> bool | Wählt eine Order anhand ihres Objekts aus einer Liste von Objekten (Dictionaries) aus, die von der Funktion MetaTrader5.history_orders_get zurückgegeben wird. |
Beispiel für die Verwendung
import MetaTrader5 as mt5 from Trade.HistoryOrderInfo import CHistoryOrderInfo from datetime import datetime, timedelta if not mt5.initialize(r"c:\Users\Omega Joctan\AppData\Roaming\Pepperstone MetaTrader 5\terminal64.exe"): print("Failed to initialize Metatrader5 Error = ",mt5.last_error()) quit() # The date range from_date = datetime.now() - timedelta(hours=5) to_date = datetime.now() # Get history orders history_orders = mt5.history_orders_get(from_date, to_date) if history_orders == None: print(f"No deals, error code={mt5.last_error()}") exit() # m_order instance m_order = CHistoryOrderInfo() # Loop and print each order for i, order in enumerate(history_orders): if m_order.select_order(order): print(f""" History Order #{i} --- Integer, Datetime & String type properties --- Time Setup: {m_order.time_setup()} Time Setup (ms): {m_order.time_setup_msc()} Time Done: {m_order.time_done()} Time Done (ms): {m_order.time_done_msc()} Magic Number: {m_order.magic()} Ticket: {m_order.ticket()} Order Type: {m_order.order_type()} ({m_order.type_description()}) Order State: {m_order.state()} ({m_order.state_description()}) Expiration Time: {m_order.time_expiration()} Filling Type: {m_order.type_filling()} ({m_order.type_filling_description()}) Time Type: {m_order.type_time()} ({m_order.type_time_description()}) Position ID: {m_order.position_id()} Position By ID: {m_order.position_by_id()} --- Double type properties --- Volume Initial: {m_order.volume_initial()} Volume Current: {m_order.volume_current()} Price Open: {m_order.price_open()} Price Current: {m_order.price_current()} Stop Loss: {m_order.stop_loss()} Take Profit: {m_order.take_profit()} Price Stop Limit: {m_order.price_stop_limit()} --- Access to text properties --- Symbol: {m_order.symbol()} Comment: {m_order.comment()} """) mt5.shutdown()
Ausgabe:
History Order #79 --- Integer, Datetime & String type properties --- Time Setup: 2025-05-21 23:56:17 Time Setup (ms): 1747860977335 Time Done: 2025-05-22 01:57:47 Time Done (ms): 1747868267618 Magic Number: 1001 Ticket: 153201241 Order Type: 5 (Sell Stop pending order) Order State: 4 (Order fully executed) Expiration Time: 2025-05-21 23:57:14.940000 Filling Type: 1 (FOK (Fill or Kill)) Time Type: 2 (ORDER_TIME_SPECIFIED) Position ID: 153201241 Position By ID: 0 --- Double type properties --- Volume Initial: 0.01 Volume Current: 0.0 Price Open: 1.13194 Price Current: 1.13194 Stop Loss: 0.0 Take Profit: 0.0 Price Stop Limit: 0.0 --- Access to text properties --- Symbol: EURUSD Comment: Sell Stop Order
Die Klasse CPositionInfo
Diese Klasse ermöglicht einen einfachen Zugriff auf die Eigenschaften der offenen Positionen.
Pythons nutzerdefinierte Klasse CPositionInfo | MQL5 integrierte Klasse CPositionInfo | Beschreibung |
---|---|---|
Eigenschaften vom Typ integer & datetime | ||
ticket() | Ruft das Ticket einer Position ab, die zuvor für den Zugriff ausgewählt wurde. | |
time() | Time | Ermittelt den Zeitpunkt der Positionseröffnung. |
time_msc() | TimeMsc | Empfängt die Zeit der Platzierung einer Position in Millisekunden seit dem 01.01.1970. |
time_update() | TimeUpdate | Empfängt die Zeit der Positionsänderung in Sekunden seit dem 01.01.1970. |
time_update_msc() | TimeUpdateMsc | Empfängt die Zeit der Positionsänderung in Millisekunden seit dem 01.01.1970. |
position_type() | PositionType | Ruft den Positionstyp als Ganzzahl ab. |
position_type_description() | TypeDescription | Ermittelt den Positionstyp als String |
magic() | Magic | Ruft die ID des Experten ab, der die Position eröffnet hat. |
position_id() | Identifier | Ermittelt die ID der Position. |
Eigenschaften des Typs Double | ||
volume() | Volume | Ermittelt das Volumen der Position. |
price_open() | PriceOpen | Ermittelt den Preis der Positionseröffnung. |
stop_loss() | StopLoss | Ermittelt den Preis für den Stop-Loss der Position. |
take_profit() | TakeProfit | Ermittelt den Preis für den Take-Profit der Position. |
price_current() | PriceCurrent | Ermittelt den aktuellen Preis nach Positionssymbol. |
profit() | Profit | Ermittelt den Betrag des aktuellen Gewinns pro Position. |
swap() | Swap | Ermittelt den Betrag des Swaps nach Position. |
Zugriff auf Texteigenschaften | ||
comment() | Comment | Ermittelt den Kommentar der Position. |
symbol() | Symbol | Ruft den Namen des Positionssymbols ab. |
Auswahl | ||
select_position(self, position) -> bool | Wählt das Positionsobjekt (Dictionaries) aus einer Liste von Positionen aus, die von der Funktion MetaTrader5.positions_get() zurückgegeben wird |
Beispiel für die Verwendung
import MetaTrader5 as mt5 from Trade.PositionInfo import CPositionInfo if not mt5.initialize(r"c:\Users\Omega Joctan\AppData\Roaming\Pepperstone MetaTrader 5\terminal64.exe"): print("Failed to initialize Metatrader5 Error = ",mt5.last_error()) quit() positions = mt5.positions_get() m_position = CPositionInfo() # Loop and print each position for i, position in enumerate(positions): if m_position.select_position(position): print(f""" Position #{i} --- Integer type properties --- Time Open: {m_position.time()} Time Open (ms): {m_position.time_msc()} Time Update: {m_position.time_update()} Time Update (ms): {m_position.time_update_msc()} Magic Number: {m_position.magic()} Ticket: {m_position.ticket()} Position Type: {m_position.position_type()} ({m_position.position_type_description()}) --- Double type properties --- Volume: {m_position.volume()} Price Open: {m_position.price_open()} Price Current: {m_position.price_current()} Stop Loss: {m_position.stop_loss()} Take Profit: {m_position.take_profit()} Profit: {m_position.profit()} Swap: {m_position.swap()} --- Access to text properties --- Symbol: {m_position.symbol()} Comment: {m_position.comment()} """) mt5.shutdown()
Ausgabe:
Position #1 --- Integer type properties --- Time Open: 2025-05-22 15:02:06 Time Open (ms): 1747915326225 Time Update: 2025-05-22 15:02:06 Time Update (ms): 1747915326225 Magic Number: 0 Ticket: 153362497 Position Type: 1 (Sell) --- Double type properties --- Volume: 0.1 Price Open: 1.12961 Price Current: 1.1296 Stop Loss: 0.0 Take Profit: 0.0 Profit: 0.1 Swap: 0.0 --- Access to text properties --- Symbol: EURUSD Comment:
Die Klasse CDealInfo
Diese Klasse ermöglicht den Zugriff auf die Handelseigenschaften aus dem MetaTrader 5-Programm.
Pythons nutzerdefinierte Klasse CDealInfo | MQL5 integrierte Klasse CDealInfo | Beschreibung |
---|---|---|
Eigenschaften des Typs interger und datetime | ||
ticket() | Liefert das Ticket eines ausgewählten Deals | |
time() | Time | Ermittelt den Zeitpunkt der Deal-Ausführung. |
time_msc() | TimeMsc | Empfängt die Zeit der Ausführung eines Deals in Millisekunden seit dem 01.01.1970 |
deal_type() | DealType | Ermittelt die Art des Deals |
type_description() | TypeDescription | Ruft die Art des Deals als Zeichenkette ab. |
entry() | Entry | Ermittelt die Richtung des Deals |
entry_description() | EntryDescription | Ruft die Richtung des Deals als String ab. |
magic() | Magic | Ruft die ID des Experten ab, der das Deal ausgeführt hat. |
position_id() | PositionId | Ruft die ID der Position ab, an der das Deal beteiligt war. |
Eigenschaften des Typs Double | ||
volume() | Volume | Ermittelt das Volumen (Losgröße) des Deals. |
price() | Price | Ermittelt den Verkaufspreis. |
commission() | Commision | Erhält die Provision des Deals. |
swap() | Swap | Ermittelt den Swap-Betrag, wenn die Position geschlossen wird |
profit() | Profit | Ermittelt das finanzielle Ergebnis (Gewinn) des Deals |
Eigenschaften des Stringtyps | ||
symbol() | Symbol | Ruft den Namen des Symbols des ausgewählten Deals ab. |
comment() | Comment | Ermittelt den Kommentar des ausgewählten Deals. |
Auswahl | ||
select_by_index(self, index) | Wählt einen Deal nach dem Index aus. | |
select_deal(self, deal) -> bool | Wählt ein Deal anhand seines Objekts (Dictionaries) aus der Liste der Deals aus, die von der Funktion MetaTrader5.history_deals_get zurückgegeben wird |
Beispiel für die Verwendung
import MetaTrader5 as mt5 from datetime import datetime, timedelta from Trade.DealInfo import CDealInfo # The date range from_date = datetime.now() - timedelta(hours=24) to_date = datetime.now() if not mt5.initialize(r"c:\Users\Omega Joctan\AppData\Roaming\Pepperstone MetaTrader 5\terminal64.exe"): print("Failed to initialize Metatrader5 Error = ",mt5.last_error()) quit() m_deal = CDealInfo() # Get all deals from MT5 history deals = mt5.history_deals_get(from_date, to_date) for i, deal in enumerate(deals): if (m_deal.select_deal(deal=deal)): print(f""" Deal #{i} --- integer and dateteime properties --- Ticket: {m_deal.ticket()} Time: {m_deal.time()} Time (ms): {m_deal.time_msc()} Deal Type: {m_deal.deal_type()} ({m_deal.type_description()}) Entry Type: {m_deal.entry()} ({m_deal.entry_description()}) Order: {m_deal.order()} Magic Number: {m_deal.magic()} Position ID: {m_deal.position_id()} --- double type properties --- Volume: {m_deal.volume()} Price: {m_deal.price()} Commission: {m_deal.commission()} Swap: {m_deal.swap()} Profit: {m_deal.profit()} --- string type properties --- Comment: {m_deal.comment()} Symbol: {m_deal.symbol()} External ID: {m_deal.external_id()} """) mt5.shutdown()
Ausgabe:
Deal #53 --- integer and dateteime properties --- Ticket: 0 Time: 2025-05-22 01:57:47 Time (ms): 1747868267618 Deal Type: 1 (SELL) Entry Type: 0 (IN) Order: 153201241 Magic Number: 1001 Position ID: 153201241 --- double type properties --- Volume: 0.01 Price: 1.13194 Commission: -0.04 Swap: 0.0 Profit: 0.0 --- string type properties --- Comment: Sell Stop Order Symbol: EURUSD External ID:
Die Klasse CTerminalInfo
Diese Klasse ermöglicht den Zugriff auf die Eigenschaften der MetaTrader 5-Programmumgebung.
Pythons nutzerdefinierte Klasse CTerminalInfo | MQL5 integrierte Klasse CTerminalInfo | Beschreibung |
---|---|---|
Eigenschaften des Stringtyps | ||
name() | Name | Ruft den Namen des Client-Terminals ab. |
company() | Company | Ruft den Firmennamen des Client-Terminals ab. |
language() | Language | Ruft die Sprache des Client-Terminals ab. |
path() | Path | Ruft den Ordner des Client-Terminals ab. |
data_path() | DataPath | Ruft den Datenordner für das Client-Terminal ab. |
common_data_path() | CommonDataPath | Ruft den gemeinsamen Datenordner aller Client-Terminals ab (alle MetaTrade5-Anwendungen, die auf dem Computer installiert sind. |
Eigenschaften des Typs Integer | ||
build() | Build | Ruft die Build-Nummer des Client-Terminals ab. |
is_connected() | IsConnected | Ruft die Informationen über die Verbindung zum Handelsserver ab. |
is_dlls_allowed() | IsDLLsAllowed | Ruft die Informationen über die Erlaubnis der DLL-Nutzung ab. |
is_trade_allowed() | IsTradeAllowed | Ruft die Informationen über die Erlaubnis zum Handel ab. |
is_email_enabled() | IsEmailEnabled | Ruft die Informationen über die Berechtigung zum Senden von E-Mails an den SMTP-Server und die Anmeldung ab, die in den Terminaleinstellungen angegeben sind. |
is_ftp_enabled() | IsFtpEnabled | Ruft die Informationen über die Berechtigung zum Senden von Handelsberichten an den FTP-Server und die Anmeldung ab, die in den Terminaleinstellungen angegeben sind. |
are_notifications_enabled() | Überprüft, ob Push-Benachrichtigungen in den MetaTrader 5 Terminaleinstellungen aktiviert sind. | |
is_community_account() | Prüft, ob das aktuelle Terminal in einer MetaTrader-Community auf mql5.com (dieser Website) angemeldet ist | |
is_community_connection() | Prüft, ob das Terminal eine aktive Verbindung zu den MQL5-Gemeinschaftsdiensten hat. | |
is_mqid() | Überprüft, ob der Nutzer mit seiner MQID (MetaQuotes ID) angemeldet ist. | |
is_tradeapi_disabled() | Überprüft, ob die Trade API in den MetaTrader 5-Einstellungen deaktiviert ist. | |
max_bars() | MaxBars | Ruft die Information über die maximale Anzahl von Balken im Chart ab. |
code_page() | Gibt den ganzzahligen Wert der aktuellen Codepage (Zeichenkodierung) zurück, die vom MetaTrader 5-Terminal verwendet wird. | |
ping_last() | Gibt die letzte aufgezeichnete Ping-Zeit (in Mikrosekunden) zwischen dem MetaTrader-Terminal und dem Server des Brokers zurück. | |
community_balance() | Gibt den aktuellen Kontostand des MQL5-Gemeinschaftskontos des Nutzers zurück. | |
retransmission() | Gibt die Rate der erneuten Datenübertragung vom Server zum Terminal zurück. |
Beispiel für die Verwendung
import MetaTrader5 as mt5 from Trade.TerminalInfo import CTerminalInfo if not mt5.initialize(r"c:\Users\Omega Joctan\AppData\Roaming\Pepperstone MetaTrader 5\terminal64.exe"): print("Failed to initialize Metatrader5 Error = ",mt5.last_error()) quit() terminal = CTerminalInfo() print(f""" Terminal Information --- String type --- Name: {terminal.name()} Company: {terminal.company()} Language: {terminal.language()} Terminal Path: {terminal.path()} Data Path: {terminal.data_path()} Common Data Path: {terminal.common_data_path()} --- Integers type --- Build: {terminal.build()} Connected: {terminal.is_connected()} DLLs Allowed: {terminal.is_dlls_allowed()} Trade Allowed: {terminal.is_trade_allowed()} Email Enabled: {terminal.is_email_enabled()} FTP Enabled: {terminal.is_ftp_enabled()} Notifications Enabled: {terminal.are_notifications_enabled()} Community Account: {terminal.is_community_account()} Community Connected: {terminal.is_community_connection()} MQID: {terminal.is_mqid()} Trade API Disabled: {terminal.is_tradeapi_disabled()} Max Bars: {terminal.max_bars()} Code Page: {terminal.code_page()} Ping Last (μs): {terminal.ping_last()} Community Balance: {terminal.community_balance()} Retransmission Rate: {terminal.retransmission()} """) mt5.shutdown()
Ausgabe:
Terminal Information --- String type --- Name: Pepperstone MetaTrader 5 Company: Pepperstone Group Limited Language: English Terminal Path: c:\Users\Omega Joctan\AppData\Roaming\Pepperstone MetaTrader 5 Data Path: C:\Users\Omega Joctan\AppData\Roaming\MetaQuotes\Terminal\F4F6C6D7A7155578A6DEA66D12B1D40D Common Data Path: C:\Users\Omega Joctan\AppData\Roaming\MetaQuotes\Terminal\Common --- Integers type --- Build: 4755 Connected: True DLLs Allowed: True Trade Allowed: True Email Enabled: True FTP Enabled: False Notifications Enabled: False Community Account: True Community Connected: True MQID: False Trade API Disabled: False Max Bars: 100000000 Code Page: 0 Ping Last (μs): 251410 Community Balance: 900.026643 Retransmission Rate: 0.535847326494355
Die Klasse CTrade
Diese Klasse bietet einen einfachen Zugang zu den Handelsfunktionen. Im Gegensatz zu den vorherigen Klassen, die Informationen über Symbole, MetaTrader 5-Terminal, historische Deals und das Konto zurückgeben, ist diese Funktion das, was wir für die Eröffnung von Deals benötigen.
Parametereinstellungen
Anstatt Parameter wie die Magic Number, den Füllungstyp und den Abweichungswert in Punkten mit separaten Funktionen wie in der CTrade MQL5 einzustellen, konfigurieren wir in unserer Python-Klasse alle diese Parameter in einem Klassenkonstruktor.
class CTrade: def __init__(self, magic_number: int, filling_type_symbol: str, deviation_points: int):
Dies verringert die Fehleranfälligkeit, da der Aufruf separater Funktionen vergessen werden könnte, was zu Laufzeitfehlern führen könnte, die aufgrund leerer oder keiner Werte auftreten könnten.
Pythons nutzerdefinierte Klasse CTrade | MQL5 integrierte Klasse CTrade | |
---|---|---|
Einsatz von Orders | ||
order_open(self, symbol: str, volume: float, order_type: int, price: float, sl: float = 0.0, tp: float = 0.0, type_time: int = mt5.ORDER_TIME_GTC, expiration: datetime = None, comment: str = "") -> bool | OrderOpen | Platziert einen schwebenden Auftrag mit den angegebenen Parametern. |
order_modify(self, ticket: int, price: float, sl: float, tp: float, type_time: int = mt5.ORDER_TIME_GTC, expiration: datetime = None, stoplimit: float = 0.0) -> bool: | OrderModify | Ändert den schwebenden Auftrag mit den angegebenen Parametern. |
order_delete(self, ticket: int) -> bool | OrderDelete | Löscht den schwebenden Auftrag. |
Operationen mit Positionen | ||
position_open(self, symbol: str, volume: float, order_type: int, price: float, sl: float, tp: float, comment: str="") -> bool | PositionOpen | Öffnet eine Position mit den angegebenen Parametern. |
position_modify(self, ticket: int, sl: float, tp: float) -> bool | PositionModify | Ändert die Positionsparameter um das angegebene Ticket. |
position_close(self, ticket: int, deviation: float=float("nan")) -> bool | PositionClose | Schließt eine Position für das angegebene Symbol. |
Zusätzliche Methoden | ||
buy(self, volume: float, symbol: str, price: float, sl: float=0.0, tp: float=0.0, comment: str="") -> bool | Buy | Eröffnet eine Kaufposition mit den angegebenen Parametern |
sell(self, volume: float, symbol: str, price: float, sl: float=0.0, tp: float=0.0, comment: str="") -> bool | Sell | Eröffnet eine Verkaufsposition mit den angegebenen Parametern |
buy_limit(self, volume: float, price: float, symbol: str, sl: float=0.0, tp: float=0.0, type_time: float=mt5.ORDER_TIME_GTC, expiration: datetime=None, comment: str="") -> bool | BuyLimit | Eröffnet einen schwebenden Auftrag vom Typ Buy Limit mit den angegebenen Parametern. |
sell_limit(self, volume: float, price: float, symbol: str, sl: float=0.0, tp: float=0.0, type_time: float=mt5.ORDER_TIME_GTC, expiration: datetime=None, comment: str="") -> bool | BuyStop | Platziert einen schwebenden Auftrag vom Typ Buy Stop mit den angegebenen Parametern. |
buy_stop(self, volume: float, price: float, symbol: str, sl: float=0.0, tp: float=0.0, type_time: float=mt5.ORDER_TIME_GTC, expiration: datetime=None, comment: str="") -> bool | SellLimit | Eröffnet einen schwebenden Auftrag vom Typ Sell Limit mit den angegebenen Parametern. |
sell_stop(self, volume: float, price: float, symbol: str, sl: float=0.0, tp: float=0.0, type_time: float=mt5.ORDER_TIME_GTC, expiration: datetime=None, comment: str="") -> bool | SellStop | Platziert einen schwebenden Auftrag vom Typ Sell Stop mit den angegebenen Parametern |
buy_stop_limit(self, volume: float, price: float, symbol: str, sl: float=0.0, tp: float=0.0, type_time: float=mt5.ORDER_TIME_GTC, expiration: datetime=None, comment: str="") -> bool | Platziert einen schwebenden Auftrag vom Typ Buy Stop Limit mit den angegebenen Parametern | |
sell_stop_limit(self, volume: float, price: float, symbol: str, sl: float=0.0, tp: float=0.0, type_time: float=mt5.ORDER_TIME_GTC, expiration: datetime=None, comment: str="") -> bool | Platziert einen schwebenden Auftrag vom Typ Sell Stop-Limits mit den angegebenen Parametern. |
Lassen Sie uns nun die Klasse CTrade in Python verwenden, um einige Positionen und schwebende Aufträge zu eröffnen.
import MetaTrader5 as mt5 from Trade.Trade import CTrade from Trade.SymbolInfo import CSymbolInfo from datetime import datetime, timedelta if not mt5.initialize(r"c:\Users\Omega Joctan\AppData\Roaming\Pepperstone MetaTrader 5\terminal64.exe"): print("Failed to initialize Metatrader5 Error = ",mt5.last_error()) quit() symbol = "EURUSD" m_symbol = CSymbolInfo(symbol=symbol) m_trade = CTrade(magic_number=1001, deviation_points=100, filling_type_symbol=symbol) m_symbol.refresh_rates() ask = m_symbol.ask() bid = m_symbol.bid() lotsize = m_symbol.lots_min() # === Market Orders === m_trade.buy(volume=lotsize, symbol=symbol, price=ask, sl=0.0, tp=0.0, comment="Market Buy Pos") m_trade.sell(volume=lotsize, symbol=symbol, price=bid, sl=0.0, tp=0.0, comment="Market Sell Pos") # expiration time for pending orders expiration_time = datetime.now() + timedelta(minutes=1) # === Pending Orders === # Buy Limit - price below current ask m_trade.buy_limit(volume=lotsize, symbol=symbol, price=ask - 0.0020, sl=0.0, tp=0.0, type_time=mt5.ORDER_TIME_SPECIFIED, expiration=expiration_time, comment="Buy Limit Order") # Sell Limit - price above current bid m_trade.sell_limit(volume=lotsize, symbol=symbol, price=bid + 0.0020, sl=0.0, tp=0.0, type_time=mt5.ORDER_TIME_SPECIFIED, expiration=expiration_time, comment="Sell Limit Order") # Buy Stop - price above current ask m_trade.buy_stop(volume=lotsize, symbol=symbol, price=ask + 0.0020, sl=0.0, tp=0.0, type_time=mt5.ORDER_TIME_SPECIFIED, expiration=expiration_time, comment="Buy Stop Order") # Sell Stop - price below current bid m_trade.sell_stop(volume=lotsize, symbol=symbol, price=bid - 0.0020, sl=0.0, tp=0.0, type_time=mt5.ORDER_TIME_SPECIFIED, expiration=expiration_time, comment="Sell Stop Order") # Buy Stop Limit - stop price above ask, limit price slightly lower (near it) m_trade.buy_stop_limit(volume=lotsize, symbol=symbol, price=ask + 0.0020, sl=0.0, tp=0.0, type_time=mt5.ORDER_TIME_SPECIFIED, expiration=expiration_time, comment="Buy Stop Limit Order") # Sell Stop Limit - stop price below bid, limit price slightly higher (near it) m_trade.sell_stop_limit(volume=lotsize, symbol=symbol, price=bid - 0.0020, sl=0.0, tp=0.0, type_time=mt5.ORDER_TIME_SPECIFIED, expiration=expiration_time, comment="Sell Stop Limit Order") mt5.shutdown()
Ergebnisse
Schlussfolgerung
Die Handelsklassen sind eines der guten Dinge, die in MQL5 geschehen sind. Früher mussten wir alles von Grund auf neu schreiben, was extrem mühsam ist und zu vielen Fehlern führt, wie ich bereits erklärt habe. Durch die Erweiterung des MetaTrader 5 Python-Pakets um Bibliotheken (Module) in Python, die in der Syntax denen in MQL5 sehr ähnlich sind, können Entwickler ihr Wissen, das sie bereits bei der Arbeit mit MQL5 erworben haben, für Python-Anwendungen nutzen.
Diese nutzerdefinierten Python-Bibliotheken können dazu beitragen, das Problem der Intellisense-Unterstützung zu entschärfen. Durch das Hinzufügen von „Docstrings“ zu Ihren Python-Funktionen und -Klassen können Texteditoren wie Visual Studio Code dabei helfen, Ihren Code zu dokumentieren und die Parameter hervorzuheben, was den Codierungsprozess unterhaltsam und viel einfacher macht. Zum Beispiel gibt es in der Buy-Methode in der Klasse CTrade eine kurze Beschreibung der Funktion.
class CTrade: # .... def buy(self, volume: float, symbol: str, price: float, sl: float=0.0, tp: float=0.0, comment: str="") -> bool: """ Opens a buy (market) position. Args: volume: Trade volume (lot size) symbol: Trading symbol (e.g., "EURUSD") price: Execution price sl: Stop loss price (optional, default=0.0) tp: Take profit price (optional, default=0.0) comment: Position comment (optional, default="") Returns: bool: True if order was sent successfully, False otherwise """
Diese Funktion wird nun in VS Code beschrieben.
Einfach ausgedrückt, dient dieser Artikel als Dokumentation der Handelsklassen für MetaTrader5, die ich in der Programmiersprache Python erstellt habe. Bitte teilen Sie mir Ihre Meinung im Diskussionsbereich mit.
Mit freundlichen Grüßen.
Tabelle der Anhänge
Dateiname & Pfad | Beschreibung und Verwendung |
---|---|
Module (Bibliotheken) | |
Trade\AccountInfo.py | Enthält die Klasse CAccountInfo |
Trade\DealInfo.py | Enthält die Klasse CDealInfo |
Trade\HistoryOrderInfo.py | Enthält die Klasse CHistoryOrderInfo |
Trade\OrderInfo.py | Enthält die Klasse COrderInfo |
Trade\PositionInfo.py | Enthält die Klasse CPositionInfo |
Trade\SymbolInfo.py | Enthält die Klasse CSymbolInfo |
Trade\TerminalInfo.py | Enthält die Klasse CTerminalInfo |
Trade\Trade.py | Enthält die Klasse CTrade |
Test-Dateien | |
accountinfo_test.py | Ein Skript zum Testen von Methoden, die von der Klasse CAccountInfo angeboten werden |
dealinfo_test.py | Ein Skript zum Testen von Methoden, die von der Klasse CDealInfo angeboten werden |
error_description.py | Enthält eine Funktion zur Beschreibung von Fehler- und Rückgabecodes in menschenlesbare Zeichenketten |
historyorderinfo_test.py | Ein Skript zum Testen von Methoden, die von der Klasse CHistoryOrderInfo angeboten werden |
orderinfo_test.py | Ein Skript zum Testen von Methoden, die von der Klasse COrderInfo angeboten werden |
positioninfo_test.py | Ein Skript zum Testen von Methoden, die von der Klasse CPositionInfo angeboten werden |
symbolinfo_test.py | Ein Skript zum Testen von Methoden, die von der Klasse CSymbolInfo angeboten werden |
terminalinfo_test.py | Ein Skript zum Testen von Methoden, die von der Klasse CTerminal angeboten werden |
main.py | Ein Skript zum Testen der Klasse CTrade, sozusagen ein letzter Handelsroboter in Python |
Übersetzt aus dem Englischen von MetaQuotes Ltd.
Originalartikel: https://www.mql5.com/en/articles/18208
Warnung: Alle Rechte sind von MetaQuotes Ltd. vorbehalten. Kopieren oder Vervielfältigen untersagt.
Dieser Artikel wurde von einem Nutzer der Website verfasst und gibt dessen persönliche Meinung wieder. MetaQuotes Ltd übernimmt keine Verantwortung für die Richtigkeit der dargestellten Informationen oder für Folgen, die sich aus der Anwendung der beschriebenen Lösungen, Strategien oder Empfehlungen ergeben.





- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Veröffentlichter Artikel Erstellung von Python-Klassen für den Handel in MetaTrader 5, ähnlich denen in MQL5:
Autor: Omega J Msigwa
Vielen Dank! Sie haben einen sehr nützlichen Artikel für zukünftige Projekte.....