Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1521 1...151415151516151715181519152015211522152315241525152615271528...2747 Новый комментарий jarikn 2021.07.01 12:05 #15201 MakarFX: Не то сравниваешь вместо "per"должны быть показания rsi то есть так? int Signal(int i) { // Снимем показания индикатора double Current = iRSI(NULL, 0, per, PRICE_CLOSE, i); double Previous = iRSI(NULL, 0, per, PRICE_CLOSE, i+1); double SCurrent = iRSI(NULL, 0, per, PRICE_CLOSE, i); // Для предыдущего бара double SPrevious = iRSI(NULL, 0, per, PRICE_CLOSE, i+1); // А теперь проверим всловия для наличия сигналов // есть сигнал на покупку? if(Current <= niz && Close[1]>Open[1]) return(BUY); if(Current >= verx && Close[1]<Open[1]) return(SELL); // Сигнала нет return(-1); Tretyakov Rostyslav 2021.07.01 12:19 #15202 jarikn: то есть так? Да, но нельзя просто переписывать один индикатор в другой. Построй логику работы индикатора, а потом пиши. В данном случае не вся логика понятна или есть лишний данные которые не используются. jarikn 2021.07.01 12:35 #15203 MakarFX: Да, но нельзя просто переписывать один индикатор в другой. Построй логику работы индикатора, а потом пиши. В данном случае не вся логика понятна или есть лишний данные которые не используются. посмотрите на скрине что у меня получилось. идея у меня такова. если rsi выше уровня 70 и свеча закрылась ниже открытия - должен быть сигнал на селл если rsi ниже уровня 30 и свеча закрылась выше открытия то сигнал на бай. не судите строго я только пытаюсь немного научится)))) теперь скажите что я делал не так? Файлы: Screenshot_13.png 29 kb От теории к практике Напишу индикатор бесплатно Закрытие - открытие позиций Tretyakov Rostyslav 2021.07.01 13:18 #15204 jarikn: посмотрите на скрине что у меня получилось. идея у меня такова. если rsi выше уровня 70 и свеча закрылась ниже открытия - должен быть сигнал на селл если rsi ниже уровня 30 и свеча закрылась выше открытия то сигнал на бай. не судите строго я только пытаюсь немного научится)))) теперь скажите что я делал не так? 1) скрины вставляй в сообщения при помощи кнопки 2)согласно твоего условия - правильно так //+------------------------------------------------------------------+ //| jarikn_RSI.mq4 | //| Copyright 2020, DrMak. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2020, DrMak." #property link "https://www.mql5.com" #property version "1.00" #property strict #property indicator_chart_window #property indicator_buffers 2 #property indicator_plots 2 //--- plot Покупаем #property indicator_label1 "Продаём" #property indicator_type1 DRAW_LINE #property indicator_color1 clrGreen #property indicator_style1 STYLE_SOLID #property indicator_width1 1 //--- plot Продаём #property indicator_label2 "Покупаем" #property indicator_type2 DRAW_LINE #property indicator_color2 clrRed #property indicator_style2 STYLE_SOLID #property indicator_width2 1 //--- input parameters input int RSI_Period =14; //Период рассчета RSI input int AlertLevUp =70; //Уровень для покупок input int AlertLevDn =30; //Уровень для продаж //--- indicator buffers double Buy[]; // Буфер для покупок double Sell[]; // Буфер для продаж //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- indicator buffers mapping SetIndexBuffer(0,Buy); SetIndexBuffer(1,Sell); // Устанавливаем нулевые значения для индикатора, при которых не будет сигнальных стрелок SetIndexEmptyValue (0, 0); SetIndexEmptyValue (1, 0); //Определяем стиль отображения индикаторных линий - стрелка SetIndexStyle (0, DRAW_ARROW); SetIndexStyle (1, DRAW_ARROW); // Установим значки "стрелки" для буферов SetIndexArrow(0, 234); //Стрелка "вниз" для продаж SetIndexArrow(1, 233); //Стрелка "вверх" для покупок //Устанавливаем текст описания стрелок индикатора для отображения информации в всплывающей подсказке. SetIndexLabel(0, "Продаём"); SetIndexLabel(1, "Покупаем"); //Определяем разрядность значений индикаторных линий - приравниваем разрядности фин. инструмента IndicatorDigits (Digits); //Строка с кратким названием индикатора выводится в сплывающей подсказке при наведении указателя мыши на стрелку IndicatorShortName ("Мой первый индикатор"); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { //--- int limit=rates_total-prev_calculated-1; if(limit<1) return(0); for(int i=limit;i>=0;i--) { // Снимем показания индикатора double RSI = iRSI(NULL,0,RSI_Period,PRICE_CLOSE,i); if(RSI>AlertLevUp&&open[i]>close[i]) Buy[i]=high[i]; if(RSI<AlertLevDn&&open[i]<close[i]) Sell[i]=low[i]; } //--- return value of prev_calculated for next call return(rates_total); } //+------------------------------------------------------------------+ jarikn 2021.07.01 13:34 #15205 MakarFX: 1) скрины вставляй в сообщения при помощи кнопки 2)согласно твоего условия - правильно так спасибо. буду разбираться jarikn 2021.07.01 16:22 #15206 MakarFX: 1) скрины вставляй в сообщения при помощи кнопки 2)согласно твоего условия - правильно так а как написать такое условие * если rsi пересекает снизу вверх AlertLevDn то бай? это возможно или нужна дополнительно скользящая? { //--- int limit=rates_total-prev_calculated-1; if(limit<1) return(0); for(int i=limit;i>=0;i--) { // Снимем показания индикатора double RSI = iRSI(NULL,0,RSI_Period,PRICE_CLOSE,i); if(RSI>AlertLevUp) Buy[i]=high[i]; if(RSI<AlertLevDn) Sell[i]=low[i]; } //--- return value of prev_calculated for next call return(rates_total); } //+------------------------------------------------------------------+ Tretyakov Rostyslav 2021.07.01 16:36 #15207 jarikn: а как написать такое условие * если rsi пересекает снизу вверх AlertLevDn то бай? это возможно или нужна дополнительно скользящая? Твой вопрос и дает тебе ответ... если rsi пересекает снизу вверх - значит текущее значение выше, а предыдущее ниже текущее значение double RSI = iRSI(NULL,0,RSI_Period,PRICE_CLOSE,i); предыдущее надо сделать double RSI2 = iRSI(NULL,0,RSI_Period,PRICE_CLOSE,i+1); после этого сравнить если RSI2 меньше AlertLevDn и RSI больше AlertLevDn у тебя бай) jarikn 2021.07.01 16:40 #15208 MakarFX: Твой вопрос и дает тебе ответ... если rsi пересекает снизу вверх - значит текущее значение выше, а предыдущее ниже текущее значение предыдущее надо сделать после этого сравнить если RSI2 меньше AlertLevDn и RSI больше AlertLevDn у тебя бай) понял. спасибо) Tretyakov Rostyslav 2021.07.01 16:50 #15209 jarikn: понял. спасибо) исправь int limit=rates_total-prev_calculated-2; Andrei Sokolov 2021.07.01 21:21 #15210 Приветствую, подскажите, пожалста. МТ5 Нужно получить значения Bollinger Bands. пишу #property strict #include <Indicators\Trend.mqh> CiBands m_bands; input int Magic = 778871; int OnInit(){//////////////***OnInit()****///*************OnInit()*******/////////***/////////////////////////OnInit() Print(m_bands.Create(Symbol(), PERIOD_CURRENT, 20, 0, 2, PRICE_CLOSE)); Print((string)m_bands.MaPeriod()); Print((string)m_bands.Base(Bars(NULL, PERIOD_CURRENT))); return(INIT_SUCCEEDED); } выводит что-то схожее с double_max. При этом период, смещение, и остальное получает корректно 1...151415151516151715181519152015211522152315241525152615271528...2747 Новый комментарий
Не то сравниваешь вместо "per"должны быть показания rsi
то есть так?
то есть так?
Да, но нельзя просто переписывать один индикатор в другой.
Построй логику работы индикатора, а потом пиши.
В данном случае не вся логика понятна или есть лишний данные которые не используются.Да, но нельзя просто переписывать один индикатор в другой.
Построй логику работы индикатора, а потом пиши.
В данном случае не вся логика понятна или есть лишний данные которые не используются.посмотрите на скрине что у меня получилось.
идея у меня такова.
если rsi выше уровня 70 и свеча закрылась ниже открытия - должен быть сигнал на селл
если rsi ниже уровня 30 и свеча закрылась выше открытия то сигнал на бай.
не судите строго я только пытаюсь немного научится))))
теперь скажите что я делал не так?
посмотрите на скрине что у меня получилось.
идея у меня такова.
если rsi выше уровня 70 и свеча закрылась ниже открытия - должен быть сигнал на селл
если rsi ниже уровня 30 и свеча закрылась выше открытия то сигнал на бай.
не судите строго я только пытаюсь немного научится))))
теперь скажите что я делал не так?
1) скрины вставляй в сообщения при помощи кнопки
2)согласно твоего условия - правильно так
1) скрины вставляй в сообщения при помощи кнопки
2)согласно твоего условия - правильно так
спасибо. буду разбираться
1) скрины вставляй в сообщения при помощи кнопки
2)согласно твоего условия - правильно так
а как написать такое условие * если rsi пересекает снизу вверх AlertLevDn то бай? это возможно или нужна дополнительно скользящая?
{ //--- int limit=rates_total-prev_calculated-1; if(limit<1) return(0); for(int i=limit;i>=0;i--) { // Снимем показания индикатора double RSI = iRSI(NULL,0,RSI_Period,PRICE_CLOSE,i); if(RSI>AlertLevUp) Buy[i]=high[i]; if(RSI<AlertLevDn) Sell[i]=low[i]; } //--- return value of prev_calculated for next call return(rates_total); } //+------------------------------------------------------------------+а как написать такое условие * если rsi пересекает снизу вверх AlertLevDn то бай? это возможно или нужна дополнительно скользящая?
Твой вопрос и дает тебе ответ...
если rsi пересекает снизу вверх - значит текущее значение выше, а предыдущее ниже
текущее значение
предыдущее надо сделать
после этого сравнить
если RSI2 меньше AlertLevDn и RSI больше AlertLevDn
у тебя бай)
Твой вопрос и дает тебе ответ...
если rsi пересекает снизу вверх - значит текущее значение выше, а предыдущее ниже
текущее значение
предыдущее надо сделать
после этого сравнить
если RSI2 меньше AlertLevDn и RSI больше AlertLevDn
у тебя бай)
понял. спасибо)
понял. спасибо)
исправь
Приветствую, подскажите, пожалста. МТ5
Нужно получить значения Bollinger Bands.
пишу
#property strict #include <Indicators\Trend.mqh> CiBands m_bands; input int Magic = 778871; int OnInit(){//////////////***OnInit()****///*************OnInit()*******/////////***/////////////////////////OnInit() Print(m_bands.Create(Symbol(), PERIOD_CURRENT, 20, 0, 2, PRICE_CLOSE)); Print((string)m_bands.MaPeriod()); Print((string)m_bands.Base(Bars(NULL, PERIOD_CURRENT))); return(INIT_SUCCEEDED); }выводит что-то схожее с double_max.
При этом период, смещение, и остальное получает корректно