if (MA5_1 > MA8_1 && MA5_0 < MA8_0) res =2;//Cross down
BarCount=Bars;
return (res);
}[/php]and you are calling it like this :
if (GetDailyTrend(1) && ...) Order = SIGBNAL_BUY;
if (GetDailyTrend(2) && ...) Order = SIGNAL_SELL;
[/php]The way it is used and called now expressions GetDailyTrend(1) and GetDailyTrend(2) are always true (in metatrader any value not equal to 0 is considered a true.
_________________________
Redefine the GetDailyTrend() to something like this:
[php]int GetDailyTrend ()
{
int res = 0;
double MA5_1 = double iMA(NULL,1440,5,0,1,0,1);
double MA5_0 = double iMA(NULL,1440,5,0,1,0,0);
double MA8_1 = double iMA(NULL,1440,8,0,1,0,1);
double MA8_0 = double iMA(NULL,1440,8,0,1,0,0);
if (MA5_1 MA8_0) res =1;//Cross up
if (MA5_1 > MA8_1 && MA5_0 < MA8_0) res =2;//Cross down
return (res);
}
And then use it this way :
[php]if (GetDailyTrend()==1 && ...) Order = SIGBNAL_BUY;
if (GetDailyTrend()==2 && ...) Order = SIGNAL_SELL;
DTosc メッセージ...
Mladenです。
Expers Folderに "incorrect start position 10148 for Array Maximumfunction"というメッセージが表示されるのですが、インジケータは完全に動作しているようです。
何か説明があれば教えてください。
よろしくお願いします。
ValeoFX
どのインジケータのことかわかりませんが、通常は次のようなものです。 Limitが決定されている箇所を探し、次のようなものに変更します。
この式の2番目のパラメータ(Bars-1)は、この場合、制限がチャート上のバーの数より 大きくないことを保証しています。
しかし、すでにお気づきのように、これは「良性の」エラーです。一度だけ発生し(インジケータをロードしたとき、またはタイムフレームを変更したとき)、他のエラーとは異なり、インジケータの計算を停止しないため、残りのすべての計算は正しく行われ、値は適切に算出されます。
よろしくお願いします。
mladen
Mladenです。
Expers Folderに "incorrect start position 10148 for Array Maximum function "というメッセージが出ますが、インジケータは完全に動作しているようです。
何か説明がありますか?
よろしくお願いします。ありがとうございます・・・。
ValeoFX
どのインジケータのことかはわかりませんが、通常は次のようなものです。 Limitが決定されている場所を探して、次のようなものに変更します。
この式の2番目のパラメータ(Bars-1)は、この場合、制限がチャート上のバーの数より大きくないことを保証するものです。
しかし、すでにお気づきのように、これは「良性の」エラーです。一度だけ発生し(インジケータをロードしたとき、またはタイムフレームを変更したとき)、他のエラーとは異なり、インジケータの計算を停止しないため、残りのすべての計算は正しく行われ、値は適切に計算されています。
よろしくお願いします。
mladen======================
Mladenさん、すみません。"Title "ウィンドウ(DTOsc)にインディケータの名前を入れていたので、もう一度繰り返そうとは思いませんでした。しかし、説明ありがとうございます - 私はすぐにそれを見ていきます。
124行目に、見つけました。
limit = MathMax(limit,MathMin(Bars,iCustom(NULL,timeFrame,IndicatorFileName, "getBarsCount",0,0)*timeFrame/Period()));
ご指摘の内容と異なるので、修正するためにどうしたらよいか、詳しく教えていただけませんか?
よろしくお願いします。
ValeoFX
メッセージのサブタイトルに注意を払いませんでした。
とにかく、この投稿にあるもの :https://www.mql5.com/en/forum/general を使っているのなら、そのメッセージは出ています。
一方、この投稿のもの :https://www.mql5.com/en/forum/general(新しい方) を使っている場合は、そのメッセージは表示されません。
最初の投稿のものは、いつ作ったか覚えていませんが、その後、いくつかのコーディングスタイルを変更しました(そのため、エラーメッセージが表示されなくなりました)。その後、私は単純に、万が一のエラーのためにスペースを残さないことにしました。そのため、制限を決定する際に「安全確認」を行いました。
____________________________________
追記:この行はマルチタイムフレームモードで動作します。それは、現在の時間枠で必要なバーの正確な数を再計算できるようにするために、ターゲット時間枠で何本のバーが変化したかを「尋ねる」ものです。したがって、この行はマルチタイムフレームモードのときのみ有効です。
mladenです。
私はコーディングの初心者です。しかも難しい。でも、CodersGuruの本だけでEAを作るとなると、ちょっと物足りないかなぁ...。
私の投稿183ページ参照
Tradefx1
あなたが探そうとしている日足トレンドの : それを再定義(書き換える)する必要があります。今現在はこのように書かれています。
double MA5_1 = double iMA(NULL,1440,5,0,1,0,1);
double MA5_0 = double iMA(NULL,1440,5,0,1,0,0);
double MA8_1 = double iMA(NULL,1440,8,0,1,0,1);
double MA8_0 = double iMA(NULL,1440,8,0,1,0,0);
if (MA5_1 MA8_0) res =1;//Cross up
if (MA5_1 > MA8_1 && MA5_0 < MA8_0) res =2;//Cross down
BarCount=Bars;
return (res);
}[/php]and you are calling it like this :
if (GetDailyTrend(2) && ...) Order = SIGNAL_SELL;
[/php]The way it is used and called now expressions GetDailyTrend(1) and GetDailyTrend(2) are always true (in metatrader any value not equal to 0 is considered a true.
_________________________
Redefine the GetDailyTrend() to something like this:
[php]int GetDailyTrend ()
{
int res = 0;
double MA5_1 = double iMA(NULL,1440,5,0,1,0,1);
double MA5_0 = double iMA(NULL,1440,5,0,1,0,0);
double MA8_1 = double iMA(NULL,1440,8,0,1,0,1);
double MA8_0 = double iMA(NULL,1440,8,0,1,0,0);
if (MA5_1 MA8_0) res =1;//Cross up
if (MA5_1 > MA8_1 && MA5_0 < MA8_0) res =2;//Cross down
return (res);
}
And then use it this way :
[php]if (GetDailyTrend()==1 && ...) Order = SIGBNAL_BUY;
if (GetDailyTrend()==2 && ...) Order = SIGNAL_SELL;
_________________________
本とコーディングについて : 私はいつも、コーディングを学ぶ最良の方法は、例と動作するプログラムからだと信じています。信じられないかもしれませんが、マイクロソフトの人たちは学ぶのに優れています(彼らはコードを統一的に(つまり、コードをどのように書くべきかという確固たるチームルールを持って)書いていて、とてもクリーンで、できる限り効率的に作ろうとしています)。
エリートセクションには、誰でも使える例や動くEAがたくさんあります(私はこれをお勧めしますhttps://www.mql5.com/en/forum/180383)。その理由は、すでにそのスレッドで述べたとおりで、他のEAの「枠」として簡単に使えると思います。しかし、他にも非常に便利なEAがたくさんあり、それを使って学習したり、実用的なEAを作ったりすることができます。
コーディング言語はまさに「言語」です。つまり、他の言語と同じように簡単な話なのです。コンピュータは人間と違って、あなたが言ったことに疑問を持たず、ただ実行するだけだからです(そして、時にはそれが私たちの望むものでないこともあります )そして、しばらくすると、PCとの「会話」に慣れてきて、すべてがずっと簡単になります。
念のため・・・。
adxvmaインジケータの基本的なロジックは何だろうと思っている人のために、インジケータそのものと同じくらい役に立つかもしれない、その中間ステップを紹介します。(この後にもステップがあるので、2つのインジケータを比較しないように、このステップは特に興味深いと思われる)。 見覚えのある人がいれば、答えは「イエス」です。それは、パワートレンドのインジケータ(「本物の」パワートレンド、それとして投稿・公開されているものではない - これについては、私は100%確信していない(私が「本物」から見たものは、その写真だけです)、それは確かに多くのように見える)であると思われる。ValeoFX
メッセージのサブタイトルに注意を払っていませんでした。
とにかく、もしあなたがこの投稿にあるもの :https://www.mql5.com/en/forum/general を使っているなら、そのメッセージが表示されます。
一方、この投稿のもの :https://www.mql5.com/en/forum/general(新しい方) を使っている場合は、このメッセージは表示されません。
最初の投稿のものは、いつ作ったか覚えていませんが、その後、いくつかのコーディングスタイルを変更しました(そのため、エラーメッセージが表示されなくなりました)。その後、私は単純に、万が一のエラーのためにスペースを残さないことにしました。そのため、制限を決定する際に「安全確認」を行いました。
____________________________________
追記:この行は、マルチタイムフレームモードで動作します。これは、現在の時間枠で必要なバーの正確な数を再計算できるようにするために、ターゲット時間枠で何本のバーが変化したかを「尋ねる」ものです。そのため、このラインはマルチタイムフレームモードの時のみ有効です。=========================================================
説明、どうもありがとうございました。とてもありがたく、また、コーディングの理解も深まりました。
早速、2枚目をダウンロードさせていただきます。
よろしくお願いします。
アドクスヴマ
mladenです。
Tradestationのバージョンを掲載するようにお願いするのは筋違いでしょうか?
レイ
Tradestationのインジケータをモデルとして使っているのですが、そのインジケータの中に、私が考えもせずに受け継いだエラーがあるようです。.この中でその誤差を修正しています。結果もこちらの方が良い。 この計算は、公開セクションのものにかなり近く(つまり、公開セクションのものはかなり正しいインディケータです)、99%の時間でより速いコードと、エリートセクションに投稿されたものだけに固有の余分なものがあります。ですから、以前の投稿からインジケータをダウンロードされた方は、代わりにこれらをお使いください。MultiColorMode- falseに設定すると、adxvmaの表示に1色だけが使われるようになります。
よろしくお願いします。
ムラデンレイ
ここにあります。インジケータが.
Price (close),
length (14);
vars:
av (0);
av = ADXVMA(Price, length);
Plot1(av, "Rising");
Plot2(av, "Falling");
Plot3(av, "Neutral");
Plot4(av, "ADXVMA", iff(av = av[1], GetPlotColor(3), iff(av > av[1], GetPlotColor(1), GetPlotColor(2))));
NoPlot(1);
NoPlot(2);
NoPlot(3); [/php]and the adxvma function
[php]inputs:
Price (NumericSeries),
Length (NumericSimple);
vars:
TR(0),
DI_Diff(0),
DI_Sum(0),
ma(0),
pdm(0),
mdm(0),
pdi(0),
mdi(0),
DI_Factor(0),
VI(0),
diff(0),
HHV(0),
LLV(0),
WeightDM(Length),
WeightDI(Length),
WeightDX(Length),
ChandeEMA(Length),
out(0),
j(0);
once ma=Price;
//
// in order to make it right the "pdm=0; mdm=0;" must be added (it does not
// exist in original and that is an error, tradestation inherits values fom
// a previous loop and they must be zeroed before these calculations)
//
pdm=0; mdm=0;
if(Price>Price[1]) then pdm=Price-Price[1] else mdm=Price[1]-Price;
pdm=((WeightDM-1)*pdm[1] + pdm)/WeightDM;
mdm=((WeightDM-1)*mdm[1] + mdm)/WeightDM;
TR=pdm+mdm;
if (TR>0) then begin pdi=pdm/TR; mdi=mdm/TR; endelse begin
pdi=0;
mdi=0;
end;
pdi=((WeightDI-1)*pdi[1] + pdi)/WeightDI;
mdi=((WeightDI-1)*mdi[1] + mdi)/WeightDI;
DI_Diff=pdi-mdi;
if (DI_Diff<0) then DI_Diff= -DI_Diff;
DI_Sum=pdi+mdi;
DI_Factor=0;
if (DI_Sum>0) then out=DI_Diff/DI_Sum else out=0;
out=((WeightDX-1)*out[1] + out)/WeightDX;
if (out>out[1]) then begin HHV=out; LLV=out[1]; end
else begin
HHV=out[1];
LLV=out;
end;
for j = 1 to Length-1 begin
if(out[j+1]>HHV)then HHV=out[j+1];
if(out[j+1]<LLV) then LLV=out[j+1];
end;
diff = HHV - LLV;
VI=0;
if (diff>0) then VI=(out-LLV)/diff;
ma=((ChandeEMA-VI)*ma[1]+VI*Price)/ChandeEMA;
ADXVMA = ma;
オリジナルにはなかったコメントと コードの修正を追加 しました(これが唯一の変更点です)。変数名の一部が誤解を招く : どのステップでもEMAの計算がない。これは、中間平滑化ステップで使用される平滑化移動平均であり、EMAではありません。また、計算の基本的なロジックがADXのものであっても、実際にはADXではありませんが、この「ハイブリッド」インディケータの場合には、その名前に値するほど近いことにお気づきでしょう。
よろしくお願いします。
ムラデン
mladenです。
Tradestationのバージョンを投稿するようにお願いするのは筋違いでしょうか?
レイ