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

 
こんにちは、助けてください、3つのMAが交差したときにAlert()コールを 実装するための簡単なアイデアがあります。
プログラム内の交差点についての説明。動くようでいて、思うように動かない。変数を1桁に丸めるのは、
が交差点をキャッチするようにするためです。そして、このAlert()は、手段が同じ位置にある限り、私を太鼓判で叩きます。どうすれば1回、いや5回まで呼ばれるようになるのでしょうか。
//+------------------------------------------------------------------+
//| Глобальные переменные                                  |
//+------------------------------------------------------------------+
   extern int Period_MA_Blue = 4;         // Период 4-х расчётной синей МА (4 часа)
   extern int Period_MA_Green = 13;       // Период 13-ти расчётной зеленой МА (13 часов)
   extern int Period_MA_Orange = 50;      // Период 50-ти расчётной оранжевой МА (2 дня 2 часа)
   double MA_Blue_EURUSD, MA_Green_EURUSD, MA_Orange_EURUSD;
   string SMA_Blue_EURUSD,SMA_Green_EURUSD,SMA_Orange_EURUSD;

//+------------------------------------------------------------------+
//| Начало программы                                  |
//+------------------------------------------------------------------+

int init(){return(0);}
int EURUSD()
      {
  
      if(SMA_Green_EURUSD == SMA_Orange_EURUSD && SMA_Blue_EURUSD > SMA_Orange_EURUSD)
         {
          // Если зеленая МА пересекает оранжевую МА и при этом синяя МА выше - сигнал к покупке.
          Alert("Cигнал на ПОКУПКУ паре EURUSD");
          return(11); // 11 - на первой паре сигнал на покупку.
         }
  
      if(SMA_Green_EURUSD == SMA_Orange_EURUSD && SMA_Blue_EURUSD < SMA_Orange_EURUSD)
         {
          // Если зеленая МА пересекает оранжевую МА и при этом синяя МА ниже - сигнал к продаже.
          Alert("Cигнал на ПРОДАЖУ паре EURUSD");
          return(10); // 20 - на первой паре сигнал на продажу.
         }     
      }
int start()

   {

//+------------------------------------------------------------------+
//| Блок работы с EURUSD                               |
//+------------------------------------------------------------------+
   if(EURUSD() != 11 || EURUSD() != 10)
      {
         // Если функция EURUSD() не зафиксировала ни один из сигналов, обрабатываем данные дальше.
         MA_Blue_EURUSD = iMA("EURUSD",PERIOD_H1,Period_MA_Blue,0,MODE_EMA,PRICE_CLOSE,0);
         MA_Green_EURUSD = iMA("EURUSD",PERIOD_H1,Period_MA_Green,0,MODE_EMA,PRICE_CLOSE,0);
         MA_Orange_EURUSD = iMA("EURUSD",PERIOD_H1,Period_MA_Orange,0,MODE_EMA,PRICE_CLOSE,0);
  
         SMA_Blue_EURUSD = MA_Blue_EURUSD;
     // Преобразование int в string
         SMA_Blue_EURUSD = StringSetChar(SMA_Blue_EURUSD, 6, '');     // Округление до х.хххх
         SMA_Green_EURUSD = MA_Green_EURUSD;   // Преобразование int в string
         SMA_Green_EURUSD = StringSetChar(SMA_Green_EURUSD, 6, '');   // Округление до х.хххх
         SMA_Orange_EURUSD = MA_Orange_EURUSD; // Преобразование int в string
         SMA_Orange_EURUSD = StringSetChar(SMA_Orange_EURUSD, 6, ''); // Округление до х.хххх

      }

     }

int deinit(){return(0);}




根本から間違っている場合は、交差点を追跡する方法を提案する。ありがとうございます。
 
Zherart:
こんにちは、助けてください、3つのMAが交差したときにAlert()コールを実装するための簡単なアイデアがあります。
プログラム内の交差点についての説明。動くようでいて、思うように動かない。私は、変数を1桁に丸めることで
をクリックすると、交差点をキャッチすることができます。そして、このAlert()のドラムは、手段が同じ位置にある限り、私のところに上がってくるのです。どうすれば1回、まあ最大5回まで呼ばれるようになるのか。もし根元がおかしいのであれば、交差点を追跡する方法を提案してください。ありがとうございます。

//+------------------------------------------------------------------+
//| Глобальные переменные                                  |
//+------------------------------------------------------------------+
   extern int Period_MA_Blue = 4;         // Период 4-х расчётной синей МА (4 часа)
   extern int Period_MA_Green = 13;       // Период 13-ти расчётной зеленой МА (13 часов)
   extern int Period_MA_Orange = 50;      // Период 50-ти расчётной оранжевой МА (2 дня 2 часа)
   double MA_Blue_EURUSD, MA_Green_EURUSD, MA_Orange_EURUSD;
   string SMA_Blue_EURUSD,SMA_Green_EURUSD,SMA_Orange_EURUSD;
   int БАРАБАНИТЬ = 1; // Сколько раз подавать сигнал
   int ПОКУПКА=0,ПРОДАЖА=0;
//+------------------------------------------------------------------+
//| Начало программы                                  |
//+------------------------------------------------------------------+

int init(){return(0);}
int EURUSD() 
      {
   
      if(SMA_Green_EURUSD == SMA_Orange_EURUSD && SMA_Blue_EURUSD > SMA_Orange_EURUSD)
         { 
          // Если зеленая МА пересекает оранжевую МА и при этом синяя МА выше - сигнал к покупке.
          if(ПОКУПКА<БАРАБАНИТЬ) {Alert("Cигнал на ПОКУПКУ паре EURUSD");ПОКУПКА++;}
          return(11); // 11 - на первой паре сигнал на покупку.
         }
      else ПОКУПКА=0;
      if(SMA_Green_EURUSD == SMA_Orange_EURUSD && SMA_Blue_EURUSD < SMA_Orange_EURUSD)
         { 
          // Если зеленая МА пересекает оранжевую МА и при этом синяя МА ниже - сигнал к продаже.
          if(ПРОДАЖА<БАРАБАНИТЬ) {Alert("Cигнал на ПРОДАЖУ паре EURUSD");ПРОДАЖА++;}
          return(10); // 20 - на первой паре сигнал на продажу.
         }
       else ПРОДАЖА=0;       
      }

一目でわかるように、こんなところに...。
 
セプルカ、ありがとうございます!!!試してみます。ポイントを押さえた!!!
 
私がバカなのか、端末に問題があるのか、どちらかです。EAを最適化したいのですが、EAのプロパティに「入力パラメータ」タブがありません。助けてください。
 
prom18:
私がバカなのか、端末に問題があるのか、どちらかです。EAを最適化したいのですが、EAのプロパティに「入力パラメータ」タブがありません。EAを最適化しようとしているのですが、プロパティに「入力パラメータ」タブがないのです。



https://forum.mql4.com/ru/46980/page417#702426

https://www.mql5.com/ru/forum/138609/page417#702426

 

関数のパラメータに配列を使用することは可能ですか?例えば、配列の中の情報を扱う関数を作りたい。

void Function(double Array[])
 {
  ...
 }
 
silhouette:

関数のパラメータに配列を使用することは可能ですか?例えば、配列の中の情報を扱う関数を作りたい。


チュートリアルはここで 何を言っているのでしょうか?

"

渡すべきパラメータは、呼び出すべき関数名の後に括弧で囲み、カンマで区切って列挙する。関数に渡されるパラメータの数は64個以下でなければならない。また、この関数は渡されたパラメータを使用しないこともできます。この場合、空のパラメータリストが表示されます。つまり、関数名の直後に開閉括弧が置かれます。

関数呼び出しで渡されるパラメータの数、型、順序は、関数の説明で指定された正式なパラメータの数、型、順序と一致しなければなりません(例外はデフォルトパラメータを持つ関数の呼び出しで、 数の説明と戻り値の演算 子を参照)。 このような一致がない場合、MetaEditorはエラーメッセージを表示します。定数、変数、式、 配列は、渡されたパラメータとして使用することができます。"

 
silhouette:

関数のパラメータに配列を使用することは可能ですか?例えば、配列の中の情報を扱う関数を作りたい。

これを試してみてください。

void Function(double& Array[])
 {
  ...
 }
https://docs.mql4.com/ru/basis/variables/formal
 
Sepulca:


Close - iClose, Open - iOpen, Time - iTime Volume - iVolume 等も同様です。

また、インジケータは0から7まで最大8本のラインを描くことができますhttps://docs.mql4.com/ru/customind/indicatorbuffers


価格=iL[k];ここでiLは私のiLow...以前の安値です。

とにかく、いろいろと役に立つことがわかったのですが...これ以上は掘り下げません...。

カスタムインジケータを使わずに、もっとシンプルに再描画を視覚化する方法があります。

 
Roman.:

ここで 教科書に書かれていることは?

"

渡すべきパラメータは、呼び出すべき関数名の後の括弧内に、カンマで区切って列挙する。関数に渡されるパラメータの数は64個以下でなければならない。また、この関数は渡されたパラメータを使用しないこともできます。この場合、空のパラメータリストが表示されます。つまり、関数名の直後に開閉括弧が置かれます。

関数呼び出しで渡されるパラメータの数、型、順序は、関数の説明で指定された正式なパラメータの数、型、順序と一致しなければなりません(例外はデフォルトパラメータを持つ関数の呼び出しで、 数の説明と戻り値の演算 子を参照)。 そのような一致がない場合、MetaEditorはエラーメッセージを表示します。定数、変数、式、 配列は、渡されたパラメータとして使用することができます。"

書く前に教科書を読んで、アンダーラインを参照してください、しかし、実際に実装するために失敗しました - 非互換型について書いています。