Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 996

 
Alexey Viktorov:


То что вы пытаетесь распечатать не правильно. Правильно так.

Вот разобрался:

42 это числовой идентификатор: ACCOUNT_MARGIN_FREE

т.е. мы можем получить свободную маржу по константе

AccountInfoDouble(ACCOUNT_MARGIN_FREE)

Либо по ее числовому идентификатору:

AccountInfoDouble(42)

Спасибо!

 
killer67:

Вот разобрался:

42 это числовой идентификатор: ACCOUNT_MARGIN_FREE

т.е. мы можем получить свободную маржу по константе

Либо по ее числовому идентификатору:

Спасибо!

Первый-то вариант написания более информативен.

 

https://www.mql5.com/ru/docs/constants/environment_state/marketinfoconstants

Скорее всего вопрос глупый, но можно ли  использовать данные функции в MQL4? Просто инструменты MQL4 - более ограниченны.

Как в MQL4 получить данные:

SYMBOL_SESSION_DEALS

Количество сделок в текущей сессии

SYMBOL_SESSION_BUY_ORDERS

Общее число ордеров на покупку в текущий момент

long

SYMBOL_SESSION_SELL_ORDERS

Общее число ордеров на продажу в текущий момент

long

SYMBOL_VOLUME

Volume - объем в последней сделке

long

SYMBOL_VOLUMEHIGH

Максимальный Volume за день

long

SYMBOL_VOLUMELOW

Минимальный Volume за день

SYMBOL_BID

Bid - лучшее предложение на продажу

double

SYMBOL_BIDHIGH

Максимальный Bid за день

double

SYMBOL_BIDLOW

Минимальный Bid за день

double

SYMBOL_ASK

Ask - лучшее предложение на покупку

double

SYMBOL_ASKHIGH

Максимальный Ask за день

double

SYMBOL_ASKLOW

Минимальный Ask за день

SYMBOL_SESSION_VOLUME

Cуммарный объём сделок в текущую сессию

double

SYMBOL_SESSION_TURNOVER

Cуммарный оборот в текущую сессию

double

SYMBOL_SESSION_INTEREST

Cуммарный объём открытых позиций

double

SYMBOL_SESSION_BUY_ORDERS_VOLUME

Общий объём ордеров на покупку в текущий момент

double

SYMBOL_SESSION_SELL_ORDERS_VOLUME

Общий объём ордеров на продажу в текущий момент

double

SYMBOL_SESSION_OPEN

Цена открытия сессии

double

SYMBOL_SESSION_CLOSE

Цена закрытия сессии

double


Да тут просто кладезень, как можно одним движением получить данные которые могут пригодиться. Вот только как эту же инфу получить на MQL4. Возможно у кого-то появится логичный вопрос, почему же я не изучаю MQL5, ведь его возможности шире. Все просто. Не все брокеры его поддерживают. На текущий момент наиболее актуальным и востребованным все еще является MQL4.

Документация по MQL5: Константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Для получения текущей рыночной информации служат функции SymbolInfoInteger(), SymbolInfoDouble() и SymbolInfoString(). В качестве второго параметра этих функций допустимо передавать один из идентификаторов из перечислений ENUM_SYMBOL_INFO_INTEGER, ENUM_SYMBOL_INFO_DOUBLE и ENUM_SYMBOL_INFO_STRING соответственно. Некоторые символы (как...
 
Gilmor:

https://www.mql5.com/ru/docs/constants/environment_state/marketinfoconstants

Скорее всего вопрос глупый, но можно ли  использовать данные функции в MQL4? Просто инструменты MQL4 - более ограниченны.

Как в MQL4 получить данные:


Да тут просто кладезень, как можно одним движением получить данные которые могут пригодиться. Вот только как эту же инфу получить на MQL4. Возможно у кого-то появится логичный вопрос, почему же я не изучаю MQL5, ведь его возможности шире. Все просто. Не все брокеры его поддерживают. На текущий момент наиболее актуальным и востребованным все еще является MQL4.

В документации по mql4 все которые не работают помечены.

SYMBOL_BID

Bid - лучшее предложение на продажу

double

SYMBOL_BIDHIGH

Не поддерживается

double

SYMBOL_BIDLOW

Не поддерживается

double

SYMBOL_ASK

Ask - лучшее предложение на покупку

double

SYMBOL_ASKHIGH

Не поддерживается

double

SYMBOL_ASKLOW

Не поддерживается

double

SYMBOL_LAST

Не поддерживается

double

SYMBOL_LASTHIGH

Не поддерживается

double

SYMBOL_LASTLOW

Не поддерживается

double

SYMBOL_POINT

Значение одного пункта

double

Это не вся таблица. Да и не одна такая есть в документации, просто надо нажать F1 и почитать.

 
Alexey Viktorov:

В документации по mql4 все которые не работают помечены.

Спасибо.
 
Помогите разобраться, не удается корректно установить стоп-лосс.
Строки из журнала:
2019.11.16 12:38:40.660    2019.01.02 02:35:00   Для расчета стопов, принимаем значение от брокера = 30
2019.11.16 13:20:18.791    2019.01.02 02:03:00   Открываем ордер: Цена = 1.14595, Стоп-лосс = 1.14565, Тейк-профит = 1.14625
2019.11.16 13:20:18.791    2019.01.02 02:03:00   failed instant buy 0.01 EURUSD at 1.14595 sl: 1.14565 tp: 1.14625 [Invalid stops]
2019.11.16 13:20:18.792    2019.01.02 02:03:00   CTrade::OrderSend: instant buy 0.01 EURUSD at 1.14595 sl: 1.14565 tp: 1.14625 [invalid stops]


А теперь немного ясности для данного случая:
В коде перед открытием ордера я рассчитываю:
price = лучшая рыночная цена на покупку, в зависимости от ордера, в данном случае покупка.
SL = расчитываем правильный стоп (брокер допускает стопы не менее чем на 30 единиц от цены) т.е.
price (1.14595) - 0.0003 = SL (1.14565)
TP = расчитываем правильный стоп (брокер допускает стопы не менее чем на 30 единиц от цены) т.е.
price (1.14595) + 0.0003 = TP (1.14625)
Ну вроде как все верно, 30 пунктов удерживаю, но получаю ошибку установки.

Ставим SL = 0, то все ОК, ордер и тейк ставятся.
Получается ошибка в расчете на SL, где ошибка?
 
killer67:
Помогите разобраться, не удается корректно установить стоп-лосс.
Строки из журнала:
2019.11.16 12:38:40.660    2019.01.02 02:35:00   Для расчета стопов, принимаем значение от брокера = 30
2019.11.16 13:20:18.791    2019.01.02 02:03:00   Открываем ордер: Цена = 1.14595, Стоп-лосс = 1.14565, Тейк-профит = 1.14625
2019.11.16 13:20:18.791    2019.01.02 02:03:00   failed instant buy 0.01 EURUSD at 1.14595 sl: 1.14565 tp: 1.14625 [Invalid stops]
2019.11.16 13:20:18.792    2019.01.02 02:03:00   CTrade::OrderSend: instant buy 0.01 EURUSD at 1.14595 sl: 1.14565 tp: 1.14625 [invalid stops]


А теперь немного ясности для данного случая:
В коде перед открытием ордера я рассчитываю:
price = лучшая рыночная цена на покупку, в зависимости от ордера, в данном случае покупка.
SL = расчитываем правильный стоп (брокер допускает стопы не менее чем на 30 единиц от цены) т.е.
price (1.14595) - 0.0003 = SL (1.14565)
TP = расчитываем правильный стоп (брокер допускает стопы не менее чем на 30 единиц от цены) т.е.
price (1.14595) + 0.0003 = TP (1.14625)
Ну вроде как все верно, 30 пунктов удерживаю, но получаю ошибку установки.

Ставим SL = 0, то все ОК, ордер и тейк ставятся.
Получается ошибка в расчете на SL, где ошибка?

какой тип цены ?

 
Iurii Tokman:

какой тип цены ?

При покупке Price = SYMBOL_ASK

При продаже Price = SYMBOL_BID

 
killer67:

При покупке Price = SYMBOL_ASK

При продаже Price = SYMBOL_BID

спрэд  добавлять  пробовали ?

 
Iurii Tokman:

спрэд  добавлять  пробовали ?

Исправил таким образом:

double CheckSetSL(ENUM_ORDER_TYPE OrderT, double price)
  {
   if(InpSL != 0)
     {
      double CalcSL = 0.0;
      double SL = 0.0;
      if(InpSL < 0.0003)
        {
         CalcSL = 0.0003; // Если SL в настройках указано меньше 30 (установки брокером) то ставим минимально допустимую.
        }
      else
        {
         CalcSL = InpSL;
        }

      // Формируем стоп-лимит.
      if(OrderT == ORDER_TYPE_BUY)
        {

         SL = SymbolInfoDouble(_Symbol,SYMBOL_BID) - CalcSL;

        }
      else
        {

         SL = SymbolInfoDouble(_Symbol,SYMBOL_ASK) + CalcSL;

        }

      return SL;
     }

   return 0.0;
  }
Причина обращения: