Logo

Вход

Войти с помощью соц. сетей
X
 
  • Фильтр
  • Время
  • Показать
Очистить всё
новые сообщения
  • #1 Свернуть

    Тип исполнения ордера и тип ордера по исполнению

    Названия, конечно, этих метаквотовских переменных не вариантовые, но как есть..
    Появился вопрос к тем, кто уже торгует на мт5.
    1) При посыле ордера есть такой параметр как ENUM_ORDER_TYPE_FILLING в структуре MqlTradeRequest. Как я понял, его при инициализации нельзя один раз просчитать и запомнить в переменной т.к. теоритически может изменится ситуация и нехватить, например, ликвидности "на рынке" (ДЦ). Как бы там ни было, но ДЦ может не дать открыть полным объёмом и придётся что-то придумывать, если нужно открыть или не открываться вообще. Я сделал вывод, что нужно перед каждой торговой операцией высчитывать этот параметр type_filling. Я прав?
    2) Касательно типов исполнения тоже нюанс. Его обязательно проверять перед каждой торговой операцией или можно где-нить в конструкторе торгового класса проинициализировать и потом брать значение с переменной постоянно?
    Я ещё не гонял на реале ничего своего т.к. не дописал, поэтому очень интересно мнение того, кто уже прошёл этот путь.
  • <a href="https://www.instaforex.org/ru/?x=ruforum">InstaForex</a>
  • #2 Свернуть

    Сообщение от скальпер Посмотреть сообщение
    1) При посыле ордера есть такой параметр как ENUM_ORDER_TYPE_FILLING в структуре MqlTradeRequest. Как я понял, его при инициализации нельзя один раз просчитать и запомнить в переменной т.к. теоритически может изменится ситуация и нехватить, например, ликвидности "на рынке" (ДЦ). Как бы там ни было, но ДЦ может не дать открыть полным объёмом и придётся что-то придумывать, если нужно открыть или не открываться вообще.
    На этот вопрос ответ можно найти на форуме у метаквотов.

    Сообщение от скальпер Посмотреть сообщение
    2) Касательно типов исполнения тоже нюанс. Его обязательно проверять перед каждой торговой операцией или можно где-нить в конструкторе торгового класса проинициализировать и потом брать значение с переменной постоянно?
    Этот параметр привязан к типу торгового счета. Поэтому, как вариант, его можно один раз сохранить, а потом пользоваться сохраненным значением. Хотя, как по мне, смысла в этом никакого.
     

    Комментарий

    • #3 Свернуть

      Сообщение от ir0407 Посмотреть сообщение
      Этот параметр привязан к типу торгового счета. Поэтому, как вариант, его можно один раз сохранить, а потом пользоваться сохраненным значением. Хотя, как по мне, смысла в этом никакого.
      Как нет? На 1 строку меньше кода.. Имею ввиду, в тех функциях, где этот параметр нужен. Вполне логично.

      Сообщение от ir0407 Посмотреть сообщение
      На этот вопрос ответ можно найти на форуме у метаквотов.
      Здесь написано, что можно один раз. Хотя, опять-таки, это я допускаю для форекса. Для фондовых рынков, где ликвидность ограничена, может не прокатить.

      Хотя, кто-то пользуется этой ужасной конструкцией перед вызовом торговой функции. Я её понимаю, не не полностью..
      PHP код:
      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(SymbSYMBOL_TRADE_EXEMODE);
        const 
      int FillingMode = (int)::SymbolInfoInteger(SymbSYMBOL_FILLING_MODE);

        return((
      FillingMode == || (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);

       

      Комментарий

      • #4 Свернуть

        Сообщение от скальпер Посмотреть сообщение
        Как нет? На 1 строку меньше кода.. Имею ввиду, в тех функциях, где этот параметр нужен. Вполне логично.
        Ну... На вкус и цвет для каждого фломастеры разные.

        Сообщение от скальпер Посмотреть сообщение
        Здесь написано, что можно один раз. Хотя, опять-таки, это я допускаю для форекса. Для фондовых рынков, где ликвидность ограничена, может не прокатить.
        Я фондой не увлекался, поэтому однозначно сказать не могу. Надо проверять...

        Сообщение от скальпер Посмотреть сообщение
        Хотя, кто-то пользуется этой ужасной конструкцией перед вызовом торговой функции. Я её понимаю, не не полностью..
        Дык разложи ее на составляющие и будет тебе счастье в понимании. Если коротко, то там в зависимости от входных параметров и параметров счета возвращается актуальный FillingMode.
           

        Комментарий

        • #5 Свернуть

          Я в той ветке прочитал, суть этого метода. Но решил паралельно втыкнуть в реализацию. Но синтаксис странный какой-то. Например,
          PHP код:
            const ENUM_SYMBOL_TRADE_EXECUTION executionMode = (ENUM_SYMBOL_TRADE_EXECUTION) :: SymbolInfoInteger(symbolSYMBOL_TRADE_EXEMODE);
            const 
          int fillingMode = (int) :: SymbolInfoInteger(symbolSYMBOL_FILLING_MODE); 
          В этих строках я вижу явное приведение типов должно было бы быть, а есть, на самом деле, принадлежность к типу ( :: ). Интересно, это только задался этим вопросом и недогнал или не только я ))
             

          Комментарий

          • #6 Свернуть

            Сообщение от скальпер Посмотреть сообщение
            Но синтаксис странный какой-то. Например,
            PHP код:
              const ENUM_SYMBOL_TRADE_EXECUTION executionMode = (ENUM_SYMBOL_TRADE_EXECUTION) :: SymbolInfoInteger(symbolSYMBOL_TRADE_EXEMODE);
              const 
            int fillingMode = (int) :: SymbolInfoInteger(symbolSYMBOL_FILLING_MODE); 
            В этих строках я вижу явное приведение типов должно было бы быть, а есть, на самом деле, принадлежность к типу ( :: ). Интересно, это только задался этим вопросом и недогнал или не только я ))
            Нормальный синтаксис... Особенно если человек, который его использовал, задействовал его в либах, в которых может присутствовать собственная функция с именем SymbolInfoInteger(). Поэтому для того чтобы сказать компилятору откуда брать функцию SymbolInfoInteger() использован оператор разрешения контекста. Так для строки:
            PHP код:
            const ENUM_SYMBOL_TRADE_EXECUTION executionMode =  (ENUM_SYMBOL_TRADE_EXECUTION) :: SymbolInfoInteger(symbol,  SYMBOL_TRADE_EXEMODE); 
            приведением к типу является (ENUM_SYMBOL_TRADE_EXECUTION), а опреатор :: служит для разрешения контекста и в данном случае он говорит, что надо использовать глобальный контекст, т.е. АПИ функции MQL5, а не то, что компилятор может встретить при компиляции либы автора кода.
               

            Комментарий

            • #7 Свернуть

              Я примерно так это и прочёл. Но вот смотря на подобную дичь, хочется упростить. Возник вопрос, нафига так заморачиваться..
              Я написал проще:
              PHP код:
              //==================================================================================================================================================================================
              // Setter для m_orderFillingType(политика исполнения позиции). =====================================================================================================================
              void Position :: setOrderFillingType(void) {
              //---
                
              int fillingMode = (int)SymbolInfoInteger(m_symbolSYMBOL_FILLING_MODE);    // Получение вариантов заполнения ордера

                
              if ((SYMBOL_FILLING_FOKfillingMode) == SYMBOL_FILLING_FOK ) {
                  
              m_orderFillingType ORDER_FILLING_FOK;
                  return;
                } else {
                if ((
              SYMBOL_FILLING_IOCfillingMode) == SYMBOL_FILLING_IOC) {
                  
              m_orderFillingType ORDER_FILLING_IOC;
                } else {
                  
              m_orderFillingType ORDER_FILLING_RETURN;}
                }

              Вызываю функцию и первый желаемый тип проверяю (полное заполнение), дальше остальные.. Я думаю ещё 2 последние (частичное и ORDER_FILLING_RETURN) рокирнуть чтобы частичное было на крайняк. По ходу, это и читабельнее и удобнее. Равзе не так?
              Я же верно всё написал.
                 

              Комментарий

              • #8 Свернуть

                Сообщение от скальпер Посмотреть сообщение
                Но вот смотря на подобную дичь, хочется упростить. Возник вопрос, нафига так заморачиваться..
                Ну что тут скажешь... Сколько людей - столько и мнений.
                Как говорится: "Не стреляйте в пианиста, он играет, как умеет".
                   

                Комментарий

                • #9 Свернуть

                  Ну так вроде бы всё верно. Зачем тогда такое нагромождать с пачкой булевой логики?
                     

                  Комментарий

                  • #10 Свернуть

                    Сообщение от скальпер Посмотреть сообщение
                    Ну так вроде бы всё верно.
                    Это ты себя так успокаиваешь? Насыплю тебе слегка соли на рану... Его код, походу, заточен только под форекс, т.к. использует только SYMBOL_TRADE_EXECUTION_EXCHANGE и SYMBOL_TRADE_EXECUTION_INSTANT, а этого для фонды "маловато будет". Да и для форекса маловато...

                    Сообщение от скальпер Посмотреть сообщение
                    Зачем тогда такое нагромождать с пачкой булевой логики?
                    За-то компактненько. Все уместилось в одну строчку кода. Ты же вон тоже иногда любишь поэкономить...
                    Сообщение от скальпер Посмотреть сообщение
                    На 1 строку меньше кода..
                     

                    Комментарий

                    • <a href="https://www.instaforex.org/ru/?x=ruforum">InstaForex</a>
                    • #11 Свернуть

                      Согласен. Я оставил свой вариант. У меня читабельнее)
                       

                      Комментарий

                      Сейчас онлайн

                      working...
                      X