[¡AVISO CERRADO!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen. No puedo ir a ningún sitio sin ti. - página 705

 
Infinity:

¡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);
 
zhuki:

En primer lugar, de la ayuda

double GlobalVariableGet(nombre de cadena)

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.
 
Infinity:

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";}

 
keekkenen:

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...


 
odiseif:
Lo siento, ha habido un error ..... aquí está el original

Odyssey, si no los tienes, deberías añadirlos :))

Archivos adjuntos:
 
artmedia70:

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 es ArraySize() - 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 (...)
 
Infinity:
...como hacer, o al menos que hay que especificar en él, para que abra órdenes en otros pares. No quiero ejecutar varios EAs ((
OrderSend(Nombre del par de divisas.... y otros parámetros......)
 
ToLik_SRGV:

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.

¡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... :))
Razón de la queja: