sviter 0 Share Posted April 30, 2021 Привет! Есть ли функция отсчета дней с разницей между двумя датами, только что бы она каждый день меняла число? Quote Link to post Share on other sites
Hitronrav 4,787 Share Posted July 19, 2021 Выяснил (дорогой ценой в буквальном смысле слова), что функция MarketInfo(Symbol(),MODE_TICKVALUE) иногда по неясной причине может выдавать ноль. В моём случае эта функция была в знаменателе дроби, так что советник погиб при попытке деления на ноль, что я заметил далеко не сразу. Имейте в виду, вдруг кто натолкнётся. 2 Quote Link to post Share on other sites
RazorFish 1,751 Share Posted July 19, 2021 4 минуты назад, Hitronrav сказал: Выяснил (дорогой ценой в буквальном смысле слова) Паранойя - это не всегда плохо, особенно, при разработке советников для метатрейдера... Мне глюк терминала стоил ухода в минус... Quote 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 4,787 Share Posted July 19, 2021 8 минут назад, RazorFish сказал: Паранойя - это не всегда плохо, особенно, при разработке советников для метатрейдера... Мне глюк терминала стоил ухода в минус... Ну, в данном случае мне стоило бы сразу соблюдать простейшие приёмы защитного программирования, то есть проверять, не равна ли нулю переменная, оказавшаяся под знаком деления. Ведь она "чужая", то есть получена от сервера, и кто знает, что он там отдал или не отдал... 4 Quote Link to post Share on other sites
Ugar68 372 Share Posted July 19, 2021 6 часов назад, Hitronrav сказал: Ну, в данном случае мне стоило бы сразу соблюдать простейшие приёмы защитного программирования, то есть проверять, не равна ли нулю переменная, оказавшаяся под знаком деления. Ведь она "чужая", то есть получена от сервера, и кто знает, что он там отдал или не отдал... На счёт проверок, это правильно. Я больше очень практикую, то же нарывался. Но в моём случае у меня советник открывал ордер минимальным лотом вместо нормального, когда замечал, доливаться было поздно. В итоге недополучал прибыль. Только эти данные чужие только косвенно. Их вычисляет терминал. Но эти данные в валюте депозита, а значит для вычисления нужны курсы валют между валютой котировки и депозита. А вот там иногда прилетают нули. Линия связи длинная, там может быть что угодно. Не зря принято кэшировать данные из инета, это намёк на один из способов решения. Всё надо проверять что имеет отношение к данным, полученным из вне. От этого код может распухнуть в несколько раз, но для себя или за нормальную оплату, можно повозиться и написать свои функции с контролем на корректность. 3 Quote Пишу советники и индикаторы по вашим алгоритмам. Пишите в личку. Чужие программы не переделываю. Link to post Share on other sites
ZeleBoba 662 Share Posted September 24, 2021 (edited) Всем здравствуйте. Вопрос: существует ли способ получить время для High и Low в баре? Необходимо узнать какая цена была раньше, какая позже. По идее все бары формируются на основе тиковой истории, а там время зафиксировано. Edited September 24, 2021 by ZeleBoba Quote Лучше маленький профит, чем большие рога. Link to post Share on other sites
ZeleBoba 662 Share Posted October 29, 2021 Здравствуйте господа прогеры и трейдеры. Что-то я совсем туплю :)), видимо ковид сказывается на способностях. для работы советника при прогоне в тестере необходимо получать "текущую" цену при проходе по заданному периоду "от" - "до". НО! Bid и Ask приходят реальные (нынешние), а не исторические и другим способом double price=SymbolInfoDouble(Symbol(),SYMBOL_BID); имею то же самое. Тестер же должен генерить тики. Ничего не понимаю! Кто что подскажет? Заранее благодарен. Quote Лучше маленький профит, чем большие рога. Link to post Share on other sites
ZeleBoba 662 Share Posted October 29, 2021 просто сделал "тупой" советник, который в комменте выводит цену int start() { double price=SymbolInfoDouble(Symbol(),SYMBOL_BID); Comment("\n PRICE = ", DoubleToStr(price,5), "\n BID = ", DoubleToStr(Bid,5)); } при прогоне в тестере комментит только актуальную цену на сегодня :(( Quote Лучше маленький профит, чем большие рога. Link to post Share on other sites
ZeleBoba 662 Share Posted October 29, 2021 вопрос снят, все заработало Quote Лучше маленький профит, чем большие рога. Link to post Share on other sites
NeGaTiV 0 Share Posted July 9, 2022 (edited) Добрый день. Подскажите пожалуйста в чем ошибка? 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 July 9, 2022 by NeGaTiV Ошибка в коде Quote Link to post Share on other sites
Ugar68 372 Share Posted July 10, 2022 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); Quote Пишу советники и индикаторы по вашим алгоритмам. Пишите в личку. Чужие программы не переделываю. Link to post Share on other sites
NeGaTiV 0 Share Posted July 12, 2022 10.07.2022 в 21:25, Ugar68 сказал: int ticket=OrderSend(Symbol(), OP_BUY,Lot, Ask, 10,Stop,TP,NULL,Magic,0,Green); Так как тогда откроется ордер? Quote Link to post Share on other sites
Ugar68 372 Share Posted July 12, 2022 Надо что бы функция OrderSend возвращала значение в int переменную. Тогда компилятор не будет ругаться. Конечно, если писать не понарошку, желательно ещё и потом проанализировать это значение. И принять соответствующие меры, если оно -1. В остальном всё то же самое. Quote Пишу советники и индикаторы по вашим алгоритмам. Пишите в личку. Чужие программы не переделываю. Link to post Share on other sites
NeGaTiV 0 Share Posted July 13, 2022 22 часа назад, Ugar68 сказал: Надо что бы функция OrderSend возвращала значение в int переменную. Тогда компилятор не будет ругаться. Конечно, если писать не понарошку, желательно ещё и потом проанализировать это значение. И принять соответствующие меры, если оно -1. В остальном всё то же самое. Это как? Quote Link to post Share on other sites
Ugar68 372 Share Posted July 13, 2022 12 минут назад, NeGaTiV сказал: Это как? Как можно что то писать не заглядывая в справочник? Там описано и даже с примером. Правда в примере только печатается ошибка, других действий не описано. Но это же нужно в каждом конкретном случае продумывать, а что если... Quote Пишу советники и индикаторы по вашим алгоритмам. Пишите в личку. Чужие программы не переделываю. Link to post Share on other sites
NeGaTiV 0 Share Posted July 14, 2022 У нас с Вами наверное разные справочники. В моем описан пример: //--------------------------------------------------------------------// simpleopen.mq4 // Предназначен для использования в качестве примера в учебнике MQL4. //-------------------------------------------------------------------- int start() // Спец. функция start() { // Открытие BUY OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Bid-15*Point,Bid+15*Point); return; // Выход из start() } //-------------------------------------------------------------------- Но тут я искал совета как исправить предупреждение при компиляции. Quote Link to post Share on other sites
Ugar68 372 Share Posted July 18, 2022 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. Должен открыться справочник с описанием этой функции. Quote Пишу советники и индикаторы по вашим алгоритмам. Пишите в личку. Чужие программы не переделываю. Link to post Share on other sites
NeGaTiV 0 Share Posted July 19, 2022 20 часов назад, Ugar68 сказал: Я писал о актуальном справочнике, а не о древнем учебнике. В древнем учебнике описан древний язык. Тогда так можно было делать, хоть и не желательно. Сейчас язык значительно совершеннее и требования отличаются. Всё есть в справочнике. В редакторе надо выделит мышью OrderSend и нажать F1. Должен открыться справочник с описанием этой функции. Спасибо )) Quote Link to post Share on other sites
AlGriS 0 Share Posted January 7, 2023 Здравствуйте! Вопрос к специалистам. Озадачился как сделать советник двуязычным: определил #define COUNTRY_LANG "Russian" и на этом построил функцию которая в зависимости от языка терминала возвращает строку либо на русском, либо на английском. Всё хорошо в теле советника - определения, комментарий, подсказки. Но как сделать двуязычными названия параметров советника (extern param=true; //название параметра) - функцию отсюда не вызовешь. Подумал сделать два списка параметров - но как переключаться между списками в зависимости от языка терминала. Что-то в голове шевельнулось когда перечитывал справку по #ifdef-#endif. Может кто решил такую задачу, а то сейчас приходится компилировать два варианта советника с разными языками? Quote Link to post Share on other sites
Recommended Posts
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.