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

 

こんにちは。

標準のstepMA 9インジケータを、ヒストグラムとして別ウィンドウに表示するように変更しました。しかし、なぜ買いシグナルが標準インジケータと同期していないのか分かりません(売りシグナルは同期しています)。新しいものでは、元のインジケータより1バー後ろに発生します。なぜでしょうか?私はインジケータのグラフィック面を決定するコードの部分のみを変更しました。

ステップマ_9_histo_mtf.mq4

ステップマ_9.0.mq4

ファイル:
 
thefxpros:
こんにちは。

標準のstepMA 9インジケータをヒストグラムとして別ウィンドウに表示するように変更しましたが、なぜ買いシグナルが標準インジケータと同期していないのか分かりません(売りシグナルは同期しています)。新しいインディケータでは、元のインディケータよりも1バー後ろに発生します。なぜでしょうか?私はインジケータのグラフィック面を決定するコードの部分のみを変更しました。

ステップマ_9_histo_mtf.mq4

ステップマ_9.0.mq4

thefxpros

それは、線の引き方の結果です。

線を引くときは、線を見えるようにするために1小節後ろから引き始める必要があります(そうしないと、点になってしまい、チャート上で全く見えません)。この2つを比較してみてください。

ファイル:
 

こんにちは。

トレーリングストップと同じような方法でトレードを開始するEAを探しています。

例えば、ある商品でリトレースメントを待っているとします。私はできるだけ高い(または低い)価格で取引を開始したいと思います。このようなEAでは、取引パラメータを 設定すれば、トレーリングストップと同じように価格を追い続けることができます。反転したらヒットしてトレードが開始される。

このようなEAを見たことがありますか?

ありがとうございます。

 

こんにちは

作成したコードを試してみましたが、なぜかトレードを開始できません。

int varCurrentTime = TimeCurrent();

for (int iTS = 0; iTS < 2000; iTS++) {

int varZonStart = StrToTime(TimeToStr(varCurrentTime, TIME_DATE) + " " + "00:00");

int varZonEnd = StrToTime(TimeToStr(varCurrentTime, TIME_DATE) + " " + "10:00");

int JamStart=TimeHour(varZonStart);

int JamEnd=TimeHour(varZonEnd);

if (JamStart>JamEnd) {

varCurrentTime = decDateTradeDay(varCurrentTime);

//if (TimeDayOfWeek(varCurTime) < 1) varCurTime = decDateTradeDay(varCurTime);

if (TimeDayOfWeek(varCurrentTime) > 5) varCurrentTime = decDateTradeDay(varCurrentTime);

}

varZonStart = StrToTime(TimeToStr(varCurrentTime, TIME_DATE) + " " + "00:00");

int varShiftStart = iBarShift(NULL, 0, varZonStart - 60 * Period());

int varShiftEnd = iBarShift(NULL, 0, varZonEnd);

varHighest = High;

varLowest = Low;

varCurrentTime = decDateTradeDay(varCurrentTime); //set 1 hari kebelakang

if (TimeDayOfWeek(varCurrentTime) < 1) varCurrentTime = decDateTradeDay(varCurrentTime); //jika minggu mundur lagi

if (TimeDayOfWeek(varCurrentTime) > 5) varCurrentTime = decDateTradeDay(varCurrentTime); //jika sabtu mundur lagi

}

for (int iTSh = 0; iTSh < 2000; iTSh++) {

for (int iTSl = 0; iTSl < 2000; iTSl++) {

if(((varHighest-varLowest)/Pip)<=5) varHL=(varHighest+varLowest)/2;

}

}

double isg10a = iOpen(Symbol(),PERIOD_M15,1);

double isg10b = iClose(Symbol(),PERIOD_M15,1);

int static isg10c = -1;

for (iTS = 0; iTS < 2000; iTS++) {

if(isg10avarHL)isg10c =0;

if(isg10a>varHL&&isg10b<varHL)isg10c =1;

}

if (isg10c==0) To code Buy

else if (isg10c==1) To code Sel

else no trade

 
mladen:
Jim 全部を書き直すのではなく、棒グラフの計算に制限を加え、それらの棒グラフをすべて再計算するようにしました。これは、リフレッシュの問題を解決するはずです(ただ、BarsTocalculateを大きすぎず小さすぎずの適度な値に保ってください。私はデフォルトとして1000を使用し、それはそのように問題ないようです)。試してみてください。

mladen様。

ご苦労様、そして迅速な対応に感謝します。

私は試してみるつもりです。

ミュンヘンからよろしくお願いします。

 

このボリュームインジケータを アップグレードして私のMT4に添付するのを手伝ってください。

こんにちは、このボリュームインジケータのエラーを修正するために親切に助けてください。最近、私のmt4チャートに添付することができないことに気づきました。ファイル内のエラーを修正するために可能なことはすべて行いましたが、無駄でした。mt4の大幅なアップグレードが原因だと思われます。私のmt4フォルダにある他のインジケータは、古いバージョンも新しいバージョンもすべて問題なく動作しています。私はまだプログラマーではありませんが、1年前までは動いていました。

添付ファイルをご覧ください。

 

MLadenさん、Mrtoolsさん、こんにちは。

お元気ですか?

RSXについて確認したいことがあります。

私はあなたがRSXを計算するために、より単純な式を使用していることを参照してください。

__________________________

ダブルKg = (3.0)/(2.0+Length);

double Hg = 1.0-Kg;

if (slope[limit]==-1) クリーンポイント(limit,rsxDa,rsxDb);

if (ArrayRange(wrkBuffer,0) != Bars) ArrayResize(wrkBuffer,Bars).If(i=limit,rkBuffer,Length)。

for(i=limit, r=Bars-i-1; i>=0; i--, r++)

{

wrkBuffer[r][12] = iMA(NULL,0,1,0,MODE_SMA,Price,i);

if (i==(Bars-1)) { for (int c=0; c<12; c++) wrkBuffer[r][c] = 0; continue; }; }.

//

//

//

//

//

double mom = wrkBuffer[r][12]-wrkBuffer[r-1][12];

double moa = MathAbs(mom);

for (int k=0; k<3; k++)

{

int kk = k*2;

wrkBuffer[r][kk+0] = Kg*mom + Hg*wrkBuffer[r-1][kk+0];

wrkBuffer[r][kk+1] = Kg*wrkBuffer[r][kk+0] + Hg*wrkBuffer[r-1][kk+1]; mom = 1.5*wrkBuffer[r][kk+0] - 0.5 * wrkBuffer[r][kk+1]; kkBuffer[r][kk] = Kg*wrkBuffer[kk+1] + Kg*wrkBuffer[r][kk+2] = 0.5 * wrkBuffer[kk] [kk+2

wrkBuffer[r][kk+6] = Kg*moa + Hg*wrkBuffer[r-1][kk+6] とする。

wrkBuffer[r][kk+7] = Kg*wrkBuffer[r][kk+6] + Hg*wrkBuffer[r-1][kk+7]; moa = 1.5*wrkBuffer[r][kk+6] - 0.5 * wrkBuffer[r][kk+7] です。

}

if (moa != 0)

rsx = MathMax(MathMin((mom/moa+1.0)*50.0,100.00),0.00);

else rsx = 50;

____________________________________

この式でRSXがどのように計算されるかを理解するために、念のため。

まず行で

mom = wrkBuffer[r][12]-wrkBuffer[r-1][12];

実際にはwrkBuffer[r][12]は、価格の単純移動平均 であり、通常のRSIと同様に価格に注意してください?

ですよね?しかし、私はこのSMAの期間(おそらくない長さ)である理解していない?

そして、私はよく行で理解している場合、後。

のために(int k=0; k<3; k++)

{

int kk = k * 2。

wrkBuffer[r][kk+0] = Kg*mom + Hg*wrkBuffer[r-1][kk+0];

wrkBuffer[r][kk+1] = Kg*wrkBuffer[r][kk+0] + Hg*wrkBuffer[r-1][kk+1] とする。

mom = 1.5*wrkBuffer[r][kk+0] - 0.5 * wrkBuffer[r][kk+1] となります。

実際には、上記の最初のmomで、3回のmomを計算します(mom = wrkBuffer[r][12]-wrkBuffer[r-1][12];)。

でいいのでしょうか?

そして、この後、RSX=((mom/moa)+1)*50で "クラシック "です。

あなたの次の答えをありがとう、コーダーとして(別のプラットフォーム上で)、あなたは私がコードがどのように動作するかを理解するのが好きな知っている。

美しい一日をお過ごしください。

Zilliq

 
zilliq:
MLadenさん、Mrtoolsさん、こんにちは。

元気かな

RSXについて確認したいことがあります。

私はあなたがRSXを計算するために、より単純な式を使用していることを参照してください。

__________________________

double Kg = (3.0)/(2.0+Length);

double Hg = 1.0-Kg;

if (slope[limit]==-1) クリーンポイント(limit,rsxDa,rsxDb);

if (ArrayRange(wrkBuffer,0) != Bars) ArrayResize(wrkBuffer,Bars).If(i=limit,rkBuffer,Length)。

for(i=limit, r=Bars-i-1; i>=0; i--, r++)

{

wrkBuffer[r][12] = iMA(NULL,0,1,0,MODE_SMA,Price,i);

if (i==(Bars-1)) { for (int c=0; c<12; c++) wrkBuffer[r][c] = 0; continue; }; }.

//

//

//

//

//

double mom = wrkBuffer[r][12]-wrkBuffer[r-1][12];

double moa = MathAbs(mom);

for (int k=0; k<3; k++)

{

int kk = k*2;

wrkBuffer[r][kk+0] = Kg*mom + Hg*wrkBuffer[r-1][kk+0];

wrkBuffer[r][kk+1] = Kg*wrkBuffer[r][kk+0] + Hg*wrkBuffer[r-1][kk+1]; mom = 1.5*wrkBuffer[r][kk+0] - 0.5 * wrkBuffer[r][kk+1]; kkBuffer.r] [kk] [kk+2] = Kg*wrkBuffer[k][kk] + Kg*wrkBuffer[h-1][kk+2

wrkBuffer[r][kk+6] = Kg*moa + Hg*wrkBuffer[r-1][kk+6] とする。

wrkBuffer[r][kk+7] = Kg*wrkBuffer[r][kk+6] + Hg*wrkBuffer[r-1][kk+7]; moa = 1.5*wrkBuffer[r][kk+6] - 0.5 * wrkBuffer[r][kk+7] です。

}

if (moa != 0)

rsx = MathMax(MathMin((mom/moa+1.0)*50.0,100.00),0.00);

else rsx = 50;

____________________________________

この式でRSXがどのように計算されるかを理解するために、念のため。

まず行で

mom = wrkBuffer[r][12]-wrkBuffer[r-1][12];

実際にはwrkBuffer[r][12]は、価格の単純移動平均であり、通常のRSIと同様に価格に注意してください?

ですよね?しかし、私はこのSMAの期間(おそらくない長さ)である理解していない?

そして、私はよく行で理解している場合、後。

のために(int k=0; k<3; k++)

{

int kk = k * 2。

wrkBuffer[r][kk+0] = Kg*mom + Hg*wrkBuffer[r-1][kk+0];

wrkBuffer[r][kk+1] = Kg*wrkBuffer[r][kk+0] + Hg*wrkBuffer[r-1][kk+1] とする。

mom = 1.5*wrkBuffer[r][kk+0] - 0.5 * wrkBuffer[r][kk+1] となります。

実際には、上記の最初のmomで、3回のmomを計算します(mom = wrkBuffer[r][12]-wrkBuffer[r-1][12];)。

でいいのでしょうか?

そして、この後、RSX=((mom/moa)+1)*50で "クラシック "です。

あなたの次の答えをありがとう、コーダーとして(別のプラットフォーム上で)、あなたは私がコードがどのように動作するかを理解するのが好きな知っている。

美しい一日を過ごす

ジルイック

"実際にはwrkBuffer[r][12]は価格の単純移動平均であり、通常のRSIと同様に価格に注意してください?"

その平均の計算期間は 1であり、それは使用される「平均」の価格と同じであることを意味します。メタトレーダーでは、これが希望の価格を得るための最速の方法です(同じことをする「ケース」構造を書こうとすると、rsxコードで使われている方法よりずっと遅いことがわかるでしょう)。

"実際には、それは上記の最初のママと3回ママを計算します(1つの後に)"

いいえ、それはそれぞれの、そしてすべての新しい繰り返しで使用されている値を参照してください。ママとモアは常に変更され、ループ処理中に(その変更された形で)再利用されます。

 

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

とても不思議なのですが、wrkBuffer[r][12]は価格と同じですが、計算を加速するために期間1の移動平均を使用して いますね。それはとても不思議です...。

2つ目は、私が言いたいのはこういうことだと思います。

それは価格の勢いとして お母さんを計算します

そして、それはKgとHgで別のお母さんを計算します。それは、新しいママを作成するために使用されている新しいママを与え、など、3回

何か "簡単に"(理解しやすくするために)そのような

ママ

mom1=kg*mom

mom2=kg*mom1(ママ2

mom3=kg*mom2(ママ3はkg*ママ2

そして、最後にmom3、moa3が使われる。

となっているのですが、これは正しいのでしょうか?

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

非常に不思議なのですが、wrkBuffer[r][12]は価格と同じですが、計算を加速するために周期1の移動平均を使って いるのですね。それはとても不思議です...。

2つ目は、私が言いたいのはこういうことだと思います。

それは価格の勢いとしてお母さんを計算します

そして、それはKgとHgで別のお母さんを計算します。それは、新しいママを作成するために使用されている新しいママを与え、など、3回

何か "簡単に"(理解しやすくするために)そのような

ママ

mom1=kg*mom

mom2=kg*mom1(ママ2

mom3=kg*mom2(ママ3はkg*ママ2

そして最後にmom3、moa3を使う

私は正しいのでしょうか?

ジリ貧ですね。

はい、そのように行われます