Вот эта запись не понятна
Переменная exp что делает? В моем понимании & - логическое И. Но что то не логичная запись SYMBOL_EXPIRATION_GTC != SYMBOL_EXPIRATION_GTC
В моем понимании & - логическое И.
Как бы да, но побитовое.
Т.е., в переменной exp сбрасываем все биты, кроме того, который соответствует SYMBOL_EXPIRATION_GTC (т.е., по маске SYMBOL_EXPIRATION_GTC), и проверяем, выставлен ли этот бит, сравнением, опять же, с SYMBOL_EXPIRATION_GTC.
Как бы да, но побитовое.
Т.е., в переменной exp сбрасываем все биты, кроме того, который соответствует SYMBOL_EXPIRATION_GTC (т.е., по маске SYMBOL_EXPIRATION_GTC), и проверяем, выставлен ли этот бит, сравнением, опять же, с SYMBOL_EXPIRATION_GTC.
Мне после шарпа не ожидаемо было увидеть в if число и не получить ошибку. Что тогда происходит здесь:
bool a=true; bool b&=a;
Тоже самое что и
b=b&&a;
?
Мне после шарпа не ожидаемо было увидеть в if число и не получить ошибку. Что тогда происходит здесь:
Тоже самое что и
?
На всякий случай лучше так не делать, не проверив, что получается (bool, наверное, можно распечатать через PrintFormat как uchar в HEX'уальном виде и посмотреть, что там реально получается).
Побитовые операции есть смысл использовать если мы рассматриваем какую-то переменную как набор однобитовых флагов.
Вот тут и далее я давал свой вариант использования такой переменной: https://www.mql5.com/ru/forum/6343/page1384#comment_26447195
Для разных брокеров требуется указать разное значение ENUM_ORDER_TYPE_TIME
Плюс цена должна быть в отложенных заявках правильная.
Как мне автоматически определить для каждого брокера?
1)Объясните мне код из <Trade\Trade.mqh>
SymbolInfoInteger получает разрешенный тип исполнения по времени. Насколько понимаю, отложенных ордеров. Рыночные еще большой вопрос.
Может быть их несколько, что он выдает?
Вот эта запись не понятна
Переменная exp что делает? В моем понимании & - логическое И. Но что то не логичная запись SYMBOL_EXPIRATION_GTC != SYMBOL_EXPIRATION_GTC
К примеру у Финам брокера type_time = ORDER_TIME_GTC для отложенных ордеров. Открытие брокер ORDER_TIME_DAY
2) Форекс кухни не дают выставлять отложенные ордера рядом с ценой. Приходит ответ - не правильная цена. Как запросить этот диапазон?
И что это за диапазон цен такой?
Если не возможно понять объяснения образованных программистов, без поддёвки, то можно попытаться разобраться как работать с флагами.
Вот таблица примера флагов
Идентификатор | Значение | Описание |
---|---|---|
SYMBOL_ORDER_MARKET | 1 | Разрешены рыночные ордера (Buy и Sell) |
SYMBOL_ORDER_LIMIT | 2 | Разрешены лимитные ордера (Buy Limit и Sell Limit) |
SYMBOL_ORDER_STOP | 4 | Разрешены стоп-ордера (Buy Stop и Sell Stop) |
SYMBOL_ORDER_STOP_LIMIT | 8 | Разрешены стоп-лимит ордера (Buy Stop Limit и Sell Stop Limit) |
SYMBOL_ORDER_SL | 16 | Разрешена установка Stop Loss |
SYMBOL_ORDER_TP | 32 | Разрешена установка Take Profit |
SYMBOL_ORDER_CLOSEBY | 64 | Разрешение на закрытие позиции с помощью встречной – то есть открытой в противоположном направлении по тому же инструменту. Свойство задается для счетов с хеджинговой системой учета (ACCOUNT_MARGIN_MODE_RETAIL_HEDGING) |
После этой таблицы в документации есть примеры.
//+------------------------------------------------------------------+ //| Функция выводит на печать разрешенные для символа типы ордеров | //+------------------------------------------------------------------+ void Check_SYMBOL_ORDER_MODE(string symbol) { //--- получим значение свойства, описывающего разрешенные типы ордеров int symbol_order_mode=(int)SymbolInfoInteger(symbol,SYMBOL_ORDER_MODE); //--- проверка на рыночные ордера (Market Execution) if((SYMBOL_ORDER_MARKET&symbol_order_mode)==SYMBOL_ORDER_MARKET) Print(symbol+": Рыночные ордера разрешены (Buy и Sell)"); //--- проверка на ордера типа Limit if((SYMBOL_ORDER_LIMIT&symbol_order_mode)==SYMBOL_ORDER_LIMIT) Print(symbol+": Ордера Buy Limit и Sell Limit разрешены"); //--- проверка на ордера типа Stop if((SYMBOL_ORDER_STOP&symbol_order_mode)==SYMBOL_ORDER_STOP) Print(symbol+": Ордера Buy Stop и Sell Stop разрешены"); //--- проверка на ордера типа Stop Limit if((SYMBOL_ORDER_STOP_LIMIT&symbol_order_mode)==SYMBOL_ORDER_STOP_LIMIT) Print(symbol+": Ордера Buy Stop Limit и Sell Stop Limit разрешены"); //--- проверка на возможность установки ордеров Stop Loss if((SYMBOL_ORDER_SL&symbol_order_mode)==SYMBOL_ORDER_SL) Print(symbol+": Ордера Stop Loss разрешены"); //--- проверка на возможность установки ордеров Take Profit if((SYMBOL_ORDER_TP&symbol_order_mode)==SYMBOL_ORDER_TP) Print(symbol+": Ордера Take Profit разрешены"); //--- проверка разрешения на закрытие позиции с помощью встречной if((SYMBOL_ORDER_TP&symbol_order_mode)==SYMBOL_ORDER_CLOSEBY) Print(symbol+": Встречное закрытие разрешено"); //--- }
переменная symbol_order_mode может иметь только сумму флагов, максимально 127 для вышеуказанного набора флагов. И строка
if((SYMBOL_ORDER_MARKET&symbol_order_mode)==SYMBOL_ORDER_MARKET)
проверяет есть-ли флаг соответствующий значению SYMBOL_ORDER_MARKET
Обратите внимание, что если взять сумму 1+2+8=11 то проверяя наличие флага равному 4 вы не найдёте. Равно как и в сумме 10 вы не найдёте ни 4, ни 1.
Это просто для забавы
if((4&11)==4) Print("Ничего не напечатает"); if((2&10)==2) Print("Флаг 2 присутствует");
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Для разных брокеров требуется указать разное значение ENUM_ORDER_TYPE_TIME
Плюс цена должна быть в отложенных заявках правильная.
Как мне автоматически определить для каждого брокера?
1)Объясните мне код из <Trade\Trade.mqh>
SymbolInfoInteger получает разрешенный тип исполнения по времени. Насколько понимаю, отложенных ордеров. Рыночные еще большой вопрос.
Может быть их несколько, что он выдает?
Вот эта запись не понятна
Переменная exp что делает? В моем понимании & - логическое И. Но что то не логичная запись SYMBOL_EXPIRATION_GTC != SYMBOL_EXPIRATION_GTC
К примеру у Финам брокера type_time = ORDER_TIME_GTC для отложенных ордеров. Открытие брокер ORDER_TIME_DAY
2) Форекс кухни не дают выставлять отложенные ордера рядом с ценой. Приходит ответ - не правильная цена. Как запросить этот диапазон?
И что это за диапазон цен такой?