Przejdź do treści
MQL5 · MetaTrader 5 · po polsku
kod odczarowany

MQL5 / Z MQL4 na MQL5

OrderSend — z MQL4 na MQL5

W MQL4 dziesięć argumentów i zwracany bilet. W MQL5 struktura i kod zwrotny. Gotowe tłumaczenie linijka po linijce.

2 fragmenty kodu z tej strony przeszły przez kompilator MetaEditor build 6090, 2026-08-05.

Stara postać

MQL4
int bilet = OrderSend(Symbol(), OP_BUY, 0.1, Ask, 3,
                      Bid - 200 * Point, Bid + 400 * Point,
                      "komentarz", 12345, 0, clrGreen);
if(bilet < 0)
   Print("Błąd: ", GetLastError());

Nowa postać

MQL5
MqlTradeRequest zapytanie = {};
MqlTradeResult  wynik = {};
MqlTick tick;
SymbolInfoTick(_Symbol, tick);

zapytanie.action       = TRADE_ACTION_DEAL;
zapytanie.symbol       = _Symbol;
zapytanie.volume       = 0.1;
zapytanie.type         = ORDER_TYPE_BUY;
zapytanie.price        = NormalizeDouble(tick.ask, _Digits);
zapytanie.sl           = NormalizeDouble(tick.bid - 200 * _Point, _Digits);
zapytanie.tp           = NormalizeDouble(tick.bid + 400 * _Point, _Digits);
zapytanie.deviation    = 3;
zapytanie.magic        = 12345;
zapytanie.comment      = "komentarz";
zapytanie.type_filling = ORDER_FILLING_IOC;

if(!OrderSend(zapytanie, wynik) || wynik.retcode != TRADE_RETCODE_DONE)
   PrintFormat("Błąd %d, retcode %d", GetLastError(), wynik.retcode);

Co się zmieniło naprawdę

MQL4MQL5
OP_BUYORDER_TYPE_BUY
zwracany bilet zleceniawynik.order, wynik.deal
bilet < 0 oznacza błądwynik.retcode opisuje wynik
Ask, Bid jako zmienneSymbolInfoTick albo SymbolInfoDouble
brak trybu wypełnieniatype_filling obowiązkowe
kolor strzałki w argumenciebrak, wykres rysuje terminal

Najważniejsza różnica pojęciowa: w MQL4 zlecenie i pozycja to jedno. W MQL5 zlecenie (order) jest poleceniem, transakcja (deal) jego wykonaniem, a pozycja (position) skutkiem. Jeden bilet zlecenia nie jest biletem pozycji i mieszanie ich to najczęstszy błąd w przepisywanym kodzie.

Prościej: klasa CTrade

Do prostych zastosowań biblioteka standardowa robi to za ciebie:

#include <Trade\Trade.mqh>
CTrade handel;

handel.SetExpertMagicNumber(12345);
handel.SetTypeFillingBySymbol(_Symbol);
handel.Buy(0.1, _Symbol, 0.0, sl, tp, "komentarz");

CTrade sam wypełnia strukturę i sprawdza wynik, a handel.ResultRetcode() zwraca kod zwrotny. Cena podana jako 0.0 znaczy „bieżąca rynkowa".

Powiązane