[警告は閉鎖されました!】フォーラムを乱雑にしないために、どんな初心者の質問でも。プロフェッショナルは、通り過ぎないでください。あなたなしでは、どこにも行けない。 - ページ 705

 
Infinity:

とてもクリアで、本を見ても見えない、作品ありがとうございました。質問で)移動します。すべて同じグローバル変数についてです。インジケータに以下の条件を追加してみました。

インジケータがどの通貨を基準にしているかによって、どのグローバル変数に値を割り当てるかを定義したいのです。

グローバル変数GlobalVariableSet(valuta,param)に、名前(valuta)に上記の値を代入することは理解できたのですが......。

Expert Advisorのコードでグローバル変数を再度呼び出します。

文字列 valuta="valuta";

int i= GlobalVariableGet(valuta); // しかし、値が取得できない、、、。もしかして、この方法ではグローバル変数名を変更することはできないのでしょうか?

もしEAがインジケータで保存された値をチェックするならば、パラメータvalutaの値はシンボル名、すなわちEURUSDまたはGBPUSDに対応すべきと考えるのが自然でしょう。

従って、もしアドバイザーが現在のシンボルの値をチェックするならば

文字列 valuta = Symbol();

int i=GlobalVariableGet(valuta)。
 
zhuki:

まず、ヘルプから

doubleGlobalVariableGet()文字列名)

既存のグローバル変数の値を返すか、エラーの場合は 0 を返す。GetLastError()を呼び出すと、エラー情報を得ることができます。


GVの中身が見えるが、取り出せない?


まあ、グローバル変数は名前と値の両方が表示されるしね・・・。私のコードでは、(パラメータ名)グローバル変数でグローバル変数の値を取得することができないのです。
 
Infinity:

グローバル変数は名前と値の両方が表示されるのですが......。グローバル変数の(parameter-name)でグローバル変数の値を取得できないのですが、文字列名を指定すれば問題なく取得できます。


交換

if (symb==EUR) {valuta=EUR;}.

まで

if (symb=="EURUSD") {valuta="EUR";}.

 
keekkenen:

もしEAがインジケータによって保存された値をチェックするならば、パラメータvalutaの値は、EURUSDやGBPUSDといった商品名と一致するはずだと考えるのが自然でしょう...。

従って、アドバイザーが現在のシンボルの値をチェックするのであれば

文字列 valuta = Symbol();

int i= GlobalVariableGet(valuta)。


そういうことです))見た目より簡単です )

訪問してくださる皆様、お手伝いしてくださる皆様、本当にありがとうございます。

 

友よ、私の失敗の原因を教えてくれ...。解らないんです。インジケーターがデータを読み込むが、その後、動作しない。見つからないんです。何がわからないのか、誰か教えてくれないかな。

//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
// Поиск экстремумов
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
void   SaveDataIND(double &TempIND[], int nBars)
{
   ArrayResize(TempIND,nBars);                     // Размер массива под переданный в ф-цию размер
   for (int j=0; j<=nBars-1; j++)
      {
         TempIND[j]=iAD(NULL,PERIOD_M5,j);         // Запишем данные инд. в цикле в массив
         Print("TempIND[",j,"] = ",TempIND[j]);
      }
//------------------------------------------------------------------
// Заполнение массивов данными о пичках и донышках
//------------------------------------------------------------------
   double   PeakUP[], PeakDN[];                    // Объявляем массивы пичков/донышков
   int i, k, l, asize;
   if (TempIND[nBars-1]<TempIND[1])                // Если последний бар массива ниже первого - тенденция вверх
      {
         k=0;                                      // Инициализируем индекс массива донышков
         for (i=3; i<=nBars-1; i++)                // Пробежимся по массиву значений
            {
               if (TempIND[i]>TempIND[i-1] && 
                   TempIND[i-1]<TempIND[i-2])      // Нашли донышко
                  {
                     PeakDN[k]=TempIND[i-1];       // Заносим его значение в массив донышек 
                     k++;                          // Увеличиваем индекс массива донышков
                  }
            }
         asize=ArraySize(PeakDN);
         for (l=0; l<=asize; l++)
            {
               Print("PeakDN[",l,"] = ",PeakDN[l]);
            }
      }
   if (TempIND[nBars-1]>TempIND[1])                // Если последний бар массива выше первого - тенденция вниз
      {
         k=0;                                      // Инициализируем индекс массива пичков
         for (i=3; i<=nBars-1; i++)                // Пробежимся по массиву значений
            {
               if (TempIND[i]<TempIND[i-1] && 
                   TempIND[i-1]>TempIND[i-2])      // Нашли пичёк
                  {
                     PeakUP[k]=TempIND[i-1];       // Заносим его значение в массив пичков 
                     k++;                          // Увеличиваем индекс массива пичков
                  }
            }
         asize=ArraySize(PeakUP);
         for (l=0; l<=asize; l++)
            {
               Print("PeakUP[",l,"] = ",PeakUP[l]);
            }
      }            
         

}   

ジャーナルには常にインジケータ値の配列のデータが表示されますが、その後止まってしまいます...。
...ゼロセルが1つだけ...とゼロだけ...助けてください...


 
odiseif:
すみません、間違いがありました......オリジナルはこちらです。

オデッセイ、持ってないなら追加した方がいいよ :))

ファイル:
 
artmedia70:

友よ、私の失敗の原因を教えてくれ...。解らないんです。インジケーターがデータを読み込むが、その後、動作しない。見つからないんです。何がわからないのか、誰か教えてくれないかな。

ジャーナルには常にインジケータ値の配列のデータが表示されますが、その後止まってしまいます...。
...ゼロセルが1つだけ...とゼロだけ...助けてください...

Artyomさん、今のところ1つ目のエラーを発見しました。

PeakUP[]、PeakDN[]という配列は、要素の数を指定せずに宣言しています。つまり、セルなしで作成し、さらにコードで何かを書こうとすると、それ自体に要素が含まれていないので、当然何も書かれず、プリンタには常にゼロが表示されています。山や谷がいくつになるか分からないので、新しいデータが来たときに、これらの配列の要素数を動的に増やすことをお勧めします(修正箇所は赤で表示されます)。

if (TempIND[nBars-1]<TempIND[1])                // Если последний бар массива ниже первого - тенденция вверх
      {
         k=0;                                      // Инициализируем индекс массива донышков
         for (i=3; i<=nBars-1; i++)                // Пробежимся по массиву значений
            {
               if (TempIND[i]>TempIND[i-1] && 
                   TempIND[i-1]<TempIND[i-2])      // Нашли донышко
                  {
                     ArrayResize(PeakDN, k + 1);
                     PeakDN[k]=TempIND[i-1];       // Заносим его значение в массив донышек 
                     k++;                          // Увеличиваем индекс массива донышков
                  }
            }
         asize=ArraySize(PeakDN);
         for (l=0; l< asize; l++)
            {
               Print("PeakDN[",l,"] = ",PeakDN[l]);
            }
      }
   if (TempIND[nBars-1]>TempIND[1])                // Если последний бар массива выше первого - тенденция вниз
      {
         k=0;                                      // Инициализируем индекс массива пичков
         for (i=3; i<=nBars-1; i++)                // Пробежимся по массиву значений
            {
               if (TempIND[i]<TempIND[i-1] && 
                   TempIND[i-1]>TempIND[i-2])      // Нашли пичёк
                  {
                     ArrayResize(PeakUP, k + 1);
                     PeakUP[k]=TempIND[i-1];       // Заносим его значение в массив пичков 
                     k++;                          // Увеличиваем индекс массива пичков
                  }
            }
         asize=ArraySize(PeakUP);
         for (l=0; l< asize; l++)
            {
               Print("PeakUP[",l,"] = ",PeakUP[l]);
            }
      }    

ArraySize() は 配列の総要素 数を返しますが、インデックスが 0 から始まるので、実際の要素数は ArraySize() - 1 となります。

 
ここでまた質問です)今の質問は次のような内容です。(先ほどはありがとうございました。) 私のExpert Advisorは、インジケータからグローバル変数のデータを受信し、どのシンボルからデータを受信したかを検出するようになりました。このデータをもとに、Expert Advisorでグローバル 変数のデータを受け取った通貨に注文を出します。 1つのチャートにEAを、他のすべてのチャートにインジケータを添付しています。データを取得しても、自分が立っている通貨(EA自身)のみで注文を開いてしまう・・・。マルチエキスパートであるべきだと思うのですが・・・。他のペアで注文を出すにはどうすればいいのか、少なくとも何を入れればいいのかがわからない(...)複数のEAを動かしたくない(...)。
 
Infinity:
...他のペアで注文を出すにはどうしたらいいか、少なくとも何を指定したらいいか。 複数のEAを動かすのは嫌だ。((
OrderSend(通貨ペア名......その他パラメータ......)
 
ToLik_SRGV:

Artyomさん、今のところ、最初のエラーは見つかりました。

PeakUP[]とPeakDN[]という配列は、要素の数を指定せずに宣言しています。つまり、セルなしで作成し、さらにコード内で何かを書こうとしますが、それ自体に要素が含まれていないため、当然何も書かれず、プリンタでは常に0になっています。山や谷がいくつになるか分からないので、新しいデータが来たときに、これらの配列の要素数を動的に増やすことをお勧めします(修正箇所は赤で表示されます)。

ArraySize() は 配列の総要素数を返しますが、インデックスが 0 から始まるので、実際の要素数は ArraySize() - 1 となります。

アナトリー!あなたの記念碑を建てるべきだ--あなたの祖国に胸像を!一番面白いのは、TempINDアレイのためにやったのに、それを忘れて夜半に作業してしまったことです...。:))