Да... я не знаю, насколько я рассеян. Благодаря вашему своевременному совету, числа TB_TotalCount и VACount стали правильными и абсолютно разумными. Но мои задачи по поиску VA High/Low все еще в беде, мой компьютер снова сломался с этой частью кодирования. Пытаюсь снова понять причину.
Большое спасибо Младен! Ваш совет дал мне частичную улыбку после целой белой ночи.
Это просто результат использования различных методов сглаживания. Разное сглаживание дает разные результаты
Если вы хотите получить результаты, сравнимые с rsi, опубликованными в потоке rsi, вы должны использовать тот тип сглаживания, который используется в этом индикаторе.
Странно, что сглаживание относительного и абсолютного импульса дает такой результат с некоторыми преувеличениями с помощью средней по Халлу и T3.
Можете ли вы объяснить с математической формулой (если возможно), как работает сглаживание функции ismooth в MT4, чтобы получить гладкий RSI, сравнимый с RSI, пожалуйста, и я буду кодировать его после того, как
Да... я не знаю, насколько я рассеян. Благодаря вашему своевременному совету, числа 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.
Пожалуйста, вы можете подтвердить мою интерпретацию различных строк под каждой строкой до того, как я закодирую ее на 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.