Fxwatch.eu Interaktywny kurs MQL4
MQL5 dla programistów MQL4 1. Tworzenie obiektu klasy CTrade
Najwyraźniejszą różnicą między MQL5 a MQL4 jest obsługa pozycji. Dla wygody warto
skorzystać z klasy CTrade dostępnej wraz instalacją platformy MetaTrader5.
W nowej platformie istnieją dwa systemy transakcyjne – hedging imitujący działanie
MetaTrader4 oraz netting, w którym jednocześnie możemy mieć tylko jedną pozycję (wartość
netto wolumenu otwartych transakcji) na danym składniku aktywów.
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
//1. Dołczenie pliku Trade.mqh
#include <Trade/Trade.mqh>
//2. Deklaracja wskaĹşnika
CTrade *ctrade;
int OnInit()
{
//3. Stworzenie obiektu
ctrade = new CTrade();
return(INIT_SUCCEEDED);
}
void OnDeinit(const int reason)
{
//4. Usunięcie obiektu
delete(ctrade);
}
void OnTick()
{
}
Fxwatch.eu Interaktywny kurs MQL4
2. Najważniejsze funkcje klasy CTrade
//Obsługa pozycji
bool PositionOpen(const string symbol,
const ENUM_ORDER_TYPE order_type,
const double volume,
const double price,
const double sl,
const double tp,
const string comment="");
bool PositionModify(const string symbol,
const double sl,
const double tp);
bool PositionModify(const ulong ticket,
const double sl,
const double tp);
bool PositionClose(const string symbol,
const ulong deviation=ULONG_MAX);
bool PositionClose(const ulong ticket,
const ulong deviation=ULONG_MAX);
bool PositionCloseBy(const ulong ticket,
const ulong ticket_by);
//Obsługa pozycji oczekujących
bool OrderOpen(const string symbol,
const ENUM_ORDER_TYPE order_type,
const double volume,
const double limit_price,
const double price,
const double sl,
const double tp,
ENUM_ORDER_TYPE_TIME type_time=ORDER_TIME_GTC,
const datetime expiration=0,
const string comment="");
bool OrderModify(const ulong ticket,
const double price,
const double sl,
const double tp,
const ENUM_ORDER_TYPE_TIME type_time,
const datetime expiration,
const double stoplimit=0.0);
bool OrderDelete(const ulong ticket);
Fxwatch.eu Interaktywny kurs MQL4
3. Dodatkowe funkcje klasy CTrade
//Funkcje upraszczające otwieranie pozycji
bool Buy(const double volume,
const string symbol=NULL,
double price=0.0,
const double sl=0.0,
const double tp=0.0,
const string comment="");
bool Sell(const double volume,
const string symbol=NULL,
double price=0.0,
const double sl=0.0,
const double tp=0.0,
const string comment="");
bool BuyLimit(const double volume,const double price,
const string symbol=NULL,
const double sl=0.0,
const double tp=0.0,
const ENUM_ORDER_TYPE_TIME type_time=ORDER_TIME_GTC,
const datetime expiration=0,
const string comment="");
bool BuyStop(const double volume,
const double price,
const string symbol=NULL,
const double sl=0.0,
const double tp=0.0,
const ENUM_ORDER_TYPE_TIME type_time=ORDER_TIME_GTC,
const datetime expiration=0,
const string comment="");
bool SellLimit(const double volume,
const double price,
const string symbol=NULL,
const double sl=0.0,
const double tp=0.0,
const ENUM_ORDER_TYPE_TIME type_time=ORDER_TIME_GTC,
const datetime expiration=0,
const string comment="");
bool SellStop(const double volume,
const double price,
const string symbol=NULL,
const double sl=0.0,
const double tp=0.0,
const ENUM_ORDER_TYPE_TIME type_time=ORDER_TIME_GTC,
const datetime expiration=0,
const string comment="");
Fxwatch.eu Interaktywny kurs MQL4
4. Przykłady użycia
Czynność Wersja MQL4 (przykład) Wersja MQL5 (przykład)
Dostęp do ceny Ask/Bid MarketInfo( "EURUSD", MODE_BID);
Lista stałych
SymbolInfoDouble("EURUSD", SYMBOL_ASK);
Lista stałych
Dostęp do czasu otwarcia danej świecy, cen OHLC,
wolumenu
//Dla symbolu otwartego wykresu High[5]; //Dla wybranego symbolu iHigh( "EURUSD", PERIOD_H1, 5 );
//Dla wybranego symbolu double High[]; CopyHigh( "EURUSD", PERIOD_H1, 5, 1, High); //wartość high piątej świecy będzie przechowywana w High[0]
Otwieranie nowego zlecenia OrderSend( "EURUSD", OP_BUY, 0.01, Ask, 0, 0 );
ctrade.PositionOpen("EURUSD", ORDER_TYPE_BUY, 0.01,
SymbolInfoDouble("EURUSD", SYMBOL_ASK), 0, 0);
Iteracja otwartych pozycji
//Tu będzie to dostęp do każdego zlecenia for( int i=0; i<OrdersTotal(); i++ ) { if ( !OrderSelect( i, SELECT_BY_POS ) ) continue; }
//Tu tylko na koncie w trybie hedge będzie dostęp do każdego zlecenia for( int i=0; i<PositionsTotal(); i++){ if ( !PositionSelectByTicket( PositionGetTicket(i) ) ) continue; }
Zamykanie pozycji
if ( ! OrderSelect( 0, SELECT_BY_POS ) ) OrderClose( OrderTicket(), OrderLots(), Ask, 50 );
if ( !PositionSelectByTicket ( ( PositionGetTicket (0) ) ) ctrade.PositionClose( PositionGetInteger( POSITION_TICKET ) );
Top Related