코딩 도움말 - 페이지 170

 

네... 제가 얼마나 정신이 없었는지 모릅니다. 적절한 시간 조언 덕분에 TB_TotalCount 및 VACount의 수가 정확하고 절대적으로 합리적이 되었습니다. 그러나 VA High/Low를 찾는 목표는 여전히 곤경에 처해 있으며, 내 PC는 코딩의 해당 부분과 함께 다시 충돌합니다. 왜 지금 다시 이해하려고 노력하고 있습니다.

Mladen 감사합니다! 너의 충고는 나에게 온통 하얀 밤을 보낸 후 부분적인 미소를 준다

 

안녕 믈라덴

마침내 나머지 문제를 해결했음을 알리기 위해. 더 개선하기 위해 노력하고 있습니다.

비록 당신이 이 경우에 당신이 할 수 있는 한 거의 도움을 주지 않았지만 나는 그것이 때때로 서서 배우는 사람들을 가르치는 가장 좋은 방법이라는 것을 알게 되었습니다.

진심으로 감사드립니다, Mladen!

앞으로 좋은일만 가득하세요,

파리스톨

 
zilliq:
안녕 믈라덴

상대와 절대 모멘텀을 이용해 성공

많은 도움을 주셔서 감사합니다. 이제 rsx의 추진력을 부드럽게 해야 합니다.

질리크

Ps: 누군가를 도울 수 있다면:

// 닫을 때 상대 모멘텀

ind1= 닫기 닫기[1]

// 절대 운동량

ind2=abs(ind1)

ind3=wilderAverage[rs](ind1)

ind4=wilderAverage[rs](ind2)

ind3=(50*(ind3+ind4))/ind4

ind3을 "RSI", 0, 30, 70, 100으로 반환

질리크

이 게시물을 살펴보십시오 : https://www.mql5.com/en/forum/178733/page36

거기에서 스무딩을 수행하는 방법에 대한 예가 있습니다.

 

고마워 Mladen, 나는 그것을 볼 것이다

좋은 하루 되세요. 모든 도움과 작업에 감사드립니다.

질리크

 

글쎄, 내가 당신의 지표 rsi smoother 2를 잘 이해했다면, 당신은 ismooth 함수 로 더 와일드한 평균을 변경하기만 하면 됩니다.

그리고 당신은 상대적이고 절대적인 운동량을 "부조화"합니다.

나는 헐 평균으로 동일한 작업을 수행하지만 결과는 내 사진에서 보는 것과 동일하지 않습니다.

이유를 알고 있습니까, 아니면 제가 실수를 하고 있습니까?

감사합니다

그리고 코드 RSI14 및 RSIsmoother 45

// 닫을 때 상대 모멘텀

ind1= 닫기 닫기[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

ind5를 "RSI smooth"로 반환

나는 동일한 문제로 (상대 및 절대 운동량) 모두에서 더 거친 평균을 T3 Tillson으로 대체합니다.

파일:
 

그것은 단순히 다른 평활화 방법 을 사용한 결과입니다. 다른 평활화는 다른 결과를 제공합니다

rsi 스레드에 게시된 rsi와 비슷한 결과를 원하면 해당 표시기에 사용된 그런 종류의 평활화를 사용해야 합니다.

 

Mladen님 답변 감사합니다.

상대 및 절대 모멘텀의 스무드가 Hull 평균과 T3에서 약간의 과장과 함께 이러한 결과를 제공하는 것이 이상합니다.

RSI에 필적하는 부드러운 RSI를 얻기 위해 MT4의 등가 함수 의 스무딩이 어떻게 작동하는지 수학 공식(가능한 경우)으로 설명할 수 있습니까? 그러면 나중에 코딩하겠습니다.

감사합니다 좋은 하루 되세요

질리크

당신의 MT4 코드와 나의 해석:

//상대운동량

더블맘 = iMA(NULL,0,1,0,MODE_SMA,가격,i)-iMA(NULL,0,1,0,MODE_SMA,가격,i+1);

//절대 모멘텀

이중 모아 = MathAbs(엄마);

// "ismooth 함수"로 상대 운동량을 부드럽게 합니다.

더블 tmom = iSmooth(엄마,길이,부드러운 속도,i,0);

//"ismooth 함수"로 절대 운동량을 부드럽게 합니다.

이중 tmoa = iSmooth(모아, 길이, 부드러운 속도, i,1);

if (tmoa != 0)

//그리고 비율 50*(RM+AM)(AM)

rsi = MathMax(MathMin((tmom/tmoa+1.0)*50.0,100.00),0.00);

그렇지 않으면 rsi = 50;

 

질리크

해당 표시기에 소스 코드가 있습니다. 그냥 실시간으로 변환

 

아야 ismooth 함수 를 해석하는 것은 정말 쉽지 않습니다 (MT4는 PRT에 비해 너무 복잡합니다)

MT4 코드를 수학 코드로 번역하여 PRT 이후에 코딩하려고 합니다.

PRT에서 코딩하기 전에 각 줄 아래에 있는 다른 줄에 대한 내 해석을 확인할 수 있습니까?

믈라덴 감사합니다

질리크

double iSmooth(두 배 가격, 정수 길이, 두 배 속도, 정수 r, 정수 인스턴스 번호=0)

{

if (ArrayRange(workSmooth,0)!=바) ArrayResize(workSmooth,바); 인스턴스 번호 *= 5; r = 바-r-1;

if(r<=2) { workSmooth[r] = 가격; workSmooth[r] = 가격; workSmooth[r] = 가격; 반품(가격); }

// //

// //

// //

// //

// //

_____________________________________________________________________________________

이중 베타 = 0.45*(길이-1.0)/(0.45*(길이-1.0)+2.0);

베타 = 0.45*(길이-1.0)/(0.45*(길이-1.0)+2.0)

_____________________________________________________________________________________

이중 알파 = MathPow(베타, 속도);

알파 = 베타^속도

_____________________________________________________________________________________

workSmooth[r] = 가격+알파*(workSmooth[r-1]-가격);

Filt0 = 가격+알파*(Filt0[1]-가격);

_____________________________________________________________________________________

workSmooth[r] = (가격 - workSmooth[r])*(1-알파)+알파*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-알파,2) + MathPow(알파,2)*workSmooth[r-1];

Filt3=Filt2-Filt4[1]*(1-알파)*(1-알파)+알파*알파*Filt3[1]

_____________________________________________________________________________________

workSmooth[r] = workSmooth[r] + workSmooth[r-1];

Filt4=Filt3+Filt4[1]

_____________________________________________________________________________________

return(workSmooth[r]);

반환 Filt4

 
zilliq:
아야 ismooth 함수를 해석하는 것은 정말 쉽지 않습니다 (MT4는 PRT에 비해 너무 복잡합니다)

MT4 코드를 수학 코드로 번역하여 PRT 이후에 코딩하려고 합니다.

PRT에서 코딩하기 전에 각 줄 아래에 있는 다른 줄에 대한 내 해석을 확인할 수 있습니까?

믈라덴 감사합니다

질리크

double iSmooth(두 배 가격, 정수 길이, 두 배 속도, 정수 r, 정수 인스턴스 번호=0)

{

if (ArrayRange(workSmooth,0)!=바) ArrayResize(workSmooth,바); 인스턴스 번호 *= 5; r = 바-r-1;

if(r<=2) { workSmooth[r] = 가격; workSmooth[r] = 가격; workSmooth[r] = 가격; 반품(가격); }

// //

// //

// //

// //

// //

_____________________________________________________________________________________

이중 베타 = 0.45*(길이-1.0)/(0.45*(길이-1.0)+2.0);

베타 = 0.45*(길이-1.0)/(0.45*(길이-1.0)+2.0)

_____________________________________________________________________________________

이중 알파 = MathPow(베타, 속도);

알파 = 베타^속도

_____________________________________________________________________________________

workSmooth[r] = 가격+알파*(workSmooth[r-1]-가격);

Filt0 = 가격+알파*(Filt0[1]-가격);

_____________________________________________________________________________________

workSmooth[r] = (가격 - workSmooth[r])*(1-알파)+알파*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-알파,2) + MathPow(알파,2)*workSmooth[r-1];

Filt3=Filt2-Filt4[1]*(1-알파)*(1-알파)+알파*알파*Filt3[1]

_____________________________________________________________________________________

workSmooth[r] = workSmooth[r] + workSmooth[r-1];

Filt4=Filt3+Filt4[1]

_____________________________________________________________________________________

return(workSmooth[r]);

반환 Filt4

내가 보기에는 그것이 되어야 하지만 내가 prorealtime으로 작업한 적이 없다는 것을 염두에 두십시오.