MQL5 dla programistów MQL4 - · PDF fileFxwatch.eu Interaktywny kurs MQL4 3. Dodatkowe...

4
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() { }

Transcript of MQL5 dla programistów MQL4 - · PDF fileFxwatch.eu Interaktywny kurs MQL4 3. Dodatkowe...

Page 1: MQL5 dla programistów MQL4 - · PDF fileFxwatch.eu Interaktywny kurs MQL4 3. Dodatkowe funkcje klasy CTrade //Funkcje upraszczające otwieranie pozycji bool Buy(const double volume,

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()

{

}

Page 2: MQL5 dla programistów MQL4 - · PDF fileFxwatch.eu Interaktywny kurs MQL4 3. Dodatkowe funkcje klasy CTrade //Funkcje upraszczające otwieranie pozycji bool Buy(const double volume,

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);

Page 3: MQL5 dla programistów MQL4 - · PDF fileFxwatch.eu Interaktywny kurs MQL4 3. Dodatkowe funkcje klasy CTrade //Funkcje upraszczające otwieranie pozycji bool Buy(const double volume,

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="");

Page 4: MQL5 dla programistów MQL4 - · PDF fileFxwatch.eu Interaktywny kurs MQL4 3. Dodatkowe funkcje klasy CTrade //Funkcje upraszczające otwieranie pozycji bool Buy(const double volume,

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 ) );