Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Запустите в тестере mt4orders_exampleexpert.mq5
При написании библиотеки был очень далек от полного осознания всей полноты возможных проблем у пользователей. До Вас у всех все получалось без инструкций.
Лаконичные примеры конвертации советников есть не только в описании библиотеки, но и в обсуждении ее - в комментариях (там даже еще понятней).
Спасибо с ilan1_4_strict.mq4 все получилось, но мои еа выдал 75 errors. Ошибки такова рода:
Спасибо с ilan1_4_strict.mq4 все получилось, но мои еа выдал 75 errors. Ошибки такова рода:
как минимум выкиньте всю графическую часть.
зачем она вам вообще в тестере?
как минимум выкиньте всю графическую часть.
зачем она вам вообще в тестере?
Спасибо с ilan1_4_strict.mq4 все получилось, но мои еа выдал 75 errors. Ошибки такова рода:
В обсуждении говорилось и в описании есть такие слова
Данная работа затрагивает только ордерную систему.
Вопрос возможности создания подобной полной библиотеки, когда MQL4-код может работать в MetaTrader 5 без изменений, не решался.
Внимание!
Библиотека содержится только в одном файле - MT4Orders.mqh. Все остальные файлы приложены для примеров использования библиотеки. Для работы с библиотекой эти файлы не нужны.
При переходе MT4->MT5 самое тяжелое препятствие - новая ордерная система. MT4Orders эту сложность убирает полностью. Остальные различия не носят столь отталкивающий эффект. Поскольку они легко переписываются - есть удобные справочные данные на эту тему. Ну и корректность работы библиотеки была продемонстрирована следующим образом
В качестве примера использования было взято (из кодобазы) несколько MT4/5-советников различных типов: пипсовщики, новостники, мартины, мультивалютники и т.д.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Ошибки, баги, вопросы
fxsaber, 2016.10.20 15:54
#include <Trade\Trade.mqh>;
#include <Trade\OrderInfo.mqh>
// Через MT5-Стандартную Библиотеку - only MT5
// Выставляет SellLimit и затем устаналивает ему SL/TP
void MT5Order( const double Price )
{
CTrade Trade;
if ((ENUM_SYMBOL_TRADE_EXECUTION)::SymbolInfoInteger(_Symbol, SYMBOL_TRADE_EXEMODE) == SYMBOL_TRADE_EXECUTION_EXCHANGE)
Trade.SetTypeFilling(ORDER_FILLING_RETURN);
Trade.OrderOpen(_Symbol, ORDER_TYPE_SELL_LIMIT, 1, 0, Price, 0, 0, ORDER_TIME_GTC, 0, __FUNCTION__);
const ulong Ticket = Trade.ResultOrder();
if (Ticket > 0)
{
COrderInfo Order;
if (Order.Select(Ticket))
Trade.OrderModify(Order.Ticket(), Order.PriceOpen(), Order.PriceOpen() + SLTP, Order.PriceOpen() - SLTP, Order.TypeTime(), Order.TimeExpiration());
}
}
#include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006
// Через MT4-ОЯС - кроссплатформенный вариант (MT4/5)
// Выставляет SellLimit и затем устаналивает ему SL/TP
void MT4Order( const double Price )
{
const int Ticket = OrderSend(_Symbol, OP_SELLLIMIT, 1, Price, 0, 0, 0, __FUNCTION__);
if ((Ticket > 0) && OrderSelect(Ticket, SELECT_BY_TICKET))
OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice() + SLTP, OrderOpenPrice() - SLTP, OrderExpiration(), clrNONE);
}
void OnTick()
{
static bool FirstRun = true;
if (FirstRun)
{
const double Price = SymbolInfoDouble(_Symbol, SYMBOL_BID) + 100 * _Point;
MT5Order(Price); // Через MT5-Стандартную Библиотеку - only MT5
MT4Order(Price); // Через MT4-ОЯС - кроссплатформенный вариант (MT4/5)
FirstRun = false;
}
}
Желтым выделена MT4Order-функция, которая выполняет то же самое, что MT5Order-функция. На любом форуме желтый код будет сразу понят, альтернативный MT5-код - не будет.
А как писать под MT5 - каждый сам для себя решает. Я, например, использую MT4Orders и в некоторых редких случаях еще и чистый (СБ имеет слабый функционал) MQL5. Оба стиля написания работают параллельно. Но если писать только через MT4Orders, то ордерная система будет кроссплатформенной. Поэтому практикую написание кода, который без изменений запускается на обеих платформах.
Поэтому практикую написание кода, который без изменений запускается на обеих платформах.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Как определить последнюю цену закрытия ордера (MQL5)?
fxsaber, 2016.12.05 10:25
void OnStart()
{
if (OrderSelect(OrdersHistoryTotal() - 1, SELECT_BY_POS, MODE_HISTORY))
Alert(OrderClosePrice());
}
{
int oldticket=0;
int Ticket=0;
ArrayResize(Mas_LOT,OrdersTotal(),3);
ArrayInitialize(Mas_LOT,0);
for(int i=0; i <= OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES)){
if (OrderSymbol()==Symbol()&& OrderMagicNumber() == Magik){
Mas_LOT[i][0] = OrderTicket();
Mas_LOT[i][1] = OrderLots();
Mas_LOT[i][2] = OrderType();
Mas_LOT[i][3] = (OrderProfit() + OrderSwap() + OrderCommission());
Mas_LOT[i][4] = OrderStopLoss();
Mas_LOT[i][5] = OrderOpenPrice();
Mas_LOT[i][6] = OrderTakeProfit();
}}}}
как его лучше под мт5 переделать с использованием библиотеки MT4Orders.mqh
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Новая версия платформы MetaTrader 5 build 1525: Представление истории в виде позиций и улучшение тестера
fxsaber, 2017.01.27 19:20
Запускаем кроссплатформенный скрипт
#property strict
#include <MT4Orders.mqh>
void OnStart()
{
MqlTick Tick;
if (SymbolInfoTick(_Symbol, Tick) && (OrdersTotal() == 0) &&
(OrderSend(_Symbol, OP_BUY, 1, Tick.ask, 0, 0, 0) > 0))
{
const double Lots[] = {0.6, 0.3, 0.1};
for (int i = 0; i < ArraySize(Lots); i++)
if (OrderSelect(0, SELECT_BY_POS) && SymbolInfoTick(_Symbol, Tick))
OrderClose(OrderTicket(), Lots[i], Tick.bid, 0);
const int Total = OrdersHistoryTotal();
for (int i = 0; i < Total; i++)
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
OrderPrint();
}
}
Сначала на MT5-Hedge. Получаем такую симпатичную MT4-распечатку
#114769087 2017.01.27 19:57:25 buy 0.60 EURUSD 1.06838 0.00000 0.00000 2017.01.27 19:57:25 1.06829 0.00 0.00 -5.40 0
#114769088 2017.01.27 19:57:25 buy 0.30 EURUSD 1.06838 0.00000 0.00000 2017.01.27 19:57:25 1.06829 0.00 0.00 -2.70 0
#114769089 2017.01.27 19:57:25 buy 0.10 EURUSD 1.06838 0.00000 0.00000 2017.01.27 19:57:26 1.06829 0.00 0.00 -0.90 0
и классический отчет
В качестве подтверждения, запускаем этот же скрипт на MT4.
Классический MT4-отчет
И распечатка лога скипта
#170039287 2017.01.27 20:00:57 buy 0.60 EURUSD 1.06854 0.00000 0.00000 2017.01.27 20:00:57 1.06836 0.00 0.00 -10.80 to #170039289 0
#170039289 2017.01.27 20:00:57 buy 0.30 EURUSD 1.06854 0.00000 0.00000 2017.01.27 20:00:58 1.06836 0.00 0.00 -5.40 to #170039290 0
#170039290 2017.01.27 20:00:57 buy 0.10 EURUSD 1.06854 0.00000 0.00000 2017.01.27 20:00:58 1.06836 0.00 0.00 -1.80 from #170039289 0
Хорошо видно, что лог скрипта в MT4 и MT5 совпадает - кроссплатформенность пашет.
ЗЫ Если логику скрипта написать под MT5 через СБ, то работать корректно скрипт не сможет. В общем, даже сложно сказать, как на MT5 написать такую простую MQL4-логику.
не работает выбор по символу и маджику
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
{
}
не работает OrderSelect не выбирает ордер (тикет по индексу) для работы с ним, простой пример во вложении и он не работает на мт5 почему-то