English Русский
preview
Erstellen von MQL5-ähnlichen Handelsklassen in Python für MetaTrader 5

Erstellen von MQL5-ähnlichen Handelsklassen in Python für MetaTrader 5

MetaTrader 5Handelssysteme |
25 2
Omega J Msigwa
Omega J Msigwa

Inhalt


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

Beigefügte Dateien |
Letzte Kommentare | Zur Diskussion im Händlerforum (2)
Yevgeniy Koshtenko
Yevgeniy Koshtenko | 12 Juni 2025 in 14:30
Ich danke Ihnen sehr. Sie haben einen tollen Artikel
Roman Shiredchenko
Roman Shiredchenko | 12 Juni 2025 in 18:21

Vielen Dank! Sie haben einen sehr nützlichen Artikel für zukünftige Projekte.....

Die Übertragung der Trading-Signale in einem universalen Expert Advisor. Die Übertragung der Trading-Signale in einem universalen Expert Advisor.
In diesem Artikel wurden die verschiedenen Möglichkeiten beschrieben, um die Trading-Signale von einem Signalmodul des universalen EAs zum Steuermodul der Positionen und Orders zu übertragen. Es wurden die seriellen und parallelen Interfaces betrachtet.
Einführung in MQL5 (Teil 16): Aufbau von Expert Advisors mit technischen Chart-Mustern Einführung in MQL5 (Teil 16): Aufbau von Expert Advisors mit technischen Chart-Mustern
Dieser Artikel führt Anfänger in den Aufbau eines MQL5 Expert Advisors ein, der ein klassisches technisches Chart-Muster - Kopf und Schultern - identifiziert und handelt. Sie erfahren, wie Sie das Muster anhand der Preisentwicklung erkennen, es auf dem Chart einzeichnen, Einstiegs-, Stop-Loss- und Take-Profit-Levels festlegen und die Handelsausführung auf der Grundlage des Musters automatisieren können.
Eine alternative Log-datei mit der Verwendung der HTML und CSS Eine alternative Log-datei mit der Verwendung der HTML und CSS
In diesem Artikel werden wir eine sehr einfache, aber leistungsfähige Bibliothek zur Erstellung der HTML-Dateien schreiben, dabei lernen wir auch, wie man eine ihre Darstellung einstellen kann (nach seinem Geschmack) und sehen wir, wie man es leicht in seinem Expert Advisor oder Skript hinzufügen oder verwenden kann.
Entwicklung des Price Action Analysis Toolkit (Teil 27): Liquidity Sweep With MA Filter Tool Entwicklung des Price Action Analysis Toolkit (Teil 27): Liquidity Sweep With MA Filter Tool
Das Verständnis der subtilen Dynamik hinter den Preisbewegungen kann Ihnen einen entscheidenden Vorteil verschaffen. Ein solches Phänomen ist der Liquidity Sweep, eine gezielte Strategie, mit der große Händler, insbesondere Institutionen, die Kurse durch wichtige Unterstützungs- oder Widerstandsniveaus drücken. Diese Niveaus fallen oft mit Gruppen von Stop-Loss-Aufträgen von Privatanlegern zusammen, wodurch Liquiditätslücken entstehen, die große Marktteilnehmer ausnutzen können, um große Positionen mit minimaler Abweichung einzugehen oder zu verlassen.