[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate. Non posso andare da nessuna parte senza di te. - pagina 705
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
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.
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.
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...
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 (...)
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... :))
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);In primo luogo, dall'aiuto
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.
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";}
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:
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...
Scusate, c'è stato un errore ..... ecco l'originale
Odissea, se non li hai, dovresti aggiungerli :))
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.
ArraySize() restituisce il numero totale di elementi dell'array, ma poiché l'indicizzazione parte da zero, il numero effettivo di elementi è ArraySize() - 1.
...come fare, o almeno cosa dovrebbe essere specificato in esso, per aprire ordini su altre coppie. Non voglio eseguire diversi EAs ((
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.