Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Да... я не знаю, насколько я рассеян. Благодаря вашему своевременному совету, числа TB_TotalCount и VACount стали правильными и абсолютно разумными. Но мои задачи по поиску VA High/Low все еще в беде, мой компьютер снова сломался с этой частью кодирования. Пытаюсь снова понять причину.
Большое спасибо Младен! Ваш совет дал мне частичную улыбку после целой белой ночи.
Привет, Младен,
Хочу сообщить, что наконец-то я решил оставшуюся часть своей проблемы. Пытаюсь улучшить ее еще больше.
Хотя Вы дали мне так мало помощи, как только могли в этом случае, но я обнаружил, что это иногда лучший метод обучения тех, кто учится, стоя на ногах.
От всего сердца благодарю тебя, Младен!
Счастливых дней тебе,
fareastol
Привет, Младен,
У меня получается использовать относительный и абсолютный импульс
Большое спасибо за помощь, теперь мне нужно сгладить импульс для rsx.
Zilliq
Ps: Если это может кому-то помочь:
//Относительный импульс на закрытии
ind1= close-close[1]
//Абсолютный импульс
ind2=abs(ind1)
ind3=wilderAverage[rs](ind1)
ind4=wilderAverage[rs](ind2)
ind3=(50*(ind3+ind4))/ind4
return ind3 as "RSI",0, 30, 70, 100Zilliq
Посмотрите на этот пост: https: //www.mql5.com/en/forum/178733/page36
Там есть пример того, как это (сглаживание) может быть сделано
Спасибо, Младен, я посмотрю.
Хорошего дня и тысячи благодарностей за вашу помощь и работу.
Zilliq
Ну, если я правильно понял в вашем индикаторе rsi smoother 2, вы просто изменяете более дикое среднее значение функцией ismooth
И вы "сглаживаете" относительный и абсолютный импульс.
Я делаю то же самое с Hull average, но результат не такой, как вы видите на моей картинке.
Есть ли у вас идея, почему, или я ошибаюсь?
Спасибо Младен
И код RSI14 и RSIsmoother 45.
//Относительный моментум на закрытии
ind1= close-close[1]
//Абсолютный импульс
ind2=abs(ind1)
// Сглаживание относительного импульса с помощью средней по Халлу
v =(2*weightedAverage[round(rs/2)](ind1))-weightedAverage[rs](ind1)
ind3 = weightedAverage[Round(Sqrt(rs))](v)
// Сглаживание абсолютного импульса с помощью среднего по корпусу
v2 = (2*weightedAverage[round(rs/2)](ind2))-weightedAverage[rs](ind2)
ind4 = weightedAverage[Round(Sqrt(rs))](v2)
ind5=(50*(ind3+ind4))/ind4
return ind5 as "RSI smooth"
Я заменяю дикое среднее на T3 Tillson на обоих (относительный и абсолютный импульс), с той же проблемой
Это просто результат использования различных методов сглаживания. Разное сглаживание дает разные результаты
Если вы хотите получить результаты, сравнимые с rsi, опубликованными в потоке rsi, вы должны использовать тот тип сглаживания, который используется в этом индикаторе.
Спасибо Младен за ваш ответ
Странно, что сглаживание относительного и абсолютного импульса дает такой результат с некоторыми преувеличениями с помощью средней по Халлу и T3.
Можете ли вы объяснить с математической формулой (если возможно), как работает сглаживание функции ismooth в MT4, чтобы получить гладкий RSI, сравнимый с RSI, пожалуйста, и я буду кодировать его после того, как
Большое спасибо и хорошего дня
Zilliq
Ваш код MT4 и моя интерпретация:
// относительный импульс
double mom = iMA(NULL,0,1,0,MODE_SMA,Price,i)-iMA(NULL,0,1,0,MODE_SMA,Price,i+1);
//абсолютный импульс
double moa = MathAbs(mom);
//Сглаживание относительного импульса с помощью "функции ismooth"
double tmom = iSmooth(mom,Length,SmoothSpeed,i,0);
//Сглаживание абсолютного импульса с помощью функции "ismooth"
double tmoa = iSmooth(moa,Length,SmoothSpeed,i,1);
if (tmoa != 0)
//Вычисляем отношение 50*(RM+AM)(AM)
rsi = MathMax(MathMin((tmom/tmoa+1.0)*50.0,100.00),0.00);
else rsi = 50;
Zilliq
У вас есть его исходный код в этом индикаторе. Просто преобразуйте его в prorealtime
Мне не так просто интерпретировать функцию ismooth (MT4 настолько сложна по сравнению с PRT).
Я пытаюсь перевести код MT4 в математический код, чтобы затем закодировать его на PRT.
Пожалуйста, не могли бы вы подтвердить мою интерпретацию различных строк под каждой строкой, прежде чем я закодирую ее на PRT.
Большое спасибо, Младен
Zilliq
double iSmooth(double price,int length, double speed, int r, int instanceNo=0)
{
if (ArrayRange(workSmooth,0)!=Bars) ArrayResize(workSmooth,Bars); instanceNo *= 5; r = Bars-r-1;
if(r<=2) { workSmooth[r] = price; workSmooth[r] = price; workSmooth[r] = price; workSmooth[r] = price; return(price); }
//
//
//
//
//
_______________________________________________________________________
double beta = 0.45*(length-1.0)/(0.45*(length-1.0)+2.0);
бета = 0.45*(длина-1.0)/(0.45*(длина-1.0)+2.0)
_______________________________________________________________________
double alpha = MathPow(beta,speed);
альфа = бета^скорость
_______________________________________________________________________
workSmooth[r] = price+alpha*(workSmooth[r-1]-price);
Filt0 = price+alpha*(Filt0[1]-price);
_______________________________________________________________________
workSmooth[r] = (цена - workSmooth[r])*(1-alpha)+alpha*workSmooth[r-1];
Filt1 = (цена - Filt0 )*(1-альфа)+альфа*Filt1[1]
_______________________________________________________________________
workSmooth[r] = workSmooth[r] + workSmooth[r];
Filt2 = Filt0 + Filt1
_______________________________________________________________________
workSmooth[r] = (workSmooth[r] - workSmooth[r-1])*MathPow(1.0-alpha,2) + MathPow(alpha,2)*workSmooth[r-1];
Filt3=Filt2-Filt4[1]*(1-alpha)*(1-alpha)+alpha*alpha*Filt3[1]
_______________________________________________________________________
workSmooth[r] = workSmooth[r] + workSmooth[r-1];
Filt4=Filt3+Filt4[1]
_______________________________________________________________________
return(workSmooth[r]);
return Filt4
Ой, не так просто для меня интерпретировать функцию ismooth (MT4 настолько сложна по сравнению с PRT).
Я пытаюсь перевести код MT4 в математический код, чтобы затем закодировать его на PRT.
Пожалуйста, вы можете подтвердить мою интерпретацию различных строк под каждой строкой до того, как я закодирую ее на PRT.
Большое спасибо, Младен
Zilliq
double iSmooth(double price,int length, double speed, int r, int instanceNo=0)
{
if (ArrayRange(workSmooth,0)!=Bars) ArrayResize(workSmooth,Bars); instanceNo *= 5; r = Bars-r-1;
if(r<=2) { workSmooth[r] = price; workSmooth[r] = price; workSmooth[r] = price; workSmooth[r] = price; return(price); }
//
//
//
//
//
_______________________________________________________________________
double beta = 0.45*(length-1.0)/(0.45*(length-1.0)+2.0);
бета = 0.45*(длина-1.0)/(0.45*(длина-1.0)+2.0)
_______________________________________________________________________
double alpha = MathPow(beta,speed);
альфа = бета^скорость
_______________________________________________________________________
workSmooth[r] = price+alpha*(workSmooth[r-1]-price);
Filt0 = price+alpha*(Filt0[1]-price);
_______________________________________________________________________
workSmooth[r] = (цена - workSmooth[r])*(1-alpha)+alpha*workSmooth[r-1];
Filt1 = (цена - Filt0 )*(1-альфа)+альфа*Filt1[1]
_______________________________________________________________________
workSmooth[r] = workSmooth[r] + workSmooth[r];
Filt2 = Filt0 + Filt1
_______________________________________________________________________
workSmooth[r] = (workSmooth[r] - workSmooth[r-1])*MathPow(1.0-alpha,2) + MathPow(alpha,2)*workSmooth[r-1];
Filt3=Filt2-Filt4[1]*(1-alpha)*(1-alpha)+alpha*alpha*Filt3[1]
_______________________________________________________________________
workSmooth[r] = workSmooth[r] + workSmooth[r-1];
Filt4=Filt3+Filt4[1]
_______________________________________________________________________
return(workSmooth[r]);
возврат Filt4Насколько я понимаю, так и должно быть, но учтите, что я никогда не работал с prorealtime.