Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 471

 
Mike:
1. Tutta la partita.
2. Non esiste un tale parametro.
Mi è stato detto in un altro thread che questo problema è irrisolvibile in MT4. :(

2. Non so dove hai preso il MA in una finestra separata per poterti dire qualcosa sul parametro. Ma... Se prendete da Indicatori --> Oscillatori --> Medie mobili dell'oscillatore, ha "Applica a:"

Così, se cercate di mettere un altro indicatore in una finestra separata, in alcuni casi, può essere applicato non solo ai prezzi standard dall'enumerazione ENUM_APPLIED_PRICE, ma anche ai dati di quell'indicatore che è già nella finestra. Forse sei solo in questa situazione.

3. Qual è il problema? Che le tre MA non corrispondono a tre MA simili (secondo la sua affermazione)? Quindi non è irrisolvibile, è un'assurdità. Se sono fatti correttamente, sono destinati a combaciare. Che differenza c'è - tre MA separate con i loro propri parametri o le stesse tre MA con gli stessi parametri, ma stipate in un indicatore con tre buffer... Riesci a vedere la differenza? Io no. E se lo vedete, allora cercate l'incoerenza nel calcolo dei MAK.

A proposito... Alligator è tre MA in un solo indicatore, ognuno con i propri parametri. Configura i parametri allo stesso modo con le tue tre MA separate e coincideranno. Ma avete tutti questi baccanali in una finestra separata... Quindi... come esempio

 
Mike:
Ho fatto un indicatore 3MA(4,9,14) e ho deciso di confrontarlo per verificarne la correttezza con una finestra dove i tre indicatori sono MA(4), MA(9), MA(14). Mi si sono rizzati i capelli. :)
Prova a disabilitare l'autoscala delle finestre degli indicatori.
"Quando ci sono tre indicatori - MA(4), MA(9), MA(14)" la finestra dell'indicatore è autoscalata dal primo indicatore collegato a questa finestra. Nel vostro caso, è probabilmente il MA(4)
 

Potete per favore darmi un progetto per ottenere il valore dell'indicatore incorporato dal timeframe superiore, ma all'interno di questo timeframe.

Cioè il grafico attuale è di 15 minuti, ho bisogno di ottenere il valore dell'indicatore, calcolato per giorno, ma 45 minuti fa, come fare questo?

Ecco un semplice algoritmo che restituisce il valore dell'indicatore, ma solo per la barra corrente.

double iDelta(int Variant,int n,int TF,int index)

  {

   double Fibo=0;

   if(Variant==1) Fibo=0.236;

   if(Variant==2) Fibo=0.382;

   if(Variant==3) Fibo=0.5;

   if(Variant==4) Fibo=0.618;

   if(Variant==5) Fibo=0.764;

   if(Variant==6) Fibo=1;

   if(Variant==7) Fibo=1.236;

   if(Variant==8) Fibo=1.382;

   if(Variant==9) Fibo=1.5;

   if(Variant==10) Fibo=1.618;

   if(Variant==11) Fibo=2.0;

   if(Variant==12) Fibo=2.236;

   if(Variant==-1) Fibo=-0.236;

   if(Variant==-2) Fibo=-0.382;

   if(Variant==-3) Fibo=-0.5;

   if(Variant==-4) Fibo=-0.618;

   if(Variant==-5) Fibo=-0.764;

   if(Variant==-6) Fibo=-1;

   if(Variant==-7) Fibo=-1.236;

   if(Variant==-8) Fibo=-1.382;

   if(Variant==-9) Fibo=-1.5;

   if(Variant==-10) Fibo=-1.618;

   if(Variant==-11) Fibo=-2.0;

   if(Variant==-12) Fibo=-2.236;

   return ( NormalizeDouble(iOpen(Symbol(),TF,index)+iATR(Symbol(), TF, n, index+1)*Fibo,Digits) );

  } 

 
Leo59:
Prova a disabilitare l'autoscala delle finestre degli indicatori, forse le cose si sistemeranno.
"dove i tre indicatori sono MA(4), MA(9), MA(14)" la finestra dell'indicatore è autoscalata dal primo indicatore collegato a quella finestra. Nel vostro caso, è probabilmente MA(4)
Dove si disattiva questo autoscala?
 
Artyom Trishkin:

2. Non so dove hai preso il MA in una finestra separata per poterti dire qualcosa sul parametro. Ma... Se prendete da Indicatori --> Oscillatori --> Medie mobili dell'oscillatore, ha "Applica a:"

Così, se cercate di mettere un altro indicatore in una finestra separata, in alcuni casi, può essere applicato non solo ai prezzi standard dall'enumerazione ENUM_APPLIED_PRICE, ma anche ai dati di quell'indicatore che è già nella finestra. Forse sei solo in questa situazione.

3. Qual è il problema? Che le tre MA non corrispondono a tre MA simili (secondo la sua affermazione)? Quindi non è irrisolvibile, è un'assurdità. Se sono fatti correttamente, sono destinati a combaciare. Che differenza c'è - tre MA separate con i loro propri parametri o le stesse tre MA con gli stessi parametri, ma stipate in un indicatore con tre buffer... Riesci a vedere la differenza? Io no. E se lo vedete, allora cercate una discrepanza nel calcolo dei MAK.

A proposito... Alligator è tre MA in un solo indicatore, ognuno con i propri parametri. Configura i parametri allo stesso modo delle tue tre MA separate e corrisponderanno. Ma avete tutti questi baccanali in una finestra separata... Quindi... come esempio

Artyom, "Apply to" - c'è solo un elenco di prezzi. I calcoli della MA sono corretti, tutte e tre le linee sono controllate aggiungendo un singolo indicatore con un periodo di 4, poi 9, poi 14 alla finestra con l'indicatore 3MA. In ogni caso, il singolo indicatore coincide con la linea corrispondente dell'indicatore 3MA
 
Mike:
Artyom, "Applicare a" - c'è solo un'enumerazione di prezzi. I calcoli della MA sono corretti, tutte e tre le linee sono state controllate aggiungendo un singolo indicatore con periodo 4, poi 9, poi 14 alla finestra dell'indicatore 3MA. In ogni caso il singolo indicatore coincide con la linea corrispondente dell'indicatore 3MA
Qual è il problema allora? Immagino che non ti piaccia la mancata corrispondenza visiva delle linee nelle diverse finestre. Premi Ctrl+D, muovi il mouse sulle linee dell'indicatore e guarda nella finestra dei dati per vedere se corrispondono...
 
-Aleks-:

Potete per favore darmi un progetto per ottenere il valore dell'indicatore incorporato dal timeframe superiore, ma all'interno di questo timeframe.

Cioè il grafico attuale è di 15 minuti, ho bisogno di ottenere il valore dell'indicatore, calcolato per giorno, ma 45 minuti fa, come fare questo?

Ecco un semplice algoritmo che restituisce il valore dell'indicatore, ma solo per la barra corrente.

double iDelta(int Variant,int n,int TF,int index)

  {

   double Fibo=0;

   if(Variant==1) Fibo=0.236;

   if(Variant==2) Fibo=0.382;

   if(Variant==3) Fibo=0.5;

   if(Variant==4) Fibo=0.618;

   if(Variant==5) Fibo=0.764;

   if(Variant==6) Fibo=1;

   if(Variant==7) Fibo=1.236;

   if(Variant==8) Fibo=1.382;

   if(Variant==9) Fibo=1.5;

   if(Variant==10) Fibo=1.618;

   if(Variant==11) Fibo=2.0;

   if(Variant==12) Fibo=2.236;

   if(Variant==-1) Fibo=-0.236;

   if(Variant==-2) Fibo=-0.382;

   if(Variant==-3) Fibo=-0.5;

   if(Variant==-4) Fibo=-0.618;

   if(Variant==-5) Fibo=-0.764;

   if(Variant==-6) Fibo=-1;

   if(Variant==-7) Fibo=-1.236;

   if(Variant==-8) Fibo=-1.382;

   if(Variant==-9) Fibo=-1.5;

   if(Variant==-10) Fibo=-1.618;

   if(Variant==-11) Fibo=-2.0;

   if(Variant==-12) Fibo=-2.236;

   return ( NormalizeDouble(iOpen(Symbol(),TF,index)+iATR(Symbol(), TF, n, index+1)*Fibo,Digits) );

  } 

Non posso rispondere alla domanda, ma la funzione può essere semplificata e notevolmente velocizzata.
Quando si inizializza l'indicatore, creare un array statico

double arrFibo[13] = {0.0, 0.236, 0.382, ..., 2.236};

e tutti gli if iniDelta() possono essere sostituiti da:

if (Variant>0)
    Fibo =  arrFibo[ Variant];
else
    Fibo = -arrFibo[-Variant];

 
Mike:

Non posso rispondere alla domanda, ma la funzione può essere semplificata e notevolmente velocizzata.
Durante l'inizializzazione dell'indicatore crea un array statico

double arrFibo[13] = {0.0, 0.236, 0.382, ..., 2.236};

e tutti gli if iniDelta() possono essere sostituiti da:

if (Variant>0)
    Fibo =  arrFibo[ Variant];
else
    Fibo = -arrFibo[-Variant];

Grazie, lo proverò, forse sarà meglio.

 
Mike:

Non posso rispondere alla domanda, ma la funzione può essere semplificata e notevolmente velocizzata.
Nell'inizializzazione dell'indicatore creare un array statico

double arrFibo[13] = {0.0, 0.236, 0.382, ..., 2.236};

e tutti gli if iniDelta() possono essere sostituiti da:

if (Variant>0)
    Fibo =  arrFibo[ Variant];
else
    Fibo = -arrFibo[-Variant];

L'ho fatto. come hai scritto, ma non ha funzionato come dovrebbe essere - non so ancora cosa esattamente è sbagliato - ho bisogno di stampare....

Non capisco la stringa.

else           Fibo = -arrFibo[-Variant];

Quindi cosa otteniamo? Stiamo chiedendo l'indice meno dell'array o cosa?
 
-Aleks-:

L'ho fatto come hai scritto, ma non funziona come dovrebbe - non so ancora cosa c'è di sbagliato - ho bisogno di stampare....

Non capisco la linea.

else           Fibo = -arrFibo[-Variant];

Risulta che stiamo richiedendo un indice meno dell'array o cosa?
Nel caso in cui Variant sia negativa, l'espressione -Variant dà un indice positivo per il recupero di un array.
Nello stesso caso abbiamo bisogno di valori negativi di Fibo, quindi -arrFibo.
Motivazione: