Ваши вопросы по языку MQL4

ansol

Местный знаток
Для начала неплохо было бы закрывать BUY по Bid, SELL по Ask.

Да так и сделано - я ж скопировал код функции из работающего советника, могу полный текст функции привести в обоих случаях. Боюсь, что разбираться никто не захочет, а я заблудился где-то :nda:
 

qqmber

Почетный гражданин
Да так и сделано - я ж скопировал код функции из работающего советника, могу полный текст функции привести в обоих случаях. Боюсь, что разбираться никто не захочет, а я заблудился где-то :nda:

Ты что-то сам себе противоречишь, постом выше ты же написал наоборот.
Давай текст, посмотрю.
 

ansol

Местный знаток
Ты что-то сам себе противоречишь, постом выше ты же написал наоборот.
Давай текст, посмотрю.
Да не, все верно было. Где-то в другом месте логику нарушил, буду искать
PHP:
iType = OP_SELL; sType = "SELL"; dPrice = Ask;
 бла-бла-бла
if(OrderProfit() < 0 && OrderType() == iType)
  {
      iProfit = OrderProfit()/(dRx*OrderLots()*MarketInfo(_Symbol, MODE_TICKVALUE));
         if(iProfit + Stop*dATR/Point < 0 && dProfit*dRx + OrderProfit() > 0)
             {
                 fClose = OrderClose(OrderTicket(), OrderLots(), dPrice, iPips, clrNONE);
                     if(fClose)
                         {
                             Comment("Epic Fail: ", OrderComment(), "\nwith ", _Symbol, "/", sType, "\nLoss: ", OrderProfit(),
                             "$ R", DoubleToStr(dATR/Point, 0), "\n", TimeToStr(TimeLocal(),TIME_MINUTES));
                              return(fClose);
                           } else {
                                        int err =  GetLastError();
                                        Print("error(",err,"): ", ErrorDescription(err), " #", OrderTicket(), " ", OrderComment());
                                        }
                                  }
                         }
 

qqmber

Почетный гражданин
Напиши
Код:
fClose = OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), iPips, clrNONE);
и жизнь наладится.
 

ansol

Местный знаток
Напиши
PHP:
fClose = OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), iPips, clrNONE);
и жизнь наладится.
Как это OrderClosePrice?! оО
Оно же еще не закрытое! В хелпе приводится пример с выборкой из MODE_HISTORY для этого параметра, а для MODE_TRADES ХЗ что будет вообще, скорее всего "0"
 

qqmber

Почетный гражданин
Как это OrderClosePrice?! оО
Оно же еще не закрытое!
Ему незакрытому OrderClosePrice() вернет правильную цену Bid или Ask в зависимости от направления позиции. Недокументированная фича (а зря - удобно), работала всегда и будет работать.
 
Последнее редактирование:

ansol

Местный знаток
Ему незакрытому OrderClosePrice() вернет правильную цену Bid или Ask в зависимости от направления позиции. Недокументированная фича (а зря - удобно), работала всегда и будет работать.

Ща проверим!
Это ж два if экономится в коде! Елы-палы! ;)
 

ansol

Местный знаток
Ну да, ну да. Хорошо еще иметь в виду, что при маркет исполнении этот параметр вообще игнорируется, хоть свой день рождения поставь :D

Не игнорируется, однако! В тестере (я же указал выше) выкидывает:
Error 138 requote
Это если перепутать Ask и Bid для SELL и BUY

А вот с OrderClosePrice все ОК работает - я уже проверил в тестере, счас можно на реале посмотреть, если до окончания торгов такой случай представится(иначе только на следующей неделе уточнить удастся)
 
Последнее редактирование:

qqmber

Почетный гражданин
Не игнорируется, однако! В тестере (я же указал выше) выкидывает:
Error 138 requote
Это если перепутать Ask и Bid для SELL и BUY

А вот с OrderClosePrice все ОК работает - я уже проверил в тестере, счас можно на реале посмотреть, если до окончания торгов такой случай представится(иначе только на следующей неделе уточнить удастся)

Тестер это довольно ограниченная модель вселенной :)
Я про маркет исполнение писал. Там нет и не может быть реквот, маркет ордер уходит вообще без цены, почем зальют, ту и получишь.
 

ctmcn

Новичок форума
Здравствуйте !
Помогите, пожалуйста. Типовые варнинги (2шт.) при проверке МЕ от билдов 6ХХ.
Что они такое и как от них избавиться.:)
С уважением.
 

Вложения

  • Bollinger Bands_Stop_v1.mq4
    6,3 КБ · Просмотры: 23

ansol

Местный знаток
Никак. Убрать строчку
PHP:
#property strict
Доходит до смешного, пишем
PHP:
round
? а оно предупреждение выдает в стиле "часть данных может потеряться" :)
 

ctmcn

Новичок форума
Никак. Убрать строчку
PHP:
#property strict
Доходит до смешного, пишем
PHP:
round
? а оно предупреждение выдает в стиле "часть данных может потеряться" :)
Вообще-то все убрал сам - озарение наверное посетило.
Так, что варнингов быть не должно в принципе.
 

ansol

Местный знаток
Вообще-то все убрал сам - озарение наверное посетило.
Так, что варнингов быть не должно в принципе.

Их и нет в нормальном языке, только в MQL4 есть :)
Типа:
PHP:
double a = 1.5;
int b = round(a);
Получаем:
possible loss of data due to type conversion моясова.mq4 1 10
 

AlexeyVik

Программист mql4 mql5
Их и нет в нормальном языке, только в MQL4 есть :)
Типа:
PHP:
double a = 1.5;
int b = round(a);
Получаем:
possible loss of data due to type conversion моясова.mq4 1 10
Их и в MQL4 не будет у внимательных программистов.
Функция MathRound возвращает число типа double _http://docs.mql4.com/ru/math/mathround а в примечании сказано только о том что вместо функции MathRound() можно использовать функцию round(). и ничего об изменении типа данных.
 

ansol

Местный знаток
Их и в MQL4 не будет у внимательных программистов.
Функция MathRound возвращает число типа double _http://docs.mql4.com/ru/math/mathround а в примечании сказано только о том что вместо функции MathRound() можно использовать функцию round(). и ничего об изменении типа данных.
Это всё понятно, внимательный ты наш. Как получить целое число из double?

Я уж не говорю о том, что спред по ихнему почему-то тоже double, хотя на самом деле целое:
PHP:
int spread = MarketInfo(_Symbol, MODE_SPREAD)
выдает такое же "предупреждение". Это от большого ума, специально, для выявления "внимательных" программистов, ога
 
Последнее редактирование:

Dobryj

Почетный гражданин
Всем привет , Может у кого есть прошлый билд МТ дабы скомпилить индикатор , писал индикатор год назад остался в открытом коде сейчас компилирую выдает кучу ошибок , печаль ))
И возможно ли такое провернуть , скомпилить в старом и закинуть под новый билд или придется все таки исправлять все ошибки ?
Заранее спасибо !
 

AlexeyVik

Программист mql4 mql5
Это всё понятно, внимательный ты наш. Как получить целое число из double?
Кроме внимательности нужно ещё и умение думать...
int a = 1;
double b = 1.0;
равны-ли a и b целое-ли число b?
Я уж не говорю о том, что спред по ихнему почему-то тоже double, хотя на самом деле целое:
PHP:
int spread = MarketInfo(_Symbol, MODE_SPREAD)
выдает такое же "предупреждение". Это от большого ума, специально, для выявления "внимательных" программистов, ога

А что касается спреда, никто не знает что нас ждёт в ближайшем будущем... никто не может гарантировать что "завтра" не добавят ещё и шестой знак в котировки.
А объявить переменную типа int для функции возвращающей значение типа double можно только от недостатка ума.
 

AlexeyVik

Программист mql4 mql5
Всем привет , Может у кого есть прошлый билд МТ дабы скомпилить индикатор , писал индикатор год назад остался в открытом коде сейчас компилирую выдает кучу ошибок , печаль ))
И возможно ли такое провернуть , скомпилить в старом и закинуть под новый билд или придется все таки исправлять все ошибки ?
Заранее спасибо !
Держи 451, но я не знаю не обновится-ли он при запуске. Лучше, для подстраховки, найти папку WebInstall и её удалить. Или удалить всё её содержимое, в ней находятся файлы обновления МТ.
 

Вложения

  • Meta451.rar
    1,8 МБ · Просмотры: 24
Верх