[ARCHIVE!] フォーラムを散らかさないように、どんなルーキーの質問でも。プロフェッショナルは、通り過ぎないでください。あなたなしではどこにも行けない - 4. - ページ 501

 
Roman.:

"異なるf関数で同じデータが出ないように "したい同じマスクを2つ以上の関数で計算するのは合理的 ではないと思います。一度計算すればそれで済むので楽です。なぜ、このような無駄なリソースが必要なのでしょうか?

ドキュメントに書いてあるとおりにして、車輪の再発明はしないでください。

このサイクルと何か関係があるのでしょうか?

 for(int i=1;i<=Bars;i++)
   {
      double i_maFast1 = iMA(Symbol(),i_TF,i_maFastPeriod,i_maFastShift,i_maFastMethod,0,i);      // Вычисляем быстрые скользящие..
      double i_maFast2 = iMA(Symbol(),i_TF,i_maFastPeriod,i_maFastShift,i_maFastMethod,0,i+1);    //..средние
      double i_maSlow1 = iMA(Symbol(),i_TF,i_maSlowPeriod,i_maSlowShift,i_maSlowMethod,0,i);      // Вычисляем медленные скользящие..
      double i_maSlow2 = iMA(Symbol(),i_TF,i_maSlowPeriod,i_maSlowShift,i_maSlowMethod,0,i+1);    //..средние
      double stochD1 = iStochastic(Symbol(),i_TF,i_stoch_D,i_stoch_K,i_stoch_slowing,0,0,1,i);     // Вычисляем значения сигнальной линии..
      double stochD2 = iStochastic(Symbol(),i_TF,i_stoch_D,i_stoch_K,i_stoch_slowing,0,0,1,i+1);   //..стохастика
      double stochK1 = iStochastic(Symbol(),i_TF,i_stoch_D,i_stoch_K,i_stoch_slowing,0,0,0,i);     // Вычисляем значения главной линии..
      double stochK2 = iStochastic(Symbol(),i_TF,i_stoch_D,i_stoch_K,i_stoch_slowing,0,0,0,i+1);   //..стохастика
   }

自分で手順を踏んで、終了したらどうなるのか、次はどうするのか。 ナンセンスなんです。

チュートリアルのように行います。 この取引基準の定義にあるすべての取引シグナルを 直列に(別の関数でラップし、これらの取引基準が機能するかどうかをチェックするときにそれらを使って作業できます)、次にそれらの仕事のための条件を指定します。

周期については、指標となるパラメーターの交点を確認するためです。ここでは、すべて初歩的なことなのです。読んでみて、思ったとおりのことが書かれています。

教科書では、https://book.mql4.com/ru/build/conditions すべてが束になっている。MACDとストキャスティクスは1つの関数で済むからいらないよ。

実際には、リンク内のすべての指標値を適切な関数に転送する必要があります。なぜダメなのか?これは論理的な話です。

 
TarasBY:
伝えること」と「描くこと」-TWO BIG DIFFERENCES!!! :))

もう、わけがわからなくなってきました。ここでは3つの機能を紹介し、それぞれが特定のインジケーターの信号を受信します。

//+---------------------------------------------------------------------------------------+
//| Проверка пересечения скользящих средних                                               |
//+---------------------------------------------------------------------------------------+
int GetCrossingMa(double& i_maFast1, double& i_maFast2, double& i_maSlow1, double& i_maSlow2)
{
      if ((i_maFast2<i_maSlow2) && (i_maFast1>i_maSlow1))             // Если быстрая скользящая пересекла медленную снизу вверх..
      return(CROSSINGTOUP);                                           //.. значит, - пересечение вверх
                                                 
      if ((i_maFast2>i_maSlow2) && (i_maFast1<i_maSlow1))             // Если быстрая скользящая средняя пересекла медленную сверху вниз..
      return(CROSSINGTODOWN);                                         //..значит, - пересечение вниз
 
   return(CROSSINGWAIT);                                              // Ожидаем пересечения
}

//+---------------------------------------------------------------------------------------+
//| Получение сигнала от Стохастика                                                       |
//+---------------------------------------------------------------------------------------+
int GetStochSignal(double& stochD1, double& stochD2, double& stochK1, double& stochK2)
{
      if((stochD2<stochK2) && (stochD1>stochK1))                     // Если сигнальная линия пересекла главную снизу вверх..
      return(CROSSINGTOUP);                                          //..значит, - пересечение вверх
      if((stochD2>stochK2) && (stochD1<stochK1))                     // Если сигнальная линия пересекла главную сверху вниз..
      return(CROSSINGTODOWN);                                        // ..значит, - пересечение вниз
   return(CROSSINGWAIT);                                             // Ожидаем пересечения
}

//+---------------------------------------------------------------------------------------+
//| Получение сигнала от Моментума                                                        |
//+---------------------------------------------------------------------------------------+
void GetMomentumSignal()
{
   double momentum = iMomentum(Symbol(),i_TF,i_momPeriod,0,0);
}

全指標からの総合信号を受信し、売買の 判断を行う機能。

//+---------------------------------------------------------------------------------------+
//| Получение общего сигнала для входа в рынок                                            |
//+---------------------------------------------------------------------------------------+
int GetSignal()
{
   for(int i=1;i<=Bars;i++)
   {
      double i_maFast1 = iMA(Symbol(),i_TF,i_maFastPeriod,i_maFastShift,i_maFastMethod,0,i);      // Вычисляем быстрые скользящие..
      double i_maFast2 = iMA(Symbol(),i_TF,i_maFastPeriod,i_maFastShift,i_maFastMethod,0,i+1);    //..средние
      double i_maSlow1 = iMA(Symbol(),i_TF,i_maSlowPeriod,i_maSlowShift,i_maSlowMethod,0,i);      // Вычисляем медленные скользящие..
      double i_maSlow2 = iMA(Symbol(),i_TF,i_maSlowPeriod,i_maSlowShift,i_maSlowMethod,0,i+1);    //..средние
      double stochD1 = iStochastic(Symbol(),i_TF,i_stoch_D,i_stoch_K,i_stoch_slowing,0,0,1,i);     // Вычисляем значения сигнальной линии..
      double stochD2 = iStochastic(Symbol(),i_TF,i_stoch_D,i_stoch_K,i_stoch_slowing,0,0,1,i+1);   //..стохастика
      double stochK1 = iStochastic(Symbol(),i_TF,i_stoch_D,i_stoch_K,i_stoch_slowing,0,0,0,i);     // Вычисляем значения главной линии..
      double stochK2 = iStochastic(Symbol(),i_TF,i_stoch_D,i_stoch_K,i_stoch_slowing,0,0,0,i+1);   //..стохастика
   }
      if( GetCrossingMa(i_maFast1, i_maFast2, i_maSlow1, i_maSlow2)==CROSSINGTOUP || i_maFast1>i_maSlow1 )
      return(SIGNAL_BUY);
}

これは一般的な信号を受け取るメイン関数です。ここでは、もちろん、すべてのバーを通過するループを通してインデックスの値を取得します...そして、得られた値は、これらの値が必要とされる適切な関数、すなわち関数に参照渡しされる。

int GetCrossingMa(double& i_maFast1, double& i_maFast2, double& i_maSlow1, double& i_maSlow2).

int GetStochSignal(double& stochD1, double& stochD2, double& stochK1, double& stochK2)

void GetMomentumSignal()も原理的には置くことができる。

このように、指標の計算はすべて、信号を得るという一大機能に集約されることになる。ここでは、すべてが論理的です。

 

チャートに貼り付けた直後、プログラムはinit()関数を開始します。クライアント端末の起動ヒストリカルデータの ロード 後、シンボルやチャート期間の変更後、MetaEditorでのプログラムの再コンパイル後、EAやカスタムインジケータの設定ウィンドウからの入力パラメータ変更後、付属のAdvisorや Custom indicatorの 関数init() が直ちに 開始 されるようになっています。Expert Advisor はアカウント変更後にも初期化されます。

その仕組みについて教えてください。バックグラウンドで、あるいは何らかの方法でこれを追跡することができるのでしょうか?または、インジケータ内のinit関数、私は長いアイドル時間後に端末を起動すると、まったく起動しませんか?

 
fore-x:

チャートに貼り付けた直後、プログラムはinit()関数を開始します。クライアント端末の起動ヒストリカルデータの ロード 後、シンボルやチャート期間の変更後、MetaEditorでのプログラムの再コンパイル後、EAやカスタムインジケータの設定ウィンドウからの入力パラメータ変更後、付属のAdvisorや Custom indicatorの 関数init() が直ちに 開始 されるようになっています。Expert Advisor はアカウント変更後にも初期化されます。

その仕組みについて教えてください。バックグラウンドで、あるいは何らかの方法でこれを追跡することができるのでしょうか?または、長いアイドル時間後の端末の起動時にインジケータでinit関数が全く起動しないのでしょうか?

init 関数は、EAの実行中ずっと変更されることのないデータを保存するためのものです。これは、プログラムがロードされた後に一度だけ計算され、それ以上の再計算が必要ないデータである場合があります。私はこのように理解しています。

また、例えば新しいバーが 来るたびに変数の値を再計算する必要がある場合、init 関数では再計算されないので、そのような変数を宣言するべきではありません。

わかりやすくするために、initで 宣言できること、宣言すべきことを説明します。

   Tick = MarketInfo(Symbol(), MODE_TICKSIZE);                         // минимальный тик    
   Spread = ND(MarketInfo(Symbol(), MODE_SPREAD)*Point);                 // текущий спрэд
   StopLevel = ND(MarketInfo(Symbol(), MODE_STOPLEVEL)*Point);  // текущий уровень стопов
   MinLot = MarketInfo(Symbol(), MODE_MINLOT);    // минимальный разрешенный объем сделки
   MaxLot = MarketInfo(Symbol(), MODE_MAXLOT);   // максимальный разрешенный объем сделки
   LotStep = MarketInfo(Symbol(), MODE_LOTSTEP);          // шаг приращения объема сделки

これは市場からのデータ収集であり、このデータは変更されない。Spread 変数の問題ですが、Spreadが固定でないなら、別の関数にした方が良いですね。

 
hoz:

init 関数は、EAのライフタイム中に変更されることのないデータを保存するために使用されます...

あなたは再び、オフトピックに答えている -init()関数は履歴データを ロードした 後に開始されます(これはExpert Advisorsにのみ適用され、指標には 適用されません) - あなたはそれをどのように(私はそれを感じたい)意味するのでしょうか?


パスでポーンを取る - そういうルールがあるのは知っているが、どう適用すればいいのかわからない(明確になっている)?

 
上記のように理解した上で回答しています。あなたの視点がよくわからなかった。もしかしたら、誰かがやってくれるかもしれません。
 

私はローソク足の組み合わせを持っていて、異なる時間スケールで動作するようにしたいのですが、助けてください。例として

if(iHigh("EURUSD",PERIOD_M5,1)>iLow("EURUSD",PERIOD_M5,1)+8*kio*Point)とする。

{

go_s=trueとした。

}

iHigh, iLow, iOpenなどの組み合わせでバインドできると思ったのですが、M5でテストするとある結果を示し、他のタイムフレームでは別の結果を示します。何が間違っているのか、教えてください。ありがとうございました。

 
hoz:

...

教科書https://book.mql4.com/ru/build/conditions が束になっている。MACDとストキャスティクスが一つの機能で、そのように必要ないのです。

そして実際、リンクによるインジケータの値はすべて適切な関数に渡されるべきものである。なぜダメなのか?これは論理的な話です。

したがって、 指標の計算はすべて、信号を得るための1つの主要なf関数に なることがわかる。 すべてに意味がある。

申し訳ありませんが、まだ食物連鎖の最前線にいらっしゃるようで、まさに「すべてが論理的」なところですね。:-)

STUDY BOOKとDOCIみたいにして、別々の関数で包んで、その結果で売買基準を得る。

チュートリアルでは、一度にすべてを結果に登録しますが、f-i-tionsを別々に登録し、結果はチュートリアルのように描画されます。ここでは、ループや参照によるパラメータ値の転送は必要ありません

P.S. そして一般的には、まずコードエクスポを分解します - チュートリアルのすべてとkodobaseのいくつか - ちょうどすべてが所定の位置に落ちる。

 
fore-x:

チャートに貼り付けた直後、プログラムはinit()関数を開始します。クライアント端末の起動ヒストリカルデータのロード 後、シンボルやチャート期間の変更後、MetaEditorでのプログラムの再コンパイル後、EAやカスタムインディケータの設定ウィンドウからの入力パラメータ変更後、付属のAdvisorや カスタムインディケータの 関数init() がすぐに開始 されます。Expert Advisor はアカウント変更後にも初期化されます。

その仕組みについて教えてください。バックグラウンドで、あるいは何らかの方法でこれを追跡することができるのでしょうか?あるいは、インジケーターのinit機能で、長いアイドル時間の後に端末を起動すると、全く起動しなくなるのでは?

何がしたいのかよくわからない。init()の説明の中で、赤色で強調されている「ポイント」がありますが、これは正しいとは言えません。例えば、クライアント端末の起動には履歴データの読み込みが伴いますが、「読み込み」という言葉を強調するのは誤りで、初期化を開始する処理ではありません。

そして、人生のすべてのものに触れることはできない。せいぜい - 熟考することだ。:)) 初期化処理を確定したい、つまり init() 関数を起動したい - この関数の中で通知行を表示したい。

 
hoz:

今、ちょっと混乱しているんです。ここでは3つの機能を紹介し、それぞれが特定のインジケーターの信号を受信します。

全指標からの総合信号を受信し、売買の 判断を行う機能。

これは一般的なシグナルを受け取るメイン関数です。ここでは、もちろんすべてのバーを通過するループを通してインデックスの値を取得します。そして、得られた値は、これらの値が必要とされる適切な関数、すなわち関数に参照渡しされる。

int GetCrossingMa(double& i_maFast1, double& i_maFast2, double& i_maSlow1, double& i_maSlow2).

int GetStochSignal(double& stochD1, double& stochD2, double& stochK1, double& stochK2)

void GetMomentumSignal()も原理的には置くことができる。

このように、指標の計算はすべて、信号を得るという一大機能に集約されることになる。この場合、すべてが論理的である...

ビクター!論理はあっても、知識が足りない。1つ目は、あきらめなければ、教科書よりも先に進むことができますし、2つ目に「勝つ」ためには、まだ同じ(教科書の)ところから始めるべきでしょう。まだ論理的なコード構造を構築する準備ができていないのであれば、アルファベット順に戻してください。
P.S. あなたのコードで「目に留まったもの」。

関数GetSignal()において、2行の交差を探すためにfor ループを使ってもよいのですが、個人的な好みもありますが、while ループを使ったほうがよいでしょう。そもそも、今言ったことを実行させるためには、「実行は赦されない」のように括弧を動かす必要があるのです。なぜか、この(結果)関数には、GetStochSignal()とGetMomentumSignal()という2つの関数の結果が欠けています。

関数 GetCrossingMa() および GetStochSignal() では、パラメータを参照渡しする意味がありません。なぜなら、関数内のこれらの変数がその値を変化させるなら、それは理にかなっているからです。

void GetMomentumSignal()関数はNOTHINGを返します。

外から見るほうが悪い」のは認めますが......。:)))