//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж// Поиск экстремумов//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж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]);
}
}
}
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]);
}
}
とてもクリアで、本を見ても見えない、作品ありがとうございました。質問で)移動します。すべて同じグローバル変数についてです。インジケータに以下の条件を追加してみました。
インジケータがどの通貨を基準にしているかによって、どのグローバル変数に値を割り当てるかを定義したいのです。
グローバル変数GlobalVariableSet(valuta,param)に、名前(valuta)に上記の値を代入することは理解できたのですが......。
Expert Advisorのコードでグローバル変数を再度呼び出します。
文字列 valuta="valuta";
int i= GlobalVariableGet(valuta); // しかし、値が取得できない、、、。もしかして、この方法ではグローバル変数名を変更することはできないのでしょうか?
もしEAがインジケータで保存された値をチェックするならば、パラメータvalutaの値はシンボル名、すなわちEURUSDまたはGBPUSDに対応すべきと考えるのが自然でしょう。
従って、もしアドバイザーが現在のシンボルの値をチェックするならば
文字列 valuta = Symbol();
int i=GlobalVariableGet(valuta)。まず、ヘルプから
既存のグローバル変数の値を返すか、エラーの場合は 0 を返す。GetLastError()を呼び出すと、エラー情報を得ることができます。
GVの中身が見えるが、取り出せない?
まあ、グローバル変数は名前と値の両方が表示されるしね・・・。私のコードでは、(パラメータ名)グローバル変数でグローバル変数の値を取得することができないのです。
グローバル変数は名前と値の両方が表示されるのですが......。グローバル変数の(parameter-name)でグローバル変数の値を取得できないのですが、文字列名を指定すれば問題なく取得できます。
交換
if (symb==EUR) {valuta=EUR;}.
まで
if (symb=="EURUSD") {valuta="EUR";}.
もしEAがインジケータによって保存された値をチェックするならば、パラメータvalutaの値は、EURUSDやGBPUSDといった商品名と一致するはずだと考えるのが自然でしょう...。
従って、アドバイザーが現在のシンボルの値をチェックするのであれば
文字列 valuta = Symbol();
int i= GlobalVariableGet(valuta)。そういうことです))見た目より簡単です )
訪問してくださる皆様、お手伝いしてくださる皆様、本当にありがとうございます。
友よ、私の失敗の原因を教えてくれ...。解らないんです。インジケーターがデータを読み込むが、その後、動作しない。見つからないんです。何がわからないのか、誰か教えてくれないかな。
ジャーナルには常にインジケータ値の配列のデータが表示されますが、その後止まってしまいます...。
...ゼロセルが1つだけ...とゼロだけ...助けてください...
すみません、間違いがありました......オリジナルはこちらです。
オデッセイ、持ってないなら追加した方がいいよ :))
友よ、私の失敗の原因を教えてくれ...。解らないんです。インジケーターがデータを読み込むが、その後、動作しない。見つからないんです。何がわからないのか、誰か教えてくれないかな。
ジャーナルには常にインジケータ値の配列のデータが表示されますが、その後止まってしまいます...。
...ゼロセルが1つだけ...とゼロだけ...助けてください...
Artyomさん、今のところ1つ目のエラーを発見しました。
PeakUP[]、PeakDN[]という配列は、要素の数を指定せずに宣言しています。つまり、セルなしで作成し、さらにコードで何かを書こうとすると、それ自体に要素が含まれていないので、当然何も書かれず、プリンタには常にゼロが表示されています。山や谷がいくつになるか分からないので、新しいデータが来たときに、これらの配列の要素数を動的に増やすことをお勧めします(修正箇所は赤で表示されます)。
ArraySize() は 配列の総要素 数を返しますが、インデックスが 0 から始まるので、実際の要素数は ArraySize() - 1 となります。
...他のペアで注文を出すにはどうしたらいいか、少なくとも何を指定したらいいか。 複数のEAを動かすのは嫌だ。((
Artyomさん、今のところ、最初のエラーは見つかりました。
PeakUP[]とPeakDN[]という配列は、要素の数を指定せずに宣言しています。つまり、セルなしで作成し、さらにコード内で何かを書こうとしますが、それ自体に要素が含まれていないため、当然何も書かれず、プリンタでは常に0になっています。山や谷がいくつになるか分からないので、新しいデータが来たときに、これらの配列の要素数を動的に増やすことをお勧めします(修正箇所は赤で表示されます)。
ArraySize() は 配列の総要素数を返しますが、インデックスが 0 から始まるので、実際の要素数は ArraySize() - 1 となります。