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

 
triip:
RSIとSMAの関係をコード化するために少し助けが必要です。

画像にあるように、シグナル(上下の矢印)が出ていますが、その中には偽のシグナルもあります。そこで、RSI14とSMA20が表示されている偽のシグナルを排除することにしました。

論理は簡単で、RSI14がSMA20を上回れば上向き矢印が表示され、RSI14がSMA20を下回れば下向き矢印が表示される。RSIがSMA20より下なら下矢印が表示されるはずです。

RSIが高すぎるため、いくつかの上向き矢印を間違ってマークしてしまったが、その部分は自分でコーディングできる。

RSI<MAのクロスのコードはたくさん見つけたが、そのほとんどはクロスが現れたらロング/ショートになるものだった。しかし、私はRSIがABOVEまたはBELOWになる用語が必要で、それから何かをする。

今のところ、私が見つけた限りでは、私はそのためにIRSIと配列を使用しなければなりませんが、そのコードを自分で組み立てることはできません。

トリイップ

ここに投稿されたものをチェックしましたか?https://www.mql5.com/en/forum/general

 
mladen:
triip ここに掲載されているものを確認しましたか?https://www.mql5.com/en/forum/general

はい、しかし、私が見つけたものはすべて交差信号でした。RSIがSMAの上にあるか下にあるかという条件が必要です。

まず、ABOVEとBELOWを宣言して、その後にIF文の中で使うというのは理解できるのですが。

 
mladen:
トリプ


ここに掲載されているものを確認しましたか :https://www.mql5.com/en/forum/174476



はい、しかし、私が見つけたものはすべて交差信号でした。RSIがSMAより上か下かの条件が必要なんです。


まず、ABOVEとは何か、BELOWとは何かを宣言し、その後にIF文の中で使用することができるということは理解したのですが。

 
triip:
はい、しかし、私が見つけたすべてのものは、信号を交差させた。私はRSIがSMAの上/下にある場合の条件を必要とします。 私はまず、私はIF文にそれらを使用することができ、その後に、ABOVEと何を意味するBELOWを宣言しなければならないことを理解しています。

トリイップ

あなたの写真でそれらの信号を得るために使用されたどのようなrsiか分からない、そう...それは私が言うことができるすべてです。コードなしでより多くの助けをすることはできません

 
mladen:
triip あなたの画像にそれらの信号を取得するために使用されていたどのようなrsiは見当もつかないので、...それは私が言うことができるすべてです。コードなしでより多くの助けをすることはできません

すみません、矢印のシグナルがRSIからきているのではないことを言いませんでした。しかし、RSIとSMAは間違ったシグナルを避けるのに役立つと見ました。そのため、RSIの条件も識別できるようにシグナルコードを編集したいのです。

私が必要とするものは、次のとおりです。

矢印のシグナルが来るが、それらのすべては、真の信号ではありません。だから、矢印が来る前に、RSI条件を制御する別のifチェックが ある必要があります。

if (私の現在のコード &&RSI is above/below SMA)

{矢印を表示

}

この赤い部分が必要なんだ。

 
triip:
すみません、矢印のシグナルがRSIから来るのではないことに言及しませんでした。しかし、RSIとSMAは間違ったシグナルを避けるのに役立つと思いました。そのため、私はシグナルコードを編集して、RSIの条件も識別できるようにしたいのです。

私が必要としているのは

矢印のシグナルが来るが、それらはすべて真のシグナルではない。そこで、もし矢印が来たら、RSIの条件を制御する別のifチェックが必要です。

if (私の現在のコード &&RSI is above/below SMA)

{矢印を表示

}

その赤い部分が必要なんです。

triip

次のことをしなければなりません。

1.RSIの値をバッファに保存する

2.iMAOnArray()を使って、そのRSIの値のSMAを計算する。

3.3. 保存されたRSIの値とiMAOnArray()で計算された値を比較し、それがあなたの条件となります。

 
mladen:
triip

以下を実行する必要があります。

1.RSIの値をバッファに保存する。

2.iMAOnArray()を使って、そのRSIの値のSMAを計算する。

3.保存したRSIの値とiMAOnArray()の計算値の値を比較すれば、それがあなたの条件です。

ということで、1と2はこんな感じでしょうか?

1.

#property indicator_buffers 2

extern int rsi_p = 14;

extern int MA_Period=20;

extern int MA_Shift=0;

extern int MA_Method=0;

extern int NumberOfBarsToCalculate = 10000;

double Buffer0[];

double Buffer1[];

double Ma[];

double RSi[];

int init()

{

IndicatorBuffers(4);

SetIndexBuffer(0,Buffer0);

SetIndexBuffer(1,Buffer1);

SetIndexBuffer(2,Ma);

SetIndexBuffer(3,RSi);

return(0);

}

[/CODE]

2.

[CODE]int start() {

int shift;

double rsi = 0;

for(shift=NumberOfBarsToCalculate-1;shift>=0;shift--){

RSi[shift] = iRSI(NULL,0,rsi_p,PRICE_CLOSE,shift);

}

for(shift=NumberOfBarsToCalculate-1;shift>=0;shift--){

Ma[shift] = iMAOnArray(RSi,0,MA_Period,MA_Shift,MA_Method,shift);

Buffer0[shift] = RSi[shift];

Buffer1[shift] = Ma[shift];

}

return(0);

}

 
triip:
ということは、1と2のような感じでしょうか?

1.

#property indicator_buffers 2

extern int rsi_p = 14;

extern int MA_Period=20;

extern int MA_Shift=0;

extern int MA_Method=0;

extern int NumberOfBarsToCalculate = 10000;

double Buffer0[];

double Buffer1[];

double Ma[];

double RSi[];

int init()

{

IndicatorBuffers(4);

SetIndexBuffer(0,Buffer0);

SetIndexBuffer(1,Buffer1);

SetIndexBuffer(2,Ma);

SetIndexBuffer(3,RSi);

return(0);

}

[/CODE]

2.

[CODE]int start() {

int shift;

double rsi = 0;

for(shift=NumberOfBarsToCalculate-1;shift>=0;shift--){

RSi[shift] = iRSI(NULL,0,rsi_p,PRICE_CLOSE,shift);

}

for(shift=NumberOfBarsToCalculate-1;shift>=0;shift--){

Ma[shift] = iMAOnArray(RSi,0,MA_Period,MA_Shift,MA_Method,shift);

Buffer0[shift] = RSi[shift];

Buffer1[shift] = Ma[shift];

}

return(0);

}

はい、そのような方法もあります

そして、必要なときに、RSiとMAバッファを比較するだけで、常に相対的な位置を確認することができます。

 
mladen:
そうですね、そのような方法もありますし、必要なときには、RSiとMAバッファを比較するだけで、常に相対的な位置を確認することができます。

素晴らしい、ありがとうございます。

 
mladen:
見習いコーダー このようなソート手順を持つインジケータがあります (2次元の配列をソートしています) :spearman_rank_correlation_nmc.mq4

mladen

c/c++で同じことをやっている例があれば教えてください。