![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Т.е в ходе работы советника Вы вызывете GetFilling ?
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Библиотеки: MT4Orders
fxsaber, 2016.11.14 13:33
// то через него теперь при желании можно задавать тип исполнения по остатку - ENUM_ORDER_TYPE_FILLING:
// ORDER_FILLING_FOK, ORDER_FILLING_IOC или ORDER_FILLING_RETURN.
// В случае ошибочного задания или не поддержки символом заданного типа исполнения автоматически будет выбран рабочий режим.
// Примеры:
// OrderSend(Symb, Type, Lots, Price, ORDER_FILLING_FOK, SL, TP) - отправить соответствующий ордер с типом исполнения ORDER_FILLING_FOK
// OrderSend(Symb, Type, Lots, Price, ORDER_FILLING_IOC, SL, TP) - отправить соответствующий ордер с типом исполнения ORDER_FILLING_IOC
// OrderClose(Ticket, Lots, Price, ORDER_FILLING_RETURN) - отправить соответствующий маркет-ордер с типом исполнения ORDER_FILLING_RETURN
Преимущества перед СБ
Да, только это происходит внутри MT4-перегрузки OrderSend, которую использую
Как-то странно слышать это от Вас, когда Вы постояннно сравниваете выстродействие...
Функция GetFilling не только не нужна (в биржевой торговле), но и тормозит работу эксперта.
Неужели трудно проверить всё, при инициализации? :)
Как-то странно слышать это от Вас, когда Вы постояннно сравниваете выстродействие...
Функция GetFilling не только не нужна (в биржевой торговле), но и тормозит работу эксперта.
Неужели трудно проверить всё, при инициализации? :)
Не понимаю, что в ней может тормозить. При инициализации неудобно совсем, т.к. отсутствует универсальность и появляются лишние действия каждый раз.
MQL4-синтаксис рулит.
Не понимаю, что в ней может тормозить. При инициализации неудобно совсем, т.к. отсутствует универсальность и появляются лишние действия каждый раз.
MQL4-синтаксис рулит.
На бирже поддерживаются все три режима заливки.
Передавая в функцию один из параметров, Вы ВСЕГДА будете получать эгот же параметр на выходе!
ЗАЧЕМ?
Когда можно сразу передавать в OrderSend этот параметр? :)
Добавлено
Тормозит сама функция, потому что на её выполнение нужно время, а она, эта функция, - не нужна.
Как-то странно слышать это от Вас, когда Вы постояннно сравниваете выстродействие...
Функция GetFilling не только не нужна (в биржевой торговле), но и тормозит работу эксперта.
Неужели трудно проверить всё, при инициализации? :)
На бирже поддерживаются все три режима заливки.
Передавая в функцию один из параметров, Вы ВСЕГДА будете получать эгот же параметр на выходе!
ЗАЧЕМ?
Когда можно сразу передавать в OrderSend этот параметр? :)
Добавлено
Тормозит сама функция, потому что на её выполнение нужно время, а она, эта функция, - не нужна.
Скорость выполнения GetFilling можете замерить. Тормозов нет и быть не может.
void OnStart()
{
ulong t0 = GetMicrosecondCount();
for ( int i = 0; i < NUMBER_OF_CALLS; i ++ ) GetFilling( _Symbol, ORDER_FILLING_FOK );
ulong t1 = GetMicrosecondCount();
Print( "GetFilling() average calculation time is ", (t1-t0)/double(NUMBER_OF_CALLS), " mcs" );
}
ENUM_ORDER_TYPE_FILLING GetFilling( const string Symb, const uint Type = ORDER_FILLING_FOK )
{
const ENUM_SYMBOL_TRADE_EXECUTION ExeMode = (ENUM_SYMBOL_TRADE_EXECUTION)::SymbolInfoInteger(Symb, SYMBOL_TRADE_EXEMODE);
const int FillingMode = (int)::SymbolInfoInteger(Symb, SYMBOL_FILLING_MODE);
return((FillingMode == 0 || (Type >= ORDER_FILLING_RETURN) || ((FillingMode & (Type + 1)) != Type + 1)) ?
(((ExeMode == SYMBOL_TRADE_EXECUTION_EXCHANGE) || (ExeMode == SYMBOL_TRADE_EXECUTION_INSTANT)) ?
ORDER_FILLING_RETURN : ((FillingMode == SYMBOL_FILLING_IOC) ? ORDER_FILLING_IOC : ORDER_FILLING_FOK)) :
(ENUM_ORDER_TYPE_FILLING)Type);
}
2017.02.07 01:09:10.222 TestGetFilling (EURUSD,D1) GetFilling() average calculation time is 1.477318 mcs
void OnStart()
{
ulong t0 = GetMicrosecondCount();
for ( int i = 0; i < NUMBER_OF_CALLS; i ++ ) GetFilling( _Symbol, ORDER_FILLING_FOK );
ulong t1 = GetMicrosecondCount();
Print( "GetFilling() average calculation time is ", (t1-t0)/double(NUMBER_OF_CALLS), " mcs" );
}
Есть сомнение, что это правильный замер, с учетом наворотов MQL5.
С небольшими дополнениями (использовал результат вычисления) и в режиме профилирования (когда инлайнинг отключается) результат такой же:
void OnStart()
{
ENUM_ORDER_TYPE_FILLING f;
ulong t0 = GetMicrosecondCount();
for ( int i = 0; i < NUMBER_OF_CALLS; i ++ ) f = GetFilling( _Symbol, ORDER_FILLING_FOK );
ulong t1 = GetMicrosecondCount();
Print( "GetFilling() average calculation time is ", (t1-t0)/double(NUMBER_OF_CALLS), " mcs, filling type = ", EnumToString( f ) );
}
ENUM_ORDER_TYPE_FILLING GetFilling( const string Symb, const uint Type = ORDER_FILLING_FOK )
{
const ENUM_SYMBOL_TRADE_EXECUTION ExeMode = (ENUM_SYMBOL_TRADE_EXECUTION)::SymbolInfoInteger(Symb, SYMBOL_TRADE_EXEMODE);
const int FillingMode = (int)::SymbolInfoInteger(Symb, SYMBOL_FILLING_MODE);
return((FillingMode == 0 || (Type >= ORDER_FILLING_RETURN) || ((FillingMode & (Type + 1)) != Type + 1)) ?
(((ExeMode == SYMBOL_TRADE_EXECUTION_EXCHANGE) || (ExeMode == SYMBOL_TRADE_EXECUTION_INSTANT)) ?
ORDER_FILLING_RETURN : ((FillingMode == SYMBOL_FILLING_IOC) ? ORDER_FILLING_IOC : ORDER_FILLING_FOK)) :
(ENUM_ORDER_TYPE_FILLING)Type);
}
2017.02.07 01:26:36.381 TestGetFilling (EURUSD,D1) GetFilling() average calculation time is 1.547007 mcs, filling type = ORDER_FILLING_FOK