Jump to content

Общие вопросы по языку MQL


Recommended Posts

sviter

Привет! Есть ли функция отсчета дней с разницей между двумя датами, только что бы она каждый день меняла число? 

Link to post
Share on other sites
  • 2 months later...
  • Replies 7.6k
  • Created
  • Last Reply

Top Posters In This Topic

  • AntFX

    577

  • sergey1294

    569

  • Ugar68

    517

  • Programmer

    419

Top Posters In This Topic

Popular Posts

Ну, в данном случае мне стоило бы сразу соблюдать простейшие приёмы защитного программирования, то есть проверять, не равна ли нулю переменная, оказавшаяся под знаком деления. Ведь она "чужая", то ест

На счёт проверок, это правильно. Я больше очень практикую, то же нарывался. Но в моём случае у меня советник открывал ордер минимальным лотом вместо нормального, когда замечал, доливаться было поздно.

Основной советник выставляет "сигнальный" отложенный ордер далеко от текущей цены и каждую например, минуту модифицирует у него время экспирации: это может быть текущее время плюс 1 час, или плюс 1 су

Posted Images

Hitronrav

Выяснил (дорогой ценой в буквальном смысле слова), что функция MarketInfo(Symbol(),MODE_TICKVALUE) иногда по неясной причине может выдавать ноль. В моём случае эта функция была в знаменателе дроби, так что советник погиб при попытке деления на ноль, что я заметил далеко не сразу. Имейте в виду, вдруг кто натолкнётся.

  • Upvote 2
Link to post
Share on other sites
RazorFish
4 минуты назад, Hitronrav сказал:

Выяснил (дорогой ценой в буквальном смысле слова)

 

Паранойя - это не всегда плохо, особенно, при разработке советников для метатрейдера... Мне глюк терминала стоил ухода в минус...


Don't throw your pearls before the pigs, lest perhaps they trample them under their feet, and turn and tear you to pieces.

Link to post
Share on other sites
Hitronrav
8 минут назад, RazorFish сказал:

Паранойя - это не всегда плохо, особенно, при разработке советников для метатрейдера... Мне глюк терминала стоил ухода в минус...

 

Ну, в данном случае мне стоило бы сразу соблюдать простейшие приёмы защитного программирования, то есть проверять, не равна ли нулю переменная, оказавшаяся под знаком деления. Ведь она "чужая", то есть получена от сервера, и кто знает, что он там отдал или не отдал...

  • Upvote 4
Link to post
Share on other sites
Ugar68
6 часов назад, Hitronrav сказал:

 

Ну, в данном случае мне стоило бы сразу соблюдать простейшие приёмы защитного программирования, то есть проверять, не равна ли нулю переменная, оказавшаяся под знаком деления. Ведь она "чужая", то есть получена от сервера, и кто знает, что он там отдал или не отдал...

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

Только эти данные чужие только косвенно. Их вычисляет терминал. Но эти данные в валюте депозита, а значит для вычисления нужны курсы валют между валютой котировки и депозита. А вот там иногда прилетают нули. Линия связи длинная, там может быть что угодно. Не зря принято кэшировать данные из инета, это намёк на один из способов решения.

Всё надо проверять что имеет отношение к данным, полученным из вне. От этого код может распухнуть в несколько раз, но для себя или за нормальную оплату, можно повозиться и написать свои функции с контролем на корректность.

  • Upvote 3

Пишу советники и индикаторы по вашим алгоритмам. Пишите в личку.
Чужие программы не переделываю.

Link to post
Share on other sites
  • 2 months later...
ZeleBoba

Всем здравствуйте.

Вопрос: существует ли способ получить время для High и Low  в баре?

Необходимо узнать какая цена была раньше, какая позже.

По идее все бары формируются на основе тиковой истории, а там время зафиксировано.

Edited by ZeleBoba

Лучше маленький профит, чем большие рога.

Link to post
Share on other sites
  • 1 month later...
ZeleBoba

Здравствуйте господа прогеры и трейдеры.

Что-то я совсем туплю :)), видимо ковид сказывается на способностях.

для работы советника при прогоне в тестере необходимо

получать "текущую" цену при проходе по заданному периоду "от" - "до".

НО!  Bid и Ask приходят реальные (нынешние), а не исторические

и другим способом

double price=SymbolInfoDouble(Symbol(),SYMBOL_BID);

имею то же самое.

Тестер же должен генерить тики. Ничего не понимаю!

Кто что подскажет?

Заранее благодарен.

 


Лучше маленький профит, чем большие рога.

Link to post
Share on other sites
ZeleBoba

просто сделал "тупой" советник, который в комменте выводит цену

 

int start()
  { 
    double price=SymbolInfoDouble(Symbol(),SYMBOL_BID);

   Comment("\n PRICE   = ", DoubleToStr(price,5),

                     "\n BID       = ", DoubleToStr(Bid,5));

}

 

при прогоне в тестере комментит только актуальную цену на сегодня :((


Лучше маленький профит, чем большие рога.

Link to post
Share on other sites
ZeleBoba

вопрос снят, все заработало


Лучше маленький профит, чем большие рога.

Link to post
Share on other sites
  • 8 months later...
NeGaTiV

Добрый день.

 

Подскажите пожалуйста в чем ошибка?

if(kolpos==0)
{
  if()
  if()
 {
 double Stop=NormalizeDouble(Ask-SL*Point,Digits);
 double TP=NormalizeDouble(Ask+TakeProfit*Point,Digits);
 OrderSend(Symbol(), OP_BUY,Lot, Ask, 10,Stop,TP,NULL,Magic,0,Green);   
 return(kolpos);
} 
  
/--------------------
}

 

при компиляции:

return value of 'OrderSend' should be checked    
 

Edited by NeGaTiV
Ошибка в коде
Link to post
Share on other sites
Ugar68
09.07.2022 в 12:39, NeGaTiV сказал:

Добрый день.

 

Подскажите пожалуйста в чем ошибка?


if(kolpos==0)
{
  if()
  if()
 {
 double Stop=NormalizeDouble(Ask-SL*Point,Digits);
 double TP=NormalizeDouble(Ask+TakeProfit*Point,Digits);
 OrderSend(Symbol(), OP_BUY,Lot, Ask, 10,Stop,TP,NULL,Magic,0,Green);   
 return(kolpos);
} 
  
/--------------------
}

 

при компиляции:

return value of 'OrderSend' should be checked    
 

int ticket=OrderSend(Symbol(), OP_BUY,Lot, Ask, 10,Stop,TP,NULL,Magic,0,Green);

Пишу советники и индикаторы по вашим алгоритмам. Пишите в личку.
Чужие программы не переделываю.

Link to post
Share on other sites
NeGaTiV
10.07.2022 в 21:25, Ugar68 сказал:

int ticket=OrderSend(Symbol(), OP_BUY,Lot, Ask, 10,Stop,TP,NULL,Magic,0,Green);

Так как тогда откроется ордер?

Link to post
Share on other sites
Ugar68

Надо что бы функция OrderSend возвращала значение в int переменную. Тогда компилятор не будет ругаться. Конечно, если писать не понарошку, желательно ещё и потом проанализировать это значение. И принять соответствующие меры, если оно -1. 

В остальном всё то же самое.


Пишу советники и индикаторы по вашим алгоритмам. Пишите в личку.
Чужие программы не переделываю.

Link to post
Share on other sites
NeGaTiV
22 часа назад, Ugar68 сказал:

Надо что бы функция OrderSend возвращала значение в int переменную. Тогда компилятор не будет ругаться. Конечно, если писать не понарошку, желательно ещё и потом проанализировать это значение. И принять соответствующие меры, если оно -1. 

В остальном всё то же самое.

Это как?

Link to post
Share on other sites
Ugar68
12 минут назад, NeGaTiV сказал:

Это как?

Как можно что то писать не заглядывая в справочник?

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


Пишу советники и индикаторы по вашим алгоритмам. Пишите в личку.
Чужие программы не переделываю.

Link to post
Share on other sites
NeGaTiV

У нас с Вами наверное разные справочники. В моем описан пример:

//--------------------------------------------------------------------// simpleopen.mq4 
// Предназначен для использования в качестве примера в учебнике MQL4.
//--------------------------------------------------------------------
int start()                                 // Спец. функция start()  
{                                          // Открытие BUY  
OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Bid-15*Point,Bid+15*Point);  
return;                                   // Выход из start() 
}
//--------------------------------------------------------------------

Но тут я искал совета как исправить предупреждение при компиляции. 

 

Link to post
Share on other sites
Ugar68
14.07.2022 в 08:03, NeGaTiV сказал:

У нас с Вами наверное разные справочники. В моем описан пример:


//--------------------------------------------------------------------// simpleopen.mq4 
// Предназначен для использования в качестве примера в учебнике MQL4.
//--------------------------------------------------------------------
int start()                                 // Спец. функция start()  
{                                          // Открытие BUY  
OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Bid-15*Point,Bid+15*Point);  
return;                                   // Выход из start() 
}
//--------------------------------------------------------------------

Но тут я искал совета как исправить предупреждение при компиляции. 

 

Я писал о актуальном справочнике, а не о древнем учебнике. В древнем учебнике описан древний язык. Тогда так можно было делать, хоть и не желательно. Сейчас язык значительно совершеннее и требования отличаются. Всё есть в справочнике.

В редакторе надо выделит мышью OrderSend и нажать F1. Должен открыться справочник с описанием этой функции.


Пишу советники и индикаторы по вашим алгоритмам. Пишите в личку.
Чужие программы не переделываю.

Link to post
Share on other sites
NeGaTiV
20 часов назад, Ugar68 сказал:

Я писал о актуальном справочнике, а не о древнем учебнике. В древнем учебнике описан древний язык. Тогда так можно было делать, хоть и не желательно. Сейчас язык значительно совершеннее и требования отличаются. Всё есть в справочнике.

В редакторе надо выделит мышью OrderSend и нажать F1. Должен открыться справочник с описанием этой функции.

Спасибо ))

Link to post
Share on other sites
  • 5 months later...
AlGriS

Здравствуйте! Вопрос к специалистам.

Озадачился как сделать советник двуязычным: определил #define COUNTRY_LANG "Russian" и на этом построил функцию которая в зависимости от языка терминала возвращает строку либо на русском, либо на английском. Всё хорошо в теле советника - определения, комментарий, подсказки.

Но как сделать двуязычными названия параметров советника (extern param=true; //название параметра) - функцию отсюда не вызовешь. Подумал сделать два списка параметров - но как переключаться между списками в зависимости от языка терминала.

Что-то в голове шевельнулось когда перечитывал справку по #ifdef-#endif.

Может кто решил такую задачу, а то сейчас приходится компилировать два варианта советника с разными языками?

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    No registered users viewing this page.


×
×
  • Create New...