Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
fxsaber:
Воспроизводится?
#define OFFSET (100 * _Point)
void OnStart()
{
for (int i = 0; i < 10; i++)
{
const double Price = NormalizeDouble(SymbolInfoDouble(_Symbol, SYMBOL_ASK) - OFFSET, _Digits);
const double SL = NormalizeDouble(Price - OFFSET, _Digits);
const int Ticket = OrderSend(_Symbol, OP_BUYLIMIT, 1, Price, 0, 0, 0);
OrderModify(Ticket, Price, SL, 0, 0);
OrderDelete(Ticket);
}
}
ловит баги реже, чем СБ-версия. Существенное отличие MT4Orders от СБ - после каждого оригинального MT5-OrderSend дожидается синхронизации торгового окружения с результатом выполнения OrderSend. Т.е. там содержатся некоторые паузы ожидания, которых в СБ нет. И с этими паузами (в среднем ~1 мс) ошибок гораздо меньше, чем в варианте без них - СБ.
Получается, что терминал не поспевает и начинает выдавать ошибки.
Довольно много воспроизводимых багов имеется, которые после форумных сообщений ими и остаются - не правятся.
В СД заявку могу отправить только одну. Есть возможность снять это ограничение, как и написание ЛС, чтобы разработчикам через ЛС быстро отвечать, в случае вопроса?
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Ошибки, баги, вопросы
fxsaber, 2016.10.20 08:24
СБ на всех торговых серверах//| Get the property value "ORDER_TYPE_FILLING" |
//+------------------------------------------------------------------+
ENUM_ORDER_TYPE_FILLING COrderInfo::TypeFilling(void) const
{
return((ENUM_ORDER_TYPE_FILLING)OrderGetInteger(ORDER_TYPE_FILLING));
}
ВСЕГДА в тестере возвращает ENUM_ORDER_TYPE_FILLING::ORDER_FILLING_RETURN.
Поэтому если в OrderModify filling задать через COrderInfo::TypeFilling(), то на том же RoboForexEU-MetaTrader 5 будет логичная ошибка [Unsupported filling mode]. Однако, на MetaQuotes-Demo этой ошибки не возникает - криво настроен сервер разработчиков?
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Ошибки, баги, вопросы
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;
}
}
Результат (снизу-вверх)
2016.10.20 16:49:14.987 2016.10.18 10:00:00 sell limit 1.00 RTS-12.16 at 100 (0 / 0 / 97600)
2016.10.20 16:49:14.987 2016.10.18 10:00:00 CTrade::OrderSend: modify #2 at 100.00000 (sl: 110.00000 tp: 90.00000) [invalid fill]
2016.10.20 16:49:14.987 2016.10.18 10:00:00 failed modify order #2 sell limit 1.00 at 100.00000 sl: 0.00000 tp: 0.00000 -> 100.00000, sl: 110.00000 tp: 90.00000 [Unsupported filling mode]
2016.10.20 16:49:14.987 2016.10.18 10:00:00 CTrade::OrderSend: sell limit 1.00 RTS-12.16 at 100 [done]
2016.10.20 16:49:14.986 2016.10.18 10:00:00 sell limit 1.00 RTS-12.16 at 100 (0 / 0 / 97600)
2016.10.20 16:49:14.985 RTS-12.16 : real ticks begin from 2016.10.18 00:00:00
Наше исходное решение по обратному выводу было реально дурным.
Через 16 лет исправили, наконец.
Все привыкнем обязательно.
Поддерживаю, многих пользователй это бесило тоже ) Однако ж почему бы не добавить возможность сортировки по столбцу "Время"? Тогда каждый сможет сделать так, как ему удобней. Сортировка вообще нужная штука, и не только по времени, а также и по названию эксперта.
И вот ещё момент, в связи с новым порядком возникает некий диссонанс с окном алертов - там то всё по прежнему с ног на голову. Я вот например часть сообщений вывожу в алертах, часть в принте, поэтому удобней было бы наблюдать всё в едином стандарте. Но полагаю, кому-то другому это может не понравится... В общем, идеальный вариант - сделать возможность сортировки в алертах тоже.
И ещё пожелание по поводу алертов - позволить пользователю менять ширину столбцов. Сейчас возможно растягивать только ширину всего окна, все столбцы растягиваются пропорционально, однако это не очень хорошее решение, т.к. для времени и названия эксперта и так хватает места, а нам требуется растянуть только ширину столбца с сообщением.
у меня такой вопрос - в мт5 при накидывании скрипта или индикатора в закладке эксперты отображается сейчас какая-то инфа,как это было в мт4?
2016.11.11 20:35:39.137 Custom indicator OsMA USDSEK,H1: loaded successfully
у меня такой вопрос - в мт5 при накидывании скрипта или индикатора в закладке эксперты отображается сейчас какая-то инфа,как это было в мт4?
2016.11.11 20:35:39.137 Custom indicator OsMA USDSEK,H1: loaded successfully
При присоединении скрипта отображается информация во вкладке "Журнал":
При присоединении скрипта отображается информация во вкладке "Журнал":
В тестере открываю и закрываю два отложенника на одном и том же тике. По какому параметру они отсортированы каждый раз одинаково в HistorySelect? Время и открытия и закрытия совпадают, но они по какой-то причине точно отсортированы.
а номера ордера или id?
Если все совпадает, то сортирует по тикетам? Возможно.
Нет, не по тикету. Доказательство
#define OFFSET (100 * _Point)
void OnTick()
{
static bool FirstRun = true;
if (FirstRun && SymbolInfoDouble(_Symbol, SYMBOL_ASK) != 0)
{
const double Price = NormalizeDouble(SymbolInfoDouble(_Symbol, SYMBOL_ASK) - OFFSET, _Digits);
const int Ticket1 = OrderSend(_Symbol, OP_BUYLIMIT, 1, Price, 0, 0, 0);
const int Ticket2 = OrderSend(_Symbol, OP_BUYLIMIT, 2, Price, 0, 0, 0);
OrderDelete(Ticket2);
OrderDelete(Ticket1);
FirstRun = false;
}
}