Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 1536

 
Aleksandr Slavskii #:

Вызывать PositionGetDouble нужно после PositionSelect иначе в вашем Price окажется скорее всего мусор или ноль, потом вы будете сравнивать этот ноль с асками бидами, где нибудь да сработает условие.

Что делает этот код?

Хренову тучу раз он делает одно и то же.

Полагаю, что индексом массива mqlTick должен быть не ноль, а i.

Ну и про не правильные биды аски в открытиях позиций, я написал в предыдущем сообщении.

Вам лучше вообще не указывать цену для открытия позиции, пусть это делает класс CTrade

Так у вас будет меньше шансов ошибиться.


При наступлении условия bid0 > ask0 вы хотите открывать позицию.

По мне так при наступлении этого условия, нужно закрывать все открытые позиции, закрывать терминал и выключать компьютер)))

PositionSelect - надо будет потратить кусочек времени, чтобы понять, почему не открываются позиции, когда я его использую. Так что временно пользую !PositionSelect(Symbol()), чтобы в любой момент времени работала только одна позиция на инструменте. Поэтому, я думаю, и

double Price            = PositionGetDouble(POSITION_PRICE_OPEN);

работает правильно. Проверял. Или это не всегда?

 for(int i = 0; i < ArraySize(mqlTick); i++)
  {
     double bid1 = NormalizeDouble(mqlTick[0].bid, _Digits); // первая цена bid за последний период
     double ask1 = NormalizeDouble(mqlTick[0].ask, _Digits); // первая цена ask за последний период

Этот код по таймеру, каждые 300 миллисекунд призван находить самую первую цену за период. Поэтому и индекс 0. Как еще я первую цену за период найду?

Цена открытия бай должна быть аск, на сколько я понял. А селл - бид. Видимо, я неправильно прописал открытие позиции. Там наоборот. Имя инструмента, получается, тоже из-за класса нет смысла писать при открытии? Только лотажность и все?

Касаемо условия открытия, читал, что спред бывает отрицательным. Вот и попытался это предусмотреть, но неправильно прописал логику. На самом деле не бывает спред отрицательным?

В общем, сердечно благодарю. Я бы и не обратил внимания, если бы Вы не показали.

Файлы:
 
Здравствуйте, ребята, подскажите, пожалуйста, какой язык мне стоит изучать в программировании для MetaTrader 5?
 
152488748 #:
Здравствуйте, ребята, подскажите, пожалуйста, какой язык мне стоит изучать в программировании для MetaTrader 5?

Смотрим вверху этого сайта, щёлкаем по ссылке и начинаем изучать:

Программирование на MQL5 для трейдеров - Учебник на MQL5.com
Программирование на MQL5 для трейдеров - Учебник на MQL5.com
  • www.mql5.com
Современный трейдинг немыслим без компьютера. Автоматизация рабочего процесса трейдера уже давно вышла за пределы бирж и офисов брокеров, став...
 
По какой формуле расчитывается SYMBOL_PRICE_VOLATILITY?
 
maxvoronin74 #:
По какой формуле расчитывается SYMBOL_PRICE_VOLATILITY?

Это не устроит?

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Info_Print()
  {
   double change=0.0; // объявим и инициализируем переменную change (изменение цены в % с момента открытия торговой сессии)
   MqlTick mql_tick; // объявим и инициализируем переменную mql_tick для упрощенного доступа к структуре MqlTick
   SymbolInfoTick(_Symbol,mql_tick); // получим актуальные текущие цены
   double price_bid=mql_tick.bid; // получим текущую цену bid
   double price_open_day=iOpen(_Symbol,PERIOD_D1,0); // получим цену открытия торговой сессии
   if(price_open_day>0 && price_bid>0) // если все цены получены и они больше нуля
      change=((price_bid-price_open_day)*100)/price_open_day; // вычисляем изменение цены в %
   return(change); // возвращаем значение изменения цены в %
  }
//+------------------------------------------------------------------+

С уважением, Владимир.

 
MrBrooklin #:

Это не устроит?

С уважением, Владимир.

Благодарю. Коэфициент изменения цены за день. Я понял. Но для скальпирования хочется иметь гибкий инструмент определения волатильности, чтобы сравнивать его, например, со спредом.

SYMBOL_PRICE_VOLATILITY добавили в 2020 году. А формула не известна? Поисковик не показывает...
 
Aleksandr Slavskii #:

Ну, и про не правильные биды аски в открытиях позиций, я написал в предыдущем сообщении.

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

 
maxvoronin74 #:

... Но для скальпирования хочется иметь гибкий инструмент определения волатильности, чтобы сравнивать его, например, со спредом.

SYMBOL_PRICE_VOLATILITY добавили в 2020 году. А формула не известна? Поисковик не показывает...

А что мешает вместо цены открытия сессии вставить спред? Его легко получить при помощи SymbolInfoInteger(_Symbol, SYMBOL_SPREAD) и умножить на SymbolInfoDouble(_Symbol, SYMBOL_POINT).

С уважением, Владимир.

 
MrBrooklin #:

А что мешает вместо цены открытия сессии вставить спред? Его легко получить при помощи SymbolInfoInteger(_Symbol, SYMBOL_SPREAD) и умножить на SymbolInfoDouble(_Symbol, SYMBOL_POINT).

С уважением, Владимир.

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

Пока что не открывает позиции.

Файлы:
 
maxvoronin74 #:

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

Пока что не открывает позиции.

Предположу, что этот советник при таких заданных условиях никогда не откроет позиции. Похоже, что переменная PerVolatiliti всегда равна нулю.

С уважением, Владимир.

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