コーディングのヘルプ - ページ 170

 

そうですね...私はどれだけ不注意だったのかわかりません。皆さんの適切なアドバイスのおかげで、TB_TotalCountとVACountの数値は正しく、全く妥当なものになりました。しかし、VA High/Lowを見つけるという私の目的はまだ問題で、その部分のコーディングで私のPCは再びクラッシュしてしまいました。今、その理由を理解するために再挑戦しています。

Mladenさん、どうもありがとうございました。あなたのアドバイスは、私に白夜の後の部分的な微笑みを与えてくれます。

 

こんにちは、Mladen。

私の問題の残りをようやく解決したことをお知らせします。もっと改善しようと思っています。

この場合、あなたは私にできる限りの手助けをしてくれませんでしたが、私はそれが自分の足で立って学んでいる人に教える最良の方法であることがわかりました。

ムラデン、心から感謝します。

これからもよろしくお願いします。

ファラストル

 
zilliq:
こんにちは、Mladen。

相対運動量と絶対運動量を使って成功しました

あなたの助けをどうもありがとう、今私はrsxのために運動量を滑らかにする必要があります。

Zilliq

Ps:もしそれが誰かの助けになるなら。

//終値での相対モメンタム

ind1= close-close[1]です。

// 絶対的な勢い

ind2=abs(ind1)です。

ind3=wilderAverage[rs](ind1)

ind4=wilderAverage[rs](ind2)

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

ind3を "RSI",0,30,70,100で返します。

Zilliq

この投稿を見てみてください :https://www.mql5.com/en/forum/178733/page36

スムージングをどのように行うかの例があります。

 

ありがとうMladen、私はそれを参照してください。

良い一日をお過ごしください、そして、あなたの助けと仕事に感謝します。

Zilliq

 

rsi smoother 2というインジケータをよく理解すると、ismoothという関数で ワイルドアベレージを変更するだけなのですね。

そして、あなたは相対的および絶対的な運動量を "ismooth "する。

私はハル平均で同じことを行うが、結果はあなたが私の絵に表示されているのと同じではありません。

なぜかわかりますか、それとも私が間違っているのでしょうか?

ありがとうMladen

そして、コード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)

// 絶対運動量をHull平均で滑らかにする

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さん、回答ありがとうございました。

相対運動量と絶対運動量の平滑化が、ハル平均とT3による誇張でこのような結果になるのは奇妙です。

RSIに匹敵する滑らかなRSIを得るためにMT4のismooth関数の 平滑化をどのように動作させるか数式で(可能であれば)説明できますか?

どうもありがとうございました、良い一日を

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)

//And the ratio 50*(RM+AM)(AM)

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

さもなければ rsi = 50;

 

Zilliq

そのインジケータにそのソースコードがありますね。それをprorealtimeに変換するだけです。

 

ouch not really easy for me interpret the ismoothfunction (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] = 価格; workSmooth[r] = 価格; 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)。

alpha = beta^speed

_______________________________________________________________________

workSmooth[r] = price+alpha*(workSmooth[r-1]-price);

Filt0 = price+alpha*(Filt0[1]-price);

_______________________________________________________________________

workSmooth[r] = (price - workSmooth[r])*(1-alpha)+alpha*workSmooth[r-1];

Filt1 = (価格 - Filt0 )*(1-alpha)+alpha*Filt1[1].

_______________________________________________________________________

workSmooth[r] = workSmooth[r] + workSmooth[r];

フィルタ2 = フィルト0 + フィルト1

_______________________________________________________________________

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

 
zilliq:
(MT4はPRTに比べてとても複雑です)

MT4のコードをPRTでコーディングするために数学的なコードで翻訳しようとしています。

PRTでコーディングする前に、各行の下にある異なる行の私の解釈を確認することができます。

Mladenさん、ありがとうございます。

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] = 価格; workSmooth[r] = 価格; 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)。

alpha = beta^speed

_______________________________________________________________________

workSmooth[r] = price+alpha*(workSmooth[r-1]-price);

Filt0 = price+alpha*(Filt0[1]-price);

_______________________________________________________________________

workSmooth[r] = (price - workSmooth[r])*(1-alpha)+alpha*workSmooth[r-1];

Filt1 = (価格 - Filt0 )*(1-alpha)+alpha*Filt1[1].

_______________________________________________________________________

workSmooth[r] = workSmooth[r] + workSmooth[r];

フィルタ2 = フィルト0 + フィルト1

_______________________________________________________________________

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

私が見る限り、それはそれであるべきですが、私はprorealtimeで作業したことがないことを心に留めておいてください。