Я не сторонник индикаторов, но решил проверить одну вещь. Нужно, чтоб по цене верхнего уровня индикатора RSI эксперт покупал, а по цене нижнего продавал, соответственно. Только если уже цена выше верхней границы индикатора RSI, то покупка должна быть выше данной границы и ниже значения значения данной границы + какое-то значение отступа от границы вверх (в коде я указал просто число 0.1), Для продаж, наоборот.
externdouble i_RSIToUpLimit = 55, // Верхняя граница RSI
i_RSIToDnLimit = 45; // Нижняя граница RSI
Код функции получающей сигнал и само значение RSI: (0.1 тут допуск отступа для диапазона покупок или продаж)
//+-------------------------------------------------------------------------------------+//| Получаем RSI с заданными параметрами |//+-------------------------------------------------------------------------------------+double GetRSI(int RSIIndex)
{
return (iRSI(NULL, i_RSITF, i_RSIPeriod, i_RSIApplied, RSIIndex));
}
//+-------------------------------------------------------------------------------------+//| Получаем общий торговый сигнал |//+-------------------------------------------------------------------------------------+int GetGeneralSignal()
{
if (FindOrders() > 0)
return (SIGNAL_NO);
// if (GetRSI(PRICE_CLOSE, 0) > GetRSI(PRICE_CLOSE, 1))if (GetRSI(0) > i_RSIToUpLimit)
if (GetRSI(0) < (i_RSIToUpLimit + 0.1))
return (SIGNAL_BUY); // Запускаем функцию открытия покупки
if (GetRSI(0) < i_RSIToDnLimit)
if (GetRSI(0) > (i_RSIToDnLimit - 0.1))
return (SIGNAL_SELL); // Запускаем функцию открытия продаж
return (SIGNAL_NO);
}
Эксперт открывает ордера бывает от самого уровня, а бывает значительно выше (для покупок), значительно ниже (для продаж). Почему? Ведь алгоритм то элементарен.
Привет всем. У меня вопрос. Поставил себе копировальщик /**/, хорошая и удобная вещь, когда работаешь с несколькими счетами. Но проблема - когда паралельно на компе запускаешь любую другую программу (видеоролик, игру, просто карты) из динамиков идет постоянный треск. Можно ли устранить эту проблему (треск)? За ранее благодарен.
Помогите пожалуйста, мозг кипит, бьюсь уже пару дней, но никак не вдуплю в чем проблема.
Пытаюсь написать простейший индикатор на основе RSI (за аналог взят индикатор RandomIndicatorSignals.mq4 из статьи Язык MQL4 для "чайников". Пользовательские индикаторы (часть 1) (https://www.mql5.com/ru/articles/1500).
Суть простая, если RSI рисует вершину или впадину, то он рисует стрелку на графике.
Вроде все правильно сделал, но по моему буфер значений RSI для каждой свечки не заполняется, из-за этого и не работает. Вот код.
//+------------------------------------------------------------------+//| RSI+Arrow.mq4 |//| _______ |//| |//+------------------------------------------------------------------+#property copyright "_______"#property link "_________"#property indicator_chart_window#property indicator_buffers 3#property indicator_color1 Crimson#property indicator_color2 RoyalBlue//---- input parametersexternint barsToProcess=500;
//---- buffersdouble ExtMapBuffer1[],
ExtMapBuffer2[],
RSIBuffer3[];
//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+int init()
{
//---- indicators
IndicatorBuffers(3);
SetIndexStyle(0,DRAW_ARROW);
SetIndexArrow(0,236);
SetIndexBuffer(0,ExtMapBuffer1);
SetIndexEmptyValue(0,0.0);
SetIndexStyle(1,DRAW_ARROW);
SetIndexArrow(1,238);
SetIndexBuffer(1,ExtMapBuffer2);
SetIndexEmptyValue(1,0.0);
SetIndexBuffer (2,RSIBuffer3);
// для информации о значениях буфера
SetIndexLabel (2,"RSIBuffer3");
//----return(0);
}
//+------------------------------------------------------------------+//| Custom indicator deinitialization function |//+------------------------------------------------------------------+int deinit()
{
//----//----return(0);
}
//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+int start()
{
//расчет индикатора на последних барах int limit,i;
int counted_bars=IndicatorCounted();
if(counted_bars>0) counted_bars--;
limit=Bars-counted_bars;
if(limit>barsToProcess)
limit=barsToProcess;
//заполняем буфер RSI значениями for(i=0; i<limit; i++)
if(i>=1)
{
RSIBuffer3[i]=iRSI(0,0,8,PRICE_CLOSE,0);
}
//проводим сравнения for(i=0; i<limit; i++)
if(i>=1)
{
if(RSIBuffer3[i+2]-RSIBuffer3[i+1]>0 && RSIBuffer3[i+1]-RSIBuffer3[i]>0) // условия выставления стрелки /* так тоже не работает
if(RSIBuffer3[i+2]>=RSIBuffer3[i+1] && RSIBuffer3[i+1]<=RSIBuffer3[i])
*/
ExtMapBuffer2[i]=Low[i]-5*Point;
else
ExtMapBuffer2[i]=0.0;
if(RSIBuffer3[i+2]-RSIBuffer3[i+1]<0 && RSIBuffer3[i+1]-RSIBuffer3[i]<0) // условия выставления стрелки/* так тоже не работает
if(RSIBuffer3[i+2]<=RSIBuffer3[i+1] && RSIBuffer3[i+1]>=RSIBuffer3[i])
*/
ExtMapBuffer1[i]=High[i]+5*Point;
else
ExtMapBuffer1[i]=0.0;
}
return(0);
}
//+------------------------------------------------------------------+
Помогите пожалуйста, мозг кипит, бьюсь уже пару дней, но никак не вдуплю в чем проблема.
Пытаюсь написать простейший индикатор на основе RSI (за аналог взят индикатор RandomIndicatorSignals.mq4 из статьи Язык MQL4 для "чайников". Пользовательские индикаторы (часть 1) (https://www.mql5.com/ru/articles/1500).
Суть простая, если RSI рисует вершину или впадину, то он рисует стрелку на графике.
Вроде все правильно сделал, но по моему буфер значений RSI для каждой свечки не заполняется, из-за этого и не работает. Вот код.
Вы в цикле обращаетесь к нерасчитанным значениям индикатора.
Вы в цикле обращаетесь к нерасчитанным значениям индикатора.
Поменяйте
на
И вот что я еще подумал, согласно вашей логике индюк должен рассчитать RSI от limit и до 0 бара, а разве есть разница с какой стороны рассчитывать RSI с конца или с начала? он же должен рассчитать RSI для каждого бара в заданном диапазоне и положить значение в буфер (то бишь в массив), а потом просто сравнить три подряд идущих значения в массиве между собой. Или не так?
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Я не сторонник индикаторов, но решил проверить одну вещь. Нужно, чтоб по цене верхнего уровня индикатора RSI эксперт покупал, а по цене нижнего продавал, соответственно. Только если уже цена выше верхней границы индикатора RSI, то покупка должна быть выше данной границы и ниже значения значения данной границы + какое-то значение отступа от границы вверх (в коде я указал просто число 0.1), Для продаж, наоборот.
Я сделал вот так:
Внешние параметры:
Код функции получающей сигнал и само значение RSI: (0.1 тут допуск отступа для диапазона покупок или продаж)
Эксперт открывает ордера бывает от самого уровня, а бывает значительно выше (для покупок), значительно ниже (для продаж). Почему? Ведь алгоритм то элементарен.
Помогите пожалуйста, мозг кипит, бьюсь уже пару дней, но никак не вдуплю в чем проблема.
Пытаюсь написать простейший индикатор на основе RSI (за аналог взят индикатор RandomIndicatorSignals.mq4 из статьи Язык MQL4 для "чайников". Пользовательские индикаторы (часть 1) (https://www.mql5.com/ru/articles/1500).
Суть простая, если RSI рисует вершину или впадину, то он рисует стрелку на графике.
Вроде все правильно сделал, но по моему буфер значений RSI для каждой свечки не заполняется, из-за этого и не работает. Вот код.
Помогите пожалуйста, мозг кипит, бьюсь уже пару дней, но никак не вдуплю в чем проблема.
Пытаюсь написать простейший индикатор на основе RSI (за аналог взят индикатор RandomIndicatorSignals.mq4 из статьи Язык MQL4 для "чайников". Пользовательские индикаторы (часть 1) (https://www.mql5.com/ru/articles/1500).
Суть простая, если RSI рисует вершину или впадину, то он рисует стрелку на графике.
Вроде все правильно сделал, но по моему буфер значений RSI для каждой свечки не заполняется, из-за этого и не работает. Вот код.
Вы в цикле обращаетесь к нерасчитанным значениям индикатора.
Поменяйте
на
Вы в цикле обращаетесь к нерасчитанным значениям индикатора.
Поменяйте
на
спасибо, натолкнули на мысль! Однако хотелось бы понять "фифзический СМЫСЛ" :) как говаривал наш физик
у самого проблема: 2 "слегка" разных , но по сути одного действа коды: Удалить ВСЕ отложенные ордера
1) не работает как надо - удаляет только один ордер
2) работает нормально - удаляет все
Объясните: смысл "в цикле обращаетесь к нерасчитанным значениям индикатора"
Вы в цикле обращаетесь к нерасчитанным значениям индикатора.
Поменяйте
на
а можно разжевать? почему так? чтобы я в дальнейшем не допускал ошибок
Вы в цикле обращаетесь к нерасчитанным значениям индикатора.
Поменяйте
на
и все равно не работает, RSIBuffer3 при наведении на бар показывает только значение RSI на последнем баре
и все равно не работает, RSIBuffer3 при наведении на бар показывает только значение RSI на последнем баре
У тебя 5-й параметр равен 0 - т.е. последний бар!
сделай так:
Выдержка из доки:
Вы в цикле обращаетесь к нерасчитанным значениям индикатора.
Поменяйте
на
И вот что я еще подумал, согласно вашей логике индюк должен рассчитать RSI от limit и до 0 бара, а разве есть разница с какой стороны рассчитывать RSI с конца или с начала? он же должен рассчитать RSI для каждого бара в заданном диапазоне и положить значение в буфер (то бишь в массив), а потом просто сравнить три подряд идущих значения в массиве между собой. Или не так?
У тебя 5-й параметр равен 0 - т.е. последний бар!
сделай так:
Выдержка из доки:
ща попробую, спасибо