Возможна ли автоматизация для FILLING_MODE? - страница 3

 
prostotrader:
Т.е в ходе работы советника Вы  вызывете GetFilling ?
Да, только это происходит внутри MT4-перегрузки OrderSend, которую использую

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Библиотеки: MT4Orders

fxsaber, 2016.11.14 13:33

//   Add: Поскольку параметр SlipPage (OrderSend, OrderClose) влияет на исполнение маркет-ордеров только в Instant-режиме,
//        то через него теперь при желании можно задавать тип исполнения по остатку - 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

Преимущества перед СБ

  • MQL4-синтаксис. Самое быстрое чтение и написание торговой логики. Быстрый перенос MT4 торгового и статистического кода.
  • Возможность частичного закрытия позиции.
  • Синхронизация с торговым окружением всех Order-функций.
  • Удобное задание ORDER_FILLING_* и гарантированная корректность задания Request.filling-поля в торговом приказе.
  • История торгов кешируется - быстрее работа.
 
fxsaber:
Да, только это происходит внутри MT4-перегрузки OrderSend, которую использую

Как-то странно слышать это от Вас, когда Вы постояннно сравниваете выстродействие...

Функция GetFilling не только не нужна (в биржевой торговле), но и  тормозит работу эксперта.

Неужели трудно проверить всё, при инициализации? :) 

 
prostotrader:

Как-то странно слышать это от Вас, когда Вы постояннно сравниваете выстродействие...

Функция GetFilling не только не нужна (в биржевой торговле), но и  тормозит работу эксперта.

Неужели трудно проверить всё, при инициализации? :) 

Не понимаю, что в ней может тормозить. При инициализации неудобно совсем, т.к. отсутствует универсальность и появляются лишние действия каждый раз.

MQL4-синтаксис рулит. 

 
fxsaber:

Не понимаю, что в ней может тормозить. При инициализации неудобно совсем, т.к. отсутствует универсальность и появляются лишние действия каждый раз.

MQL4-синтаксис рулит. 

На бирже поддерживаются все три режима заливки.

Передавая в функцию один из параметров, Вы ВСЕГДА будете получать эгот же параметр на выходе!

ЗАЧЕМ?

Когда можно сразу передавать в OrderSend этот параметр? :) 

Добавлено

Тормозит сама функция, потому что на её выполнение нужно время, а она, эта функция, - не нужна. 

 
prostotrader:

Как-то странно слышать это от Вас, когда Вы постояннно сравниваете выстродействие...

Функция GetFilling не только не нужна (в биржевой торговле), но и  тормозит работу эксперта.

Неужели трудно проверить всё, при инициализации? :) 

Тут соглашусь. Лично использую проверку только при инициализации. Хотя допускаю, что есть стратегии, где режим должен меняться по ходу...
 
prostotrader:

На бирже поддерживаются все три режима заливки.

Передавая в функцию один из параметров, Вы ВСЕГДА будете получать эгот же параметр на выходе!

ЗАЧЕМ?

Когда можно сразу передавать в OrderSend этот параметр? :) 

Добавлено

Тормозит сама функция, потому что на её выполнение нужно время, а она, эта функция, - не нужна. 

  1. MT4-OrderSend имеет возможность задания режима филлинга в каждом случае.
  2. Несколько режимов филлинга использует одна и та же ТС. Особенно, если мультисимвольная, где каждый символ имеет свои особенности.
  3. Чаще всего люди о филлинге не думают, поэтому задание этого параметра упускают. Но от этого ТС не ломается.
  4. Скорость выполнения GetFilling можете замерить. Тормозов нет и быть не может.
 
fxsaber:
  1. MT4-OrderSend имеет возможность задания режима филлинга в каждом случае.
  2. Несколько режимов филлинга использует одна и та же ТС. Особенно, если мультисимвольная, где каждый символ имеет свои особенности.
  3. Чаще всего люди о филлинге не думают, поэтому задание этого параметра упускают. Но от этого ТС не ломается.
  4. Скорость выполнения GetFilling можете замерить. Тормозов нет и быть не может.
Ок, оставайтесь при своём мнении
 
fxsaber:
Скорость выполнения GetFilling можете замерить. Тормозов нет и быть не может.

#define NUMBER_OF_CALLS 1000000

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


 
Andrey Khatimlianskii:

#define NUMBER_OF_CALLS 1000000

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.
 
fxsaber:
Есть сомнение, что это правильный замер, с учетом наворотов MQL5.

С небольшими дополнениями (использовал результат вычисления) и в режиме профилирования (когда инлайнинг отключается) результат такой же:

#define NUMBER_OF_CALLS 1000000

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


Причина обращения: