コーディングの方法は? - ページ 301

 

Mladenさん、こんにちは。

説明ありがとうございます、しかし、最初のクローズドバーの値とはどういう意味ですか?最初のクローズドバーの値なのか、現在のバーなのか、それ以降なのか?また、current+0やcurrent+1の意味についてはどうでしょうか?

よろしくお願いします。

テランス

mladen:
テランス

MODE_MAINは、ストキャスティクスラインの値を読み込むという意味です。MODE_SIGNALはストキャスティックシグナルラインの値を読み込むということです。

SHIFTについては、どのインディケータでも(カスタムインディケータでも)同じです。例えば、SHIFT=0なら現在のバー、SHIFT=1なら最初のクローズドバーの値、といった具合にね。
 

...

テランス

現在のバーは、定義上、まだクローズドバーではありません。

現在のバーの前の最初のバーが、最初のクローズドバーです。

tkuan77:
Mladenさん、こんにちは。

説明ありがとうございます、しかし、最初のクローズドバーの値とはどういう意味ですか?最初のクローズドバーの値なのか、現在のバーの値なのか、それともそれ以降なのか?また、current+0やcurrent+1の意味はどうなのでしょうか?

よろしくお願いします。

テランス
 

ムラデンさん、こんにちは。

ということでいいのでしょうか。

current+0は値0と同じです。

current+1は値1と同じです。

current+2は値2と同じです。

ということでよろしいでしょうか。

iStochastic(NULL, 0, 3, 3, 3, MODE_SMMA, 0, MODE_SIGNAL, Current + 1); は iStochastic(NULL, 0, 3, 3, 3, MODE_SMMA, 0, MODE_SIGNAL, 1) と同じ意味です。

ということでいいのでしょうか?

回答

テランス

mladen:
Terrance

現在のバーは、定義上、まだクローズドバーではありません。

現在のバーの前の最初のバーが、最初のクローズドバーです。
 

...

テランス

iStochastic(NULL, 0, 3, 3, 3, MODE_SMMA, 0, MODE_SIGNAL,0); は現在です。

iStochastic(NULL, 0, 3, 3, 3, MODE_SMMA, 0, MODE_SIGNAL,1); は最初に閉じた(前の)ものです。

...

...

iStochastic(NULL, 0, 3, 3, 3, MODE_SMMA, 0, MODE_SIGNAL,Bars-1); はチャート上で一番古いものです。

PS: この投稿では、バーに関するより多くの情報を提供しています :https://www.mql5.com/en/forum/173124

tkuan77:
こんにちは、Mladen。

ということでいいのでしょうか。

current+0は、値0と同じです。

current+1は、値1と同じです。

current+2は値2と同じです。

といった具合に、SHIFTの場合は?

iStochastic(NULL, 0, 3, 3, 3, MODE_SMMA, 0, MODE_SIGNAL, Current + 1); は iStochastic(NULL, 0, 3, 3, 3, MODE_SMMA, 0, MODE_SIGNAL, 1) と同じ意味合いです。

ということでいいのでしょうか?

回答

テランス
 

Mladenさん、こんにちは。

いつも素晴らしい助けをありがとうございます

よろしくお願いします。

テランス

mladen:
テランス

iStochastic(NULL, 0, 3, 3, 3, MODE_SMMA, 0, MODE_SIGNAL,0); は、現在の

iStochastic(NULL, 0, 3, 3, 3, MODE_SMMA, 0, MODE_SIGNAL,1); は最初に閉じた(前の)状態です。

...

...

iStochastic(NULL, 0, 3, 3, 3, MODE_SMMA, 0, MODE_SIGNAL,Bars-1); はチャート上で最も古いものです。

PS: この投稿で、バーに関するより多くの情報を得ることができます :https://www.mql5.com/en/forum/173124
 

いくつかの問題

皆さん、こんにちは。

私のコードをテストして、ほぼ完成しました。いくつか質問があるのですが、教えていただけないでしょうか?

私はこれをint init()に入れました。

if (Bars < D1FastMAPeriod || Bars < D1SlowMAPeriod)

{

Alert("ERROR- INSUFFICIENT BARS TO CALCULATE SMA ON DAILY CHART");

return(0);

}

SlowMAPeriodは200です。2009年1月1日からバックテスト すると、2008年から200SMAを計算するのに十分なバーがあることがチャート上ではっきりわかるにもかかわらず、このエラーが発生します。何か見落としているのでしょうか?

2.2. H4 チャートで取引していますが、日足のトレンドの方向にしか取引していません。以下のコードを使用して値を描画します。

SlowMACurrent = iMA(Symbol(), PERIOD_D1, D1SlowMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 1);

FastMACurrent = iMA(Symbol(), PERIOD_D1, D1FastMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 1) とします。

そして、ロングポジションを検索しているときに、使って参照しています。

if (FastMACurrent > SlowMACurrent && ... etc ... ) とします。

これは、私の取引を適切にフィルタリングしていないように見えるので、これは正しいのでしょうか?

3.3. H4チャートでトレンドフィルターを使い、価格が過去120期間の高値を超えた時(そして120期間の安値を超えたまま)だけロングポジションを取るようにしています。私はこのコードを使っています。

Donchian_Low = Low;

Donchian_High = High;

静的ブールUpTrend = FALSE。

静的ブールDownTrend = FALSE。

if (Ask > Donchian_High) {UpTrend = TRUE; DownTrend = FALSE;}; if (Bid < Donchian_High) {UpTrend = FALSE; DownTrend = FALSE

if (Bid < Donchian_Low) {UpTrend = FALSE; DownTrend = TRUE;}.

それから、以下のようなコードを使っています(ロングポジションの場合と言っています)。

if (FastMACurrent > SlowMACurrent && UpTrend == TRUE && DownTrend == FALSE ... etc ... ).

しかし、120ピリオドのドンチャンネルに対してバックテストしたチャートをチェックすると、結びつかないので、うまくいっていないようです。何かアイデアはありますか?

よろしくお願いします。

 

...

1.start() 数の最初に配置する。Barsのようなデータの場合、initは信頼性が低い

2.FastMACurrent > SlowMACurrentのとき、その条件は真になります。これはあなたが欲しかったものですか、それともクロスを探しているのでしょうか?

3.2.と関連しているのでしょう。この方法では可能性が多すぎるため、注文を入れることができる条件を「狭める」必要があります。

crsnape@btinternet.com:
皆さん、こんにちは。

私のコードをテストしたところ、ほぼその通りになりました。いくつか質問があるのですが、ご教授願えれば幸いです。

私はこれをint init()に書きました。

if (Bars < D1FastMAPeriod || Bars < D1SlowMAPeriod)

{

Alert("ERROR- INSUFFICIENT BARS TO CALCULATE SMA ON DAILY CHART");

return(0);

}

SlowMAPeriodは200です。2009年1月1日からバックテストすると、2008年から200SMAを計算するのに十分なバーがあることがチャート上ではっきりわかるにもかかわらず、このエラーが発生します。何か見落としているのでしょうか?

2.2. H4 チャートで取引していますが、日足のトレンドの方向にしか取引していません。以下のコードを使用して値を描画します。

SlowMACurrent = iMA(Symbol(), PERIOD_D1, D1SlowMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 1);

FastMACurrent = iMA(Symbol(), PERIOD_D1, D1FastMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 1) とします。

そして、ロングポジションを検索しているときに、使って参照しています。

if (FastMACurrent > SlowMACurrent && ... etc ... ) とします。

これは、私の取引を適切にフィルタリングしていないように見えるので、これは正しいのでしょうか?

3.3. H4チャートでトレンドフィルターを使い、価格が過去120期間の高値を超えた時(そして120期間の安値を超えたまま)だけロングポジションを取るようにしています。私はこのコードを使っています。

Donchian_Low = Low;

Donchian_High = High;

静的ブールUpTrend = FALSE。

静的ブールDownTrend = FALSE。

if (Ask > Donchian_High) {UpTrend = TRUE; DownTrend = FALSE;}; if (Bid < Donchian_High) {UpTrend = FALSE; DownTrend = FALSE

if (Bid < Donchian_Low) {UpTrend = FALSE; DownTrend = TRUE;}.

それから、以下のようなコードを使っています(ロングポジションの場合と言っています)。

if (FastMACurrent > SlowMACurrent && UpTrend == TRUE && DownTrend == FALSE ... etc ... ).

しかし、120ピリオドのドンチャンネルに対してバックテストしたチャートをチェックすると、結びつかないので、うまくいっていないようです。何かアイデアはありますか?

ありがとうございました。
 

mladenさん、こんにちは。

1.OKです。

2.はい、その通りです。私はクロスからエントリーしたくないのです。ただ、短期チャートでのロング/ショートフィルターとして使用しています。例えば、日足チャートで高速MAが低速MAの上にある場合、H4チャートでのロングポジションのみを考慮するようにしたいのです。それで、私はこれを正しくコード化したと思う?

3.3. 何を言っているのかわからないのですが、init start()の下に以下のように書いています。

静的なブールUpTrend = FALSE。

静的ブールDownTrendは= FALSE。

if (Ask > Donchian_High) {UpTrend = TRUE; DownTrend = FALSE;}; if (Bid < Donchian_High) {UpTrend = TRUE; DownTrend = FALSE;}.

if (Bid < Donchian_Low) {UpTrend = FALSE; DownTrend = TRUE;}.

静的なbool変数を一番最初に置いてグローバルにした方がいいのでしょうか?これが原因なのでしょうか?

 

...

3.Ask Donchian_Low(ほとんどの場合そうです) の場合はどうなるのでしょうか。静的変数は、それがもう有効でないにもかかわらず、まだ「古い」状態を示しています (それは状態を「継承」しており、そうすることで、もうそうでなくても、それが上または下であるという合図をしているのです)。それが問題の原因であるかどうか確認して ください。

crsnape@btinternet.com:
mladenさん、こんにちは。

1.OKを押してください。

2.はい、その通りです。私はクロスからエントリーしたいわけではなく、短期チャートでのロング/ショートフィルターとして使用しています。例えば、日足チャートで高速MAが低速MAの上にある場合、H4チャートでのロングポジションのみを考慮させたいのです。それで、私はこれを正しくコード化したと思う?

3.3. 何を言っているのかわからないのですが、init start()の下に以下のように書いています。

静的なブールUpTrend = FALSE。

静的ブールDownTrendは= FALSE。

if (Ask > Donchian_High) {UpTrend = TRUE; DownTrend = FALSE;}; if (Bid < Donchian_High) {UpTrend = TRUE; DownTrend = FALSE;}.

if (Bid < Donchian_Low) {UpTrend = FALSE; DownTrend = TRUE;}.

static bool 変数を一番最初に置いて、グローバルにした方がいいのでしょうか?これが原因なのでしょうか?
 

いいこと言うね。それについて調べてみます。

関数についての 質問ですが、関数の中で関数を呼び出すことは可能ですか?例:こんな関数があります。

文字列 GetWinLossPreviousShort (int LastOpenTicket, 文字列 WinLossPreviousShort)

{

もし(...等

その後、私はそれを呼び出します。

double GetLotsLong (int LowRisk, int HighRisk, double SLDistanceLong, string GetWinLossPreviousShort)