возвращает политику исполнения. - страница 7

 
Я сейчас проверил кодом. 1234==2 это ложь. Действительно, сравниваются числа. Что это за надпись тогда? И получается тогда, что эта функция не может вернуть тройку, если и fok и ioc доступны?
SymbolInfoInteger(symbol,SYMBOL_FILLING_MODE);
 
Ivan_Invanov:

если 1234==2 это ложь, этот код нерабочий.

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

возвращает политику исполнения.

Alexey Viktorov, 2020.07.18 19:46

Может быть и 2, тогда функция вернёт 3. НО¡¡¡¡¡ Это нетипичная ситуация. Учитывая что вариантов только 3, то может быть 1, 2 или сумма 1+2. Именно сумма, а не третий вариант. Поэтому проверка с помощью побитовой операции может дать ответ только на вопрос: Можно-ли применить ту или иную политику заполнения.

Это побитовые операции и они чуток не так проверяются как вы это представляете. Конкретно вот такая строка 

if((filling&SYMBOL_FILLING_FOK)==SYMBOL_FILLING_FOK)

читается примерно так:

Если переменная (filling сдвинутая на SYMBOL_FILLING_FOK бит) равна значению SYMBOL_FILLING_FOK

Если я самоучка, не правильно насочинял меня кто-то из более опытных поправят.
 
Dmitry Fedoseev:

Нет, они не ошиблись. Противоречия тоже нет. Просто есть что-то, чего вы не понимаете и упорно не хотите это понять.

Нет, я хочу понять. Объясните пожалуйста еще раз.
 
Alexey Viktorov:

Это побитовые операции и они чуток не так проверяются как вы это представляете. Конкретно вот такая строка 

читается примерно так:

Если переменная (filling сдвинутая на SYMBOL_FILLING_FOK бит) равна значению SYMBOL_FILLING_FOK

Если я самоучка, не правильно насочинял меня кто-то из более опытных поправят.
Ну так или не так. Оператор то тот.
 
Ivan_Invanov:
Нет, я хочу понять. Объясните пожалуйста еще раз.

Да уж все раз по пять объяснили. Вам надо с себя начать - признать, что вы чего-то не понимаете, а не в мире кто-то ошибается и особенно в справке.

 
Dmitry Fedoseev:

Да уж все раз по пять объяснили. Вам надо с себя начать - признать, что вы чего-то не понимаете, а не в мире кто-то ошибается и особенно в справке.

Может в справке и нет ошибки, но оно написана непонятно (может только для меня). Как Я уже сказал, проверил кодом, и сейчас этот вопрос отпал. Мне в этой ветке говорили, что функция

SymbolInfoInteger(symbol,SYMBOL_FILLING_MODE);

может вернуть 3.

Если она вернет 3, то вот такой код не сработает, верно?

bool CTrade::SetTypeFillingBySymbol(const string symbol)
  {
//--- get possible filling policy types by symbol
   uint filling=(uint)SymbolInfoInteger(symbol,SYMBOL_FILLING_MODE);
   if((filling&SYMBOL_FILLING_FOK)==SYMBOL_FILLING_FOK)
     {
      m_type_filling=ORDER_FILLING_FOK;
      return(true);
     }
   if((filling&SYMBOL_FILLING_IOC)==SYMBOL_FILLING_IOC)
     {
      m_type_filling=ORDER_FILLING_IOC;
      return(true);
     }
//---
   return(false);
  }
 
Ivan_Invanov:

Может в справке и нет ошибки, но оно написана непонятно (может только для меня). Как Я уже сказал, проверил кодом, и сейчас этот вопрос отпал. Мне в этой ветке говорили, что функция

может вернуть 3.

Если она вернет 3, то вот такой код не сработает, верно?

Если SymbolInfoInteger(symbol,SYMBOL_FILLING_MODE) вернет 3, то код вернет true

 
Ivan_Invanov:

Может в справке и нет ошибки, но оно написана непонятно (может только для меня). Как Я уже сказал, проверил кодом, и сейчас этот вопрос отпал. Мне в этой ветке говорили, что функция

может вернуть 3.

Если она вернет 3, то вот такой код не сработает, верно?

Я вам ещё раз пытаюсь показать написанное на второй странице вашей темы

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

возвращает политику исполнения.

Alexey Viktorov, 2020.07.18 19:46

Может быть и 2, тогда функция вернёт 3. НО¡¡¡¡¡ Это нетипичная ситуация. Учитывая что вариантов только 3, то может быть 1, 2 или сумма 1+2. Именно сумма, а не третий вариант. Поэтому проверка с помощью побитовой операции может дать ответ только на вопрос: Можно-ли применить ту или иную политику заполнения.

попытайтесь внимательно прочесть что написано. Функция SymbolInfoInteger(symbol,SYMBOL_FILLING_MODE);

  • может вернуть 1 что соответствует SYMBOL_FILLING_FOK
  • может вернуть 2 что соответствует SYMBOL_FILLING_IOC
  • и может вернуть 3 что соответствует СУММЕ  SYMBOL_FILLING_FOK +  SYMBOL_FILLING_IOC

Распечатайте значения флагов SYMBOL_FILLING_FOK и SYMBOL_FILLING_IOC

Просто напишите

Print(SYMBOL_FILLING_FOK);
Print(SYMBOL_FILLING_IOC);

Что вы увидите¿¿¿¿

 
Dmitry Fedoseev:

Если SymbolInfoInteger(symbol,SYMBOL_FILLING_MODE) вернет 3, то код вернет true

спасибо, я сейчас понял, что я неправильно делал конъюнкцию.
 
Спасибо всем за ответы. Во всём разобрался. Ошибся в логических операциях, по этому путаница такая и возникла. Спасибо, что возились со мной)
Причина обращения: