MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 1730

 
anrei2002 #:

関係ない矢印がすぐに消えた!!!!

理解してもらえるとは思っていません、同じような問題を抱えたお客様がいて、1年間説明できませんでした、違うインジケーターもありましたが、ピーと鳴ることもありました。彼は頭がいいように見えるが、どうやら利益への渇望が彼の論理と思考を狂わせてしまったようだ......。彼はやがて、大金を空にしたときにすべてを悟った。どうしたらいいんだろう・・・リセットしたらインジケーターが動かなくなるし。リセットすると右の矢印だけ残るが、履歴では...。このようなインジケータをたくさん見てきました

 
MakarFX #:
すでにやっていることを見せる。
#property description "ストキャスティックオシレーター"
#プロパティの厳密さ

#property indicator_separate_window
#property indicator_minimum 0
#property indicator_maximum 100
#property indicator_buffers 2
#property indicator_color1 LightSeaGreen
#property indicator_color2 レッド
#property indicator_level1 20.0
#property indicator_level2 80.0
#property indicator_levelcolor clrSilver
#property indicator_levelstyle STYLE_DOT
//--- 入力パラメータ
入力 int InpKPeriod=5; // 入力 K 周期
入力 int InpDPeriod=3; // 入力 D 周期
入力 int InpSlowing=3; // スローイング

入力文字列 PARA_Ref = "$USDX";
//入力文字列 PARA_Ref = "ETHUSD";


//--- バッファ
double ExtMainBuffer[];
double ExtSignalBuffer[];
double ExtHighesBuffer[];
double ExtLowesBuffer[];

double cl[];
double hi[]です。
double lo[]です。



//---
int draw_begin1=0;
int draw_begin2=0;
//+------------------------------------------------------------------+
//| カスタムインジケータ初期化関数
//+------------------------------------------------------------------+
int OnInit(void)
{
文字列のshort_name。
//--- カウントのために2つのバッファが追加で使用されます。
IndicatorBuffers(4)です。
SetIndexBuffer(2, ExtHighesBuffer)を設定します。
SetIndexBuffer(3, ExtLowesBuffer)を設定します。
//--- インジケータ線
SetIndexStyle(0,DRAW_LINE)を設定します。
SetIndexBuffer(0,ExtMainBuffer)を設定します。
SetIndexStyle(1,DRAW_LINE)を設定します。
SetIndexBuffer(1,ExtSignalBuffer)を設定します。
//--- DataWindowとインジケータサブウィンドウのラベルの名前
short_name="Stochastic_Mult_1("+IntegerToString(InpKPeriod)+", "+IntegerToString(InpDPeriod)+", "+IntegerToString(InpSlowing)+")".となります。
IndicatorShortName(short_name)。
SetIndexLabel(0,short_name)を設定する。
SetIndexLabel(1, "Signal")を設定します。
//---
draw_begin1=InpKPeriod+InpSlowingです。
draw_begin2=draw_begin1+InpDPeriod;
SetIndexDrawBegin(0,draw_begin1)を設定。
SetIndexDrawBegin(1,draw_begin2)を設定。
//--- 初期化完了
return(INIT_SUCCEED);
}
//+------------------------------------------------------------------+
//| ストキャスティックオシレーター
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
int i,k,pos,n;

//--- バーの数をチェックする
if(rates_total<=InpKPeriod+InpDPeriod+InpSlowing)とする。
return(0)です。
//--- 0からrates_totalまでカウントする。
ArraySetAsSeries(ExtMainBuffer,false)。
ArraySetAsSeries(ExtSignalBuffer,false)。
ArraySetAsSeries(ExtHighesBuffer,false)。
ArraySetAsSeries(ExtLowesBuffer,false)。
ArraySetAsSeries(low,false)です。
ArraySetAsSeries(high,false)です。
ArraySetAsSeries(close,false)。

//---
pos=InpKPeriod-1。
if(pos+1<prev_calculated)
pos=prev_calculated-2;
さもなくば
{
for(i=0; i<pos; i++)
{
ExtLowesBuffer[i]=0.
ExtHighesBuffer[i]=0.
}
}
//--- HighesBuffer[]とExtHighesBuffer[]を計算する。
for(i=pos; i<rate_total && !IsStopped(); i++)
{
double dmin=1000000.0;
double dmax=1000000.0;
for(k=i-InpKPeriod+1; k<=i; k++)
{
n = i-k とする。
if(dmin>iLow(PARA,0,n)* iLow(PARA_Ref,0,n)) // オリジナル: if(dmin>low[k]).
dmin=iLow(PARA,0,n)* iLow(PARA_Ref,0,n); // オリジナル:dmin=low[k];
if(dmax<iHigh(PARA,0,n)* iHigh(PARA_Ref,0,n)) // オリジナル: if(dmax<high[k])
dmax=iHigh(PARA,0,n)* iHigh(PARA_Ref,0,n); // オリジナル:dmax=high[k];

}
ExtLowesBuffer[i]=dmin;
ExtHighesBuffer[i]=dmax;
}
//--- %K 行
pos=InpKPeriod-1+InpSlowing-1です。
if(pos+1<prev_calculated)
pos=prev_calculated-2;
さもなくば
{
for(i=0; i<pos; i++)
ExtMainBuffer[i]=0.
}
//--- メインサイクル
for(i=pos; i<rate_total && !IsStopped(); i++)
{
double sumlow=0.0;
double sumhigh=0.0;
for(k=(i-InpSlowing+1); k<=i; k++)
{
n = i-k とする。
sumlow +=((iClose(PARA,0,n) * iClose(PARA_Ref,0,n))-ExtLowesBuffer[k]); // オリジナル: sumlow +=(close[k]-ExtLowesBuffer[k]);
sumhigh+=(ExtHighesBuffer[k]-ExtLowesBuffer[k]);
}
if(sumhigh==0.0)
ExtMainBuffer[i]=100.0;
さもなくば
ExtMainBuffer[i]=sumlow/sumhigh*100.0;
}
//--- 信号
pos=InpDPeriod-1。
if(pos+1<prev_calculated)
pos=prev_calculated-2;
さもなくば
{
for(i=0; i<pos; i++)
ExtSignalBuffer[i]=0.
}
for(i=pos; i<rate_total && !IsStopped(); i++)
{
double sum=0.0;
for(k=0; k<InpDPeriod; k++)
sum+=ExtMainBuffer[i-k];
ExtSignalBuffer[i]=sum/InpDPeriod;
}
//--- OnCalculateが終了しました。新しい prev_calculated を返す。
return(rates_total);
}
//+------------------------------------------------------------------+
 
ロジックを失うことなく修正できますが、8小節目、あるいは9小節目にも矢印が描画されます(ただし再描画はせず、左シグナルもなし)。このように必要です。つまり、新しい新鮮な矢印は9本目のバーになります。また、オープニングのディレイも9小節になります。
 
Nikolay Ivanov #:

理解してもらえるとは思っていません、同じような悩みを持つお客様がいて、1年間説明できませんでした、違うインジケーターもありましたが、のぞき見の装置もありました。彼は頭がいいように見えるが、どうやら利益への渇望が彼の論理と思考を狂わせてしまったようだ......。彼はやがて、大金を空にしたときにすべてを悟った。どうしたらいいんだろう・・・リセットしたらインジケーターが動かなくなるし。リセットすると右の矢印だけ残るが、履歴では...。このような指標をたくさん見てきました。

私はプログラマーではありませんが、新しいローソクの出現で矢印が修正できない理由がまだ理解できません。

世の中にはリクロスを搭載したインジケーターが溢れていますが、そのどれにも問題なく対応しています矢印は設定されたクロスオーバーに沿って動き、振動はない。

どれも同じコードで...

ファイル:
02.png  15 kb
 
asdkika1 #:

やりたいことを書き出す...ポイント・バイ・ポイント

 
anrei2002 #:

私はプログラマーではありませんが、私はまだ新しいローソクの出現で矢印を修正することができない理由を理解していないのですか?

世の中にはリクロスを搭載したインジケーターがたくさんありますが、そのどれにも問題なく対応しています矢印は設定されたクロスオーバーに沿って動き、振動はない。

どれも同じコードです。

通常のリロールは、シグナルバー(矢印のある部分)がシグナルの計算に関与しており、インデックスが0になる場合がある...。つまり、現在のバー...1ティックごとに再描画され、それぞれ、信号も再描画される場合があります...

しかし、0本目の小節に加えて、-1 -2 -3 -4 -5 -6 -7を使う...マイナス8本目はどこから来るのだろう?0本目のバーまで使うのはまずいし、マイナスのインデックスを持つバーは単純に許せない...。

上に直し方を書きましたが...。それはあなたが8バーの右側に信号を待っている場合、それは大丈夫でしょう、矢印は常に9バーが遅くなるとは思わない、あなたはそれをしたいですか?

 
MakarFX #:

やりたいことを書き出す...ポイント・バイ・ポイント

2組の掛け算からストキャスティックを計算する。
標準のストキャスティクス・インディケータを変更しただけです。
入力データ(マークされた行)。
OnCalculateを使ったことがないのですが、どうやらここに犬が埋まっているようです。
動作しない - 原因がわからない。
をしないようにと願っていました。
自分で設計し直す必要がないようにしたいですね。
 
Nikolay Ivanov #:

通常のオーバーシュートは、シグナルバー自体(矢印のある部分)がシグナル出現の計算に関与しており、インデックスが0になることもある...。それが現在のバー...1ティックごとに再描画され、その結果、信号も再描画されることがあります...

しかし、0本目の小節に加えて、-1 -2 -3 -4 -5 -6 -7を使う...マイナス8本目はどこから来るのだろう?0本目のバーまで使うのは良くないし、マイナスのインデックスを持つバーも許せない...。

上に直し方を書きましたが...。それはあなたが8バーの右側に信号を待っている場合は、すべてがうまくいくだろう、矢印は常に9バーが遅くなるとは思わない、あなたはそれを必要とするのでしょうか?

そんなインジケーターの例をもう一つご紹介しましょう

グラフの矢印に加え、地下の線の交点に丸を付けている。

そして、円は、矢印とは対照的に、線の交点の背後に厳然と存在するのです余分な円はありません。

なぜ矢がないのですか?

ファイル:
03.png  98 kb
EATA__Alert.mq4  20 kb
 
anrei2002 #:

この指標のもう一つの例を紹介しましょう

グラフの矢印に加え、地下の線の交点に丸を付けています。

そして、丸は矢印と違って、線の交点の後ろに厳然とあるのです余分な円はありません。

なぜ、矢印がおかしいのか?

このインジケーターをテスターで動かし、加速度的に変化するビジュアライゼーションのラインと円を観察してください...それでも理解できないのであれば、他にどう説明すればいいのか分かりませんが...。

 
asdkika1 #:
2組の掛け算からの 確率計算。
標準のストキャスティクス・インディケータを変更しただけです。
入力データ(マークされた行)。
OnCalculateを使ったことがないのですが、ここが問題なのでしょうか。
動作しない - 原因がわからない。
をしないようにと願っていました。
自分でやり直す必要はないと思っていたのですが、とても簡単なことなのですね。

何を倍増させる?オープン?閉じる?ストッホ?