[AVISO FECHADO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Não posso ir a lugar algum sem você. - página 705

 
Infinity:

Tão claro, olhando para o livro e não vendo, funciona, obrigado! Seguindo em frente) com perguntas. Tudo sobre as mesmas variáveis globais. Eu adicionei a seguinte condição ao indicador:

Quero definir a qual variável global deve ser atribuído um valor, dependendo da moeda em que o indicador se baseia.

Entendo que na variável global GlobalVariableSet(valuta,param), o nome (valuta) deve conter o valor atribuído a ela acima

chamar novamente a variável global no código do Expert Advisor

string valuta="valuta";

int i= GlobalVariableGet(valuta); // mas eu não recebo o valor, .... Ou seja, eu recebo 0. Será impossível mudar o nome da variável global desta forma?

Se um EA verifica o valor gravado pelo indicador, então seria lógico supor que o valor do parâmetro valuta deve corresponder ao nome do símbolo, ou seja, EURUSD ou GBPUSD.

de acordo, se o conselheiro verificar o valor do símbolo atual, então

valuta de corda = Símbolo();

int i= GlobalVariableGet(valuta);
 
zhuki:

Primeiramente, a partir da ajuda

duplo GlobalVariableGet(nome da cadeia)

Retorna o valor da variável global existente ou 0 no caso de um erro. Ligue para GetLastError() para obter informações de erro.


Você consegue ver o conteúdo do GV, mas não consegue recuperá-lo?


Bem, as variáveis globais mostram tanto o nome quanto o valor, .... Só não consigo obter o valor da variável global em meu código via variável global (parâmetro-nome), tenho que especificar o nome da string, então não há problema se ela encontrar tudo.
 
Infinity:

Bem, as variáveis globais exibem tanto o nome quanto o valor,..... Só não consigo obter o valor da variável global em meu código via (parâmetro-nome) da variável global, tenho que especificar o nome da string, então ela não encontra problemas.


Substitua

se (symb===EUR) {valuta=EUR;}

para

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

 
keekkenen:

Se a EA verificar o valor gravado pelo indicador, então seria lógico supor que o valor do parâmetro valuta deve corresponder ao nome do instrumento, ou seja, EURUSD ou GBPUSD...

Assim, se o assessor verificar o valor do símbolo atual, então

valuta de corda = Símbolo();

int i= GlobalVariableGet(valuta);


É assim que funciona))) É mais fácil do que parece )

Muito obrigado a todos que nos visitam e ajudam!

 

Amigos, digam-me onde estraguei tudo... Eu não consigo entender. O indicador lê os dados, mas depois não funciona. Não consigo encontrá-lo. Talvez alguém possa me dizer o que eu não entendo:

//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
// Поиск экстремумов
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
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]);
            }
      }            
         

}   

O periódico sempre produz os dados da matriz de valores indicadores, mas mais adiante - pare...
... apenas uma célula zero... e apenas zero... Ajude, por favor...


 
odiseif:
Desculpe, houve um erro ..... aqui está o original

Odyssey, se você não os tem, você deve adicioná-los :))

Arquivos anexados:
 
artmedia70:

Amigos, digam-me onde estraguei tudo... Eu não consigo entender. O indicador lê os dados, mas depois não funciona. Não consigo encontrá-lo. Talvez alguém possa me dizer o que eu não entendo:

A revista sempre mostra os dados da matriz de valores indicadores, mas depois pára...
... apenas uma célula zero... e apenas zero... Ajude, por favor...

Artyom, encontrou o primeiro erro até agora:

Arrays PeakUP[] e PeakDN[], são declarados sem quantidade especificada de elementos, ou seja, você os criou sem células, e mais adiante em um código tenta escrever algo neles, mas como eles não contêm em si mesmos elementos, naturalmente neles nada é escrito, e na impressora constantemente zero. Como você não sabe exatamente quantos picos e canais haverá, recomendo que você aumente dinamicamente o número de elementos nestas matrizes quando novos dados chegarem, as áreas corrigidas estão marcadas em vermelho.

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() retorna o número total de elementos da matriz, mas como a indexação começa de zero, o número real de elementos é ArraySize() - 1.

 
Aqui estou novamente com perguntas) A pergunta agora é da seguinte natureza. (Graças a todos que ajudaram antes), agora meu consultor especializado recebe dados de variáveis globais de indicadores, detectando de qual símbolo os dados foram recebidos. Com base nestes dados, abro um pedido em Expert Advisor sobre a moeda da qual recebi os dados da variável global. Anexei a EA a um gráfico e os indicadores a todos os outros gráficos. Recebe dados, mas abre ordem apenas para uma moeda em que está em pé (a própria EA) ... Acho que deveria ser um multiperito ... não sei como fazê-lo ou pelo menos o que deveria estar nele, por isso abre pedidos em outros pares (...) não quero executar vários EAs (...)
 
Infinity:
...como fazer, ou pelo menos o que deve ser especificado nele, para que ele abra pedidos em outros pares. Não quero executar vários EAs ((
OrderSend(Nome do par de moedas.... e outros parâmetros......)
 
ToLik_SRGV:

Artyom, até agora eu encontrei o primeiro erro:

Arrays PeakUP[] e PeakDN[], são declarados sem quantidade especificada de elementos, ou seja, você os criou sem células, e mais adiante no código tenta escrever algo neles, mas como eles não contêm elementos em si, naturalmente nada é escrito neles, e na impressora constantemente zero. Como você não sabe exatamente quantos picos e canais haverá, recomendo que você aumente dinamicamente o número de elementos nestas matrizes quando novos dados chegarem, as áreas corrigidas estão marcadas em vermelho.

ArraySize() retorna o número total de elementos da matriz, mas como a indexação começa de zero, o número real de elementos é ArraySize() - 1.

Anatoly! Um monumento deve ser erguido para você - um busto em sua pátria! O mais interessante é que o fiz para a série TempIND, mas me esqueci deles e trabalhei neles metade da noite... :))
Razão: