[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate. Non posso andare da nessuna parte senza di te. - pagina 705

 
Infinity:

Così chiaro, guardare nel libro e non vedere, funziona grazie! Andando avanti) con le domande. Tutto sulle stesse variabili globali. Ho aggiunto la seguente condizione all'indicatore:

Voglio definire a quale variabile globale deve essere assegnato un valore, a seconda della valuta su cui si basa l'indicatore.

Ho capito che nella variabile globale GlobalVariableSet(valuta,param), il nome (valuta) dovrebbe contenere il valore assegnato sopra

richiamare la variabile globale nel codice di Expert Advisor

stringa valuta="valuta";

int i= GlobalVariableGet(valuta); // ma non ottengo il valore, .... Cioè ottengo 0. Forse è impossibile cambiare il nome della variabile globale in questo modo?

Se un EA controlla il valore salvato dall'indicatore, allora sarebbe logico supporre che il valore del parametro valuta dovrebbe corrispondere al nome del simbolo, cioè EURUSD o GBPUSD.

di conseguenza, se il consigliere controlla il valore del simbolo corrente, allora

stringa valuta = Symbol();

int i= GlobalVariableGet(valuta);
 
zhuki:

In primo luogo, dall'aiuto

doppio GlobalVariableGet(nome stringa)

Restituisce il valore della variabile globale esistente o 0 in caso di errore. Chiama GetLastError() per ottenere informazioni sugli errori.


Puoi vedere il contenuto del GV, ma non puoi recuperarlo?


Bene, le variabili globali mostrano sia il nome che il valore, .... Non posso ottenere il valore della variabile globale nel mio codice tramite la variabile globale (nome del parametro), devo specificare il nome della stringa, poi nessun problema, trova tutto.
 
Infinity:

Bene, le variabili globali mostrano sia il nome che il valore, ..... Non posso ottenere il valore della variabile globale nel mio codice tramite (nome del parametro) della variabile globale, devo specificare il nome della stringa, poi non trova problemi.


Sostituire

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

a

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

 
keekkenen:

Se l'EA controlla il valore salvato dall'indicatore, allora sarebbe logico assumere che il valore del parametro valuta dovrebbe corrispondere al nome dello strumento, cioè EURUSD o GBPUSD...

Di conseguenza, se il consigliere controlla il valore del simbolo corrente, allora

stringa valuta = Symbol();

int i= GlobalVariableGet(valuta);


È così che funziona)) È più facile di quanto sembri)

Molte grazie a tutti coloro che visitano e aiutano!

 

Amici, ditemi dove ho sbagliato... Non riesco a capirlo. L'indicatore legge i dati, ma poi non funziona. Non riesco a trovarlo. Forse qualcuno può dirmi cosa non capisco:

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

}   

Il giornale mostra sempre i dati dell'array di valori dell'indicatore, ma poi si ferma...
... solo una cella zero... e solo zero... Aiuto per favore...


 
odiseif:
Scusate, c'è stato un errore ..... ecco l'originale

Odissea, se non li hai, dovresti aggiungerli :))

File:
 
artmedia70:

Amici, ditemi dove ho sbagliato... Non riesco a capirlo. L'indicatore legge i dati, ma poi non funziona. Non riesco a trovarlo. Forse qualcuno può dirmi cosa non capisco:

Il giornale mostra sempre i dati dell'array di valori dell'indicatore, ma poi si ferma...
... solo una cella zero... e solo zero... Aiuto per favore...

Artyom, trovato il primo errore finora:

Gli array PeakUP[] e PeakDN[], sono dichiarati senza quantità specificata di elementi, cioè, li avete creati senza celle, e più avanti in un codice cercate di scriverci qualcosa, ma siccome non contengono in sé elementi, naturalmente in essi non viene scritto nulla, e nella stampante costantemente zero. Dato che non sapete esattamente quanti picchi e depressioni ci saranno, vi consiglio di aumentare dinamicamente il numero di elementi in questi array quando arrivano nuovi dati, le aree corrette sono segnate in rosso.

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() restituisce il numero totale di elementi dell'array, ma poiché l'indicizzazione parte da zero, il numero effettivo di elementi è ArraySize() - 1.

 
Eccomi di nuovo con le domande) La domanda ora è della seguente natura. (Grazie a tutti coloro che mi hanno aiutato in precedenza), ora il mio Expert Advisor riceve i dati delle variabili globali dagli indicatori, rilevando da quale simbolo sono stati ricevuti i dati. Sulla base di questi dati apro un ordine in Expert Advisor sulla valuta da cui ho ricevuto i dati della variabile globale. Attacco l'EA a un grafico e gli indicatori a tutti gli altri grafici. Riceve i dati ma apre l'ordine solo per una valuta su cui si trova (EA stesso) ... Penso che dovrebbe essere un multi-esperto ... non so come farlo o almeno cosa dovrebbe esserci dentro in modo che apra gli ordini su altre coppie (...) non voglio eseguire diversi EAs (...)
 
Infinity:
...come fare, o almeno cosa dovrebbe essere specificato in esso, per aprire ordini su altre coppie. Non voglio eseguire diversi EAs ((
OrderSend(Nome della coppia di valute.... e altri parametri......)
 
ToLik_SRGV:

Artyom, finora ho trovato il primo errore:

Gli array PeakUP[] e PeakDN[], sono dichiarati senza quantità specificata di elementi, cioè li avete creati senza celle, e più avanti nel codice provate a scriverci qualcosa, ma siccome non contengono elementi in sé, naturalmente non vi si scrive nulla, e nella stampante costantemente zero. Dato che non sapete esattamente quanti picchi e depressioni ci saranno, vi consiglio di aumentare dinamicamente il numero di elementi in questi array quando arrivano nuovi dati, le aree corrette sono segnate in rosso.

ArraySize() restituisce il numero totale di elementi dell'array, ma poiché l'indicizzazione parte da zero, il numero effettivo di elementi è ArraySize() - 1.

Anatoly! Si dovrebbe erigere un monumento a lei - un busto nella sua patria! La cosa più interessante è che l'ho fatto per l'array TempIND, ma mi sono dimenticato di loro e ci ho lavorato per metà della notte... :))
Motivazione: