[ARCHIVE]フォーラムを乱立させないために、どんなルーキーの質問でも。プロフェッショナルの皆さん、通り過ぎないでください。あなたなしではどこにも行けない - 5. - ページ 301

 
laveosa:

すべてまったく同じ方法で、何度もやっているのに、まだ穴があるんです。
では、あなたの住居にあるチェブラーシカを探してみてください。確かに彼のおちゃめなところ;)
 
laveosa.,keep the history up to yesterday eurusdm1 download viaimport in quotes.
ファイル:
eurusd1.zip  548 kb
 
あるインジケーターを確認しようと、チャートに数字を入れたのですが、変わりません、別の言い方をしてみますと、添付のインジケーターでジグザグやアラートやプリントに立つクロスとして価格を固定したいのですが、接続時にフリーズしてしまいます。
ファイル:
 

専門家に質問!?

私はよくEAにウィザードを搭載しています。というような繰り返しの場面でコードを「散らかさない」ようにするためです。

double maFast = iMA(NULL, 0, i_maFastPeriod, 0, i_maMethod, i_maPrice, index);
double maSlow = iMA(NULL, 0, i_maSlowPeriod, 0, i_maMethod, i_maPrice, index);

そんな繰り返しが、順当なところでしょう。別の関数を書くことで解消したかったのです。

ここからが本題です。

//+-------------------------------------------------------------------------------------+
//| Получаем машку с заданными параметрами                                              |
//+-------------------------------------------------------------------------------------+
double GetMA(double typeOfMA, int tf, int maPeriod, int maShift, int maMethod, int maApplied, int index)
{
   switch (typeOfMA)
   {
      case 1:      return (iMA(NULL, i_fastMATF, i_fastMAPeriod, i_fastMAShift, i_fastMAMethod, i_fastMAApplied, i_fastMAIndex));
      case 2:      return (iMA(NULL, i_slowMATF, i_slowMAPeriod, i_slowMAShift, i_slowMAMethod, i_slowMAApplied, i_slowMAIndex));
      case 3:      return (iMA(NULL, i_filtrMATF, i_filtrMAPeriod, i_filtrMAShift, i_filtrMAMethod, i_filtrMAApplied, i_filtrMAIndex));
   }
}
//+-------------------------------------------------------------------------------------+
//| Получаем сигнал от скользящих средних                                               |
//+-------------------------------------------------------------------------------------+
int GetStateOfMA()
{
   if (GetMA(1, i_fastMATF, i_fastMAPeriod, i_fastMAShift, i_fastMAMethod, i_fastMAApplied, i_fastMAIndex) > 
      GetMA(2, i_slowMATF, i_slowMAPeriod, i_slowMAShift, i_slowMAMethod, i_slowMAApplied, i_slowMAIndex))
      return (CROSS_UP);
}

さらに、fastMAや slowMAといった ワイプ用のグローバル変数を宣言し、関数.NETを介して参照で返すこともできます。

GetMA(double typeOfMA, int tf, int maPeriod, int maShift, int maMethod, int maApplied, int index)

このようなものが出てくるでしょう。

//+-------------------------------------------------------------------------------------+
//| Получаем машку с заданными параметрами                                              |
//+-------------------------------------------------------------------------------------+
double GetMA(double typeOfMA, int tf, int maPeriod, int maShift, int maMethod, int maApplied, int index, double& fastMA, double& slowMA)
{
   switch (typeOfMA)
   {
      case 1:      return (iMA(NULL, i_fastMATF, i_fastMAPeriod, i_fastMAShift, i_fastMAMethod, i_fastMAApplied, i_fastMAIndex));
      case 2:      return (iMA(NULL, i_slowMATF, i_slowMAPeriod, i_slowMAShift, i_slowMAMethod, i_slowMAApplied, i_slowMAIndex));
      case 3:      return (iMA(NULL, i_filtrMATF, i_filtrMAPeriod, i_filtrMAShift, i_filtrMAMethod, i_filtrMAApplied, i_filtrMAIndex));
   }
}
//+-------------------------------------------------------------------------------------+
//| Получаем сигнал от скользящих средних                                               |
//+-------------------------------------------------------------------------------------+
int GetStateOfMA()
{
   GetMA(double typeOfMA, int tf, int maPeriod, int maShift, int maMethod, int maApplied, int index, double& fastMA, double& slowMA);
   if (fastMA > slowMA)
       return (CROSS_UP);
   if (fastMA < slowMA)
       return (CROSS_DN);
   return (CROSS_NO);
}

問題はこれだ。

スイッチオペレータが遅いとどこかで聞いたか読んだことがあるのですが、この場合、EA全般の性能に影響はないのでしょうか?一般的には、どの程度遅いのでしょうか?

ここで多くのパラメータが出てきますが、Expert Advisorの動作が遅くなることはないのでしょうか?

私は生産性について書いて、考えているので、私は自分自身を理解するために、訓練によってプログラマではないとして、質問が発生し、本当に出てきません...

 

ビクター、関数呼び出しは スイッチと いうより、ブレーキに近い。速度は自分で確認することができます。ループを使ったテストコードを書いてください。コードを確認する場所です。入力時の時間を測定します。そして、出力時間との比較を行います。

スイッチ オペレーターは最速のオペレーターの一人です。コンディションを見ながら走るより早いですからね。

スイッチは、例外をデフォルトで使用する必要があります。そうすることで、不正確な条件の場合に、なぜそのコードが動作しないのかを知ることができます。

 

うーん、ドキュメントによると、caseの 定数を変数として使うことはできないみたいですね。何らかの対象定数、文字定数、文字式と書いてある。

文字列型の文字、つまり1文字(1文字以上だとコンパイラは悪態をつく)または数字を設定した場合のみ動作します。

他にはありません。
いくつかのターゲット定数、文字式、文字定数が書かれています。

 

グローバル ターミナル変数の使用について、実用例を交えて教えてください。具体的には、各Expert Advisorが自分の預かり分のみを取引し、その利益・スリッページが他のExpert AdvisorのMMに影響しないようにしたいのです。

 
Ekburg:

こんにちは

ターミナルでExpert Advisorを実行すると、「shutdown by timeout」エラーが発生する原因と解決方法を教えてください。

 
[quote=Roman.]厨房を変えろ[/quote]それが、厨房は関係ない:売り注文はEAのログにある。 もちろん、ダウンロードしたMT4配信のコードをブローカーが変更して取引方向を 修正したと考えることもできるが、それはあまりにも不謹慎ではないか、と思う。
 
ここに全コードをコピーするのではなく、プログラムコードを添付することはできますか?管理人は何を見ているのでしょうか?