Обсуждение статьи "Стать хорошим программистом (Часть 2): избавляемся еще от пяти привычек на пути к лучшему программированию на MQL5"
Привет, ребята,
Я ноб. У меня много опыта программирования, но я только начинаю писать на MQL5 - это мой первый язык, похожий на C++. Я читал справочную документацию, но не могу найти свою ошибку - значение, которое я ожидаю получить от expoMA, выводится/комментируется на моем графике как 0.0 - может, я делаю какую-то синтаксическую ошибку? Я не получаю никаких проблем/ошибок при компиляции. Любой ваш вклад был бы замечательным
void OnTick( { int days = 3; double Ask = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits); double Bid = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits); double movingAverageValues[]; double bidAskAverage = (Ask + Bid)/2; int exponentialMovingAverage = iMA(_Symbol,_Period,MA_Period,0,MODE_EMA,PRICE_CLOSE); ArraySetAsSeries(movingAverageValues,true); CopyBuffer(exponentialMovingAverage,0,0,3,movingAverageValues); double alpha = expoMA(days); double dEMA = bidAskAverage - movingAverageValues[1]; // индекс 1 здесь представляет EMA значения t - 1 Comment("The ask price is: " + DoubleToString(Ask,5) + "\n" "The bid price is: " + DoubleToString(Bid,5) + "\n" "The average price is: " + DoubleToString(bidAskAverage,5) + "\n" "The custom expoMA value is: " + DoubleToString(alpha,5) + "\n" "The dEMA value is: " + DoubleToString(dEMA,5)) ; } double expoMA(int days=2) { double alpha = 2 / (days + 1); NormalizeDouble(alpha,5); return(alpha); }
Привет, ребята,
Я ноб. У меня много опыта программирования, но я только начинаю писать на MQL5 - это мой первый язык, похожий на C++. Я читал справочную документацию, но не могу найти свою ошибку - значение, которое я ожидаю получить от expoMA, выводится/комментируется на графике как 0.0 - может, я делаю какую-то синтаксическую ошибку? Я не получаю никаких проблем/ошибок при компиляции. Любой ваш вклад был бы замечательным
double expoMA(int days=2) { double alpha = 2.0 / (days + 1); //... }
Вы делите 2/4 на целые числа (0), а затем это деление преобразуется в double. Вместо этого нужно, чтобы одно из делимого или делителя было двойным (чтобы деление выполнялось в "наиболее подробном" типе данных)
Другими вариантами могут быть (будучи днями int):
double alpha = double(2) / (days + 1); double alpha = 2 / (days + 1.0); double alpha = 2 / double(days + 1);Вероятно, это ошибка питоновцев, хе-хе.
Мануэль Алехандро Серкос Перес:
Вы делите 2/4 на целые числа (0), а затем это деление разбирается на double. Вместо этого нужно, чтобы одно из делимого или делителя было двойным (чтобы деление выполнялось в "наиболее подробном" типе данных)
Другими вариантами могут быть (быть днями int):
Возможно, это ошибка питоновцев, хе-хе.Привет, Мануэль,
Большое спасибо! Приведенный выше совет сработал как шарм. Вы избавили меня от необходимости тратить еще много часов на поиск первопричины.
Ваш последний вопрос: возьмите время открытия и прибавьте к нему
Переводчикам респект.
После первой статьи сомневался, а теперь уверен - автор хочет объяснить программистам-дебилам, что они дебилы. Автор, не обижайтесь, но статья написана для Вас. Кроме того, то высокомерие с которым Вы обращаетесь к читателям обнуляет вашу работу.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Опубликована статья Стать хорошим программистом (Часть 2): избавляемся еще от пяти привычек на пути к лучшему программированию на MQL5:
Статья обязательна к прочтению для всех, кто хочет улучшить свою карьеру программиста. Цель этой серии статей — помочь любому читателю, даже опытному, улучшить навыки программирования. Описанные в статье идею работают как для начинающих MQL5-программистов, так и для профессионалов.
Я часто использую термин "нуб" (от английского noob) в этой серии статей. Им я для простоты называю всех, у кого не очень большой опыт программирования на MQL5 (пожалуйста, не обижайтесь). Просто так удобнее. Это не означает, что статьи предназначены именно для нубов или новичков. Конечно нет! Этот материал предназначен абсолютно для всех, независимо от опыта в программировании, потому что человека делают нубом определенные программерские привычки и поведение, а не количество лет в разработке.
Предыдущая статья опубликована здесь, если вы еще не читали ее. Здесь же я продолжаю свою миссию - помочь начинающим программистам стать профессиональнее.
Автор: Omega J Msigwa