¡Así de claro, mirar en el libro y no ver, funciona gracias! Siguiendo) con las preguntas. Todo sobre las mismas variables globales. He añadido la siguiente condición al indicador:
Quiero definir a qué variable global se le debe asignar un valor, dependiendo de la moneda en la que se base el indicador.
Entiendo que en la variable global GlobalVariableSet(valuta,param), el nombre (valuta) debe contener el valor que se le ha asignado anteriormente
llamar de nuevo a la variable global en el código del Asesor Experto
string valuta="valuta";
int i= GlobalVariableGet(valuta); // pero no obtengo el valor, .... Es decir, obtengo 0. ¿Puede ser que sea imposible cambiar el nombre de la variable global de esta manera?
Si un EA comprueba el valor guardado por el indicador, entonces sería lógico suponer que el valor del parámetro valuta debería corresponder al nombre del símbolo, es decir, EURUSD o GBPUSD.
En consecuencia, si el asesor comprueba el valor del símbolo actual, entonces
Devuelve el valor de la variable global existente o 0 en caso de error. Llame a GetLastError() para obtener información sobre el error.
¿Puede ver el contenido del GV, pero no puede recuperarlo?
Pues bien, las variables globales muestran tanto el nombre como el valor, .... No puedo obtener el valor de la variable global en mi código a través de la variable global (nombre del parámetro), tengo que especificar el nombre de la cadena, entonces no hay problema encuentra todo.
Pues las variables globales muestran tanto el nombre como el valor,..... No puedo obtener el valor de la variable global en mi código a través de (nombre-parámetro) de la variable global, tengo que especificar el nombre de la cadena, entonces no encuentra problemas.
Si el EA comprueba el valor guardado por el indicador, entonces sería lógico suponer que el valor del parámetro valuta debería corresponder al nombre del instrumento, es decir, EURUSD o GBPUSD...
En consecuencia, si el asesor comprueba el valor del símbolo actual, entonces
string valuta = Symbol();
int i= GlobalVariableGet(valuta);
Así es como funciona)) Es más fácil de lo que parece )
¡Un gran agradecimiento a todos los que nos visitan y ayudan!
Amigos, decidme en qué he metido la pata... No puedo entenderlo. El indicador lee los datos, pero luego no funciona. No lo encuentro. Quizá alguien pueda decirme qué es lo que no entiendo:
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж// Поиск экстремумов//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж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]);
}
}
}
El diario siempre muestra los datos de la matriz de valores del indicador, pero luego se detiene... ... sólo una célula cero... y sólo cero... Ayuda por favor...
Amigos, decidme en qué he metido la pata... No puedo entenderlo. El indicador lee los datos, pero luego no funciona. No lo encuentro. Tal vez alguien pueda decirme qué es lo que no entiendo:
El diario siempre muestra los datos de la matriz de valores del indicador, pero luego se detiene... ... sólo una célula cero... y sólo cero... Ayuda por favor...
Artyom, encontró el primer error hasta ahora:
Los arrays PeakUP[] y PeakDN[], están declarados sin cantidad especificada de elementos, es decir, los has creado sin celdas en absoluto, y más adelante en un código intentas escribir algo en ellos, pero como no contienen en sí mismos elementos, naturalmente en ellos no se escribe nada, y en la impresora constantemente cero. Como no se sabe exactamente cuántos picos y valles habrá, recomiendo aumentar dinámicamente el número de elementos de estas matrices cuando lleguen nuevos datos, las zonas corregidas se marcan en rojo.
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() devuelve el número total de elementos de la matriz, pero como la indexación empieza en cero, el número real de elementos esArraySize() - 1.
Aquí estoy de nuevo con preguntas) La pregunta ahora es de la siguiente naturaleza. (Gracias a todos los que ayudaron antes), ahora mi Asesor Experto recibe los datos de las variables globales de los indicadores, detectando de qué símbolo se han recibido los datos. En base a estos datos abro una orden en Expert Advisor sobre la divisa de la que he recibido datos de la variable global. Adjunto el EA a un gráfico y los indicadores a todos los demás gráficos. Obtiene los datos pero abre la orden sólo para una divisa en la que está parado (el propio EA) ... Creo que debería ser un experto múltiple... no sé cómo hacerlo o al menos qué debería tener para que abra órdenes en otros pares (...) no quiero ejecutar varios EAs (...)
Los arrays PeakUP[] y PeakDN[], están declarados sin cantidad especificada de elementos, es decir los has creado sin celdas en absoluto, y más adelante en el código intentas escribir algo en ellos, pero como no contienen elementos en sí mismos, naturalmente no se escribe nada en ellos, y en la impresora constantemente cero. Como no se sabe exactamente cuántos picos y valles habrá, recomiendo aumentar dinámicamente el número de elementos de estas matrices cuando lleguen nuevos datos, las zonas corregidas se marcan en rojo.
ArraySize() devuelve el número total de elementos de la matriz, pero como la indexación empieza en cero, el número real de elementos esArraySize() - 1.
¡Anatoly! Habría que erigirle un monumento, un busto en su tierra natal. Lo más interesante es que lo hice para el conjunto TempIND, pero me olvidé de ellos y trabajé en ellos la mitad de la noche... :))
¡Así de claro, mirar en el libro y no ver, funciona gracias! Siguiendo) con las preguntas. Todo sobre las mismas variables globales. He añadido la siguiente condición al indicador:
Quiero definir a qué variable global se le debe asignar un valor, dependiendo de la moneda en la que se base el indicador.
Entiendo que en la variable global GlobalVariableSet(valuta,param), el nombre (valuta) debe contener el valor que se le ha asignado anteriormente
llamar de nuevo a la variable global en el código del Asesor Experto
string valuta="valuta";
int i= GlobalVariableGet(valuta); // pero no obtengo el valor, .... Es decir, obtengo 0. ¿Puede ser que sea imposible cambiar el nombre de la variable global de esta manera?
Si un EA comprueba el valor guardado por el indicador, entonces sería lógico suponer que el valor del parámetro valuta debería corresponder al nombre del símbolo, es decir, EURUSD o GBPUSD.
En consecuencia, si el asesor comprueba el valor del símbolo actual, entonces
string valuta = Symbol();
int i= GlobalVariableGet(valuta);En primer lugar, de la ayuda
Devuelve el valor de la variable global existente o 0 en caso de error. Llame a GetLastError() para obtener información sobre el error.
¿Puede ver el contenido del GV, pero no puede recuperarlo?
Pues bien, las variables globales muestran tanto el nombre como el valor, .... No puedo obtener el valor de la variable global en mi código a través de la variable global (nombre del parámetro), tengo que especificar el nombre de la cadena, entonces no hay problema encuentra todo.
Pues las variables globales muestran tanto el nombre como el valor,..... No puedo obtener el valor de la variable global en mi código a través de (nombre-parámetro) de la variable global, tengo que especificar el nombre de la cadena, entonces no encuentra problemas.
Sustituir
if (symb==EUR) {valuta=EUR;}
a
if (symb=="EURUSD") {valuta="EUR";}
Si el EA comprueba el valor guardado por el indicador, entonces sería lógico suponer que el valor del parámetro valuta debería corresponder al nombre del instrumento, es decir, EURUSD o GBPUSD...
En consecuencia, si el asesor comprueba el valor del símbolo actual, entonces
string valuta = Symbol();
int i= GlobalVariableGet(valuta);Así es como funciona)) Es más fácil de lo que parece )
¡Un gran agradecimiento a todos los que nos visitan y ayudan!
Amigos, decidme en qué he metido la pata... No puedo entenderlo. El indicador lee los datos, pero luego no funciona. No lo encuentro. Quizá alguien pueda decirme qué es lo que no entiendo:
El diario siempre muestra los datos de la matriz de valores del indicador, pero luego se detiene...
... sólo una célula cero... y sólo cero... Ayuda por favor...
Lo siento, ha habido un error ..... aquí está el original
Odyssey, si no los tienes, deberías añadirlos :))
Amigos, decidme en qué he metido la pata... No puedo entenderlo. El indicador lee los datos, pero luego no funciona. No lo encuentro. Tal vez alguien pueda decirme qué es lo que no entiendo:
El diario siempre muestra los datos de la matriz de valores del indicador, pero luego se detiene...
... sólo una célula cero... y sólo cero... Ayuda por favor...
Artyom, encontró el primer error hasta ahora:
Los arrays PeakUP[] y PeakDN[], están declarados sin cantidad especificada de elementos, es decir, los has creado sin celdas en absoluto, y más adelante en un código intentas escribir algo en ellos, pero como no contienen en sí mismos elementos, naturalmente en ellos no se escribe nada, y en la impresora constantemente cero. Como no se sabe exactamente cuántos picos y valles habrá, recomiendo aumentar dinámicamente el número de elementos de estas matrices cuando lleguen nuevos datos, las zonas corregidas se marcan en rojo.
ArraySize() devuelve el número total de elementos de la matriz, pero como la indexación empieza en cero, el número real de elementos es ArraySize() - 1.
...como hacer, o al menos que hay que especificar en él, para que abra órdenes en otros pares. No quiero ejecutar varios EAs ((
Artyom, de momento he encontrado el primer error:
Los arrays PeakUP[] y PeakDN[], están declarados sin cantidad especificada de elementos, es decir los has creado sin celdas en absoluto, y más adelante en el código intentas escribir algo en ellos, pero como no contienen elementos en sí mismos, naturalmente no se escribe nada en ellos, y en la impresora constantemente cero. Como no se sabe exactamente cuántos picos y valles habrá, recomiendo aumentar dinámicamente el número de elementos de estas matrices cuando lleguen nuevos datos, las zonas corregidas se marcan en rojo.
ArraySize() devuelve el número total de elementos de la matriz, pero como la indexación empieza en cero, el número real de elementos es ArraySize() - 1.