Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 6. - pagina 253

 
lottamer:

Ho bisogno di determinare il valore minimo (come mostrato nell'immagine) e massimo dell'indicatore MACD per un dato numero di barre. (20 in questo caso).

Ho trovato un codice che fa questo per il prezzo, e stupidamente ho provato a sostituire HIGH LOW con MACD. ma niente ha funzionato....


Copia i dati MACD che ti servono nell'array massMACD[20] e trova i valori minimi ArrayMinimum(massMACD); e
massimi ArrayMaximum(massMACD); in quell'array.
 
ALXIMIKS:
Inserire alla fine del macdac personalizzato.

P.S. Anche se è più corretto e migliore:


se è così, non funziona....

double MACDBuffer[];
double SignalBuffer[];

 
 int start()
  {
   int limit;
   int counted_bars=IndicatorCounted();
//---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;
//---- macd counted in the 1-st buffer
   for(int i=0; i<limit; i++)
      MACDBuffer[i]=iMA(NULL,0,12,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,26,0,MODE_EMA,PRICE_CLOSE,i);
//---- signal line counted in the 2-nd buffer
   for(i=0; i<limit; i++)
      SignalBuffer[i]=iMAOnArray(MACDBuffer,Bars,9,0,MODE_SMA,i);
        //t=MACDBuffer[0];
        //Print(t*10000);
//---- done
  
  
int max,min;
   static double maxlast,minlast;
   max = ArrayMaximum(MACDBuffer,20,1);
   min = ArrayMinimum(MACDBuffer,20,1);
   if (MACDBuffer[max]!=maxlast){
      maxlast=MACDBuffer[max];
      ObjectDelete  ("highline");   
      ObjectCreate ("highline",1,WindowOnDropped( ) ,0,MACDBuffer[max],0,0);
   }
   if (MACDBuffer[min]!=minlast){
      minlast=MACDBuffer[min];
      ObjectDelete  ("lowline");   
      ObjectCreate ("lowline",1,WindowOnDropped( ) ,0,MACDBuffer[min],0,0);
      Print(min,max);
   }
    return(0);
  }
 
artmedia70:
Copiate i vostri dati MACD richiesti nell'array massMACD[20] e trovate in questo array
minimo ArrayMinimum(massMACD); e
il massimo ArrayMaximum(massMACD); valori.


bene.

l'unica domanda è COME copiano i dati nell'array?

for(int i=1; i<20; i++)
      MACDBuffer[i]=iMA(NULL,0,12,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,26,0,MODE_EMA,PRICE_CLOSE,i);

o come questo?

   MACDLineBuffer[i] = iMACD(NULL, 0, 12,26,9,PRICE_CLOSE,MODE_MAIN,i);
 
lottamer:


se è così, non funziona....

Alla fine del MACD personalizzato:

Navigator ==> Indicatori personalizzati ==> MACD ==> PCM (tasto destro del mouse) ==> Modifica ==>

 
lottamer:


grande.

l'unica domanda è COME copiano i dati nell'array?

o come questo?


amico, è la stessa cosa, solo che non è il fatto che chiamare iMACD richiede tante risorse quanto il suo codice sorgente.

iMACD e tutti gli iCostum restituiscono il valore di un membro dell'array, quindi è necessario eseguire un ciclo e raccoglierli in un buffer per ulteriori operazioni

  MACDLineBuffer[i] = iMACD(NULL, 0, 12,26,9,PRICE_CLOSE,MODE_MAIN,i);

non è vero, perché si ottiene solo un valore e ne servono 20, quindi usate un ciclo:

for(int i=1; i<20; i++)
      MACDLineBuffer[i] = iMACD(NULL, 0, 12,26,9,PRICE_CLOSE,MODE_MAIN,i);

 
ALXIMIKS:

Alla fine del MACD personalizzato:

Navigator ==> Indicatori personalizzati ==> MACD ==> PCM (tasto destro del mouse) ==> Modifica ==>

funziona :)

Solo che certamente non fa quello che mi serve, ma cercherò di usarlo come esempio.

grazie

 

Cominciamo dall'inizio.

int start()
  {
  
    
for(int i=0; i<20; i++)
MACDBuffer[i] = iMACD(NULL, 0, 12,26,9,PRICE_CLOSE,MODE_MAIN,i);

è sufficiente per copiare 20(19 qualsiasi) valori di indicatori in un array?

 
lottamer:

Cominciamo dall'inizio.

è sufficiente copiare 20(19 qualsiasi) valori di indicatori in un array?

Siamo chiari, se qualcuno ha bisogno di qualcosa e io so qualcosa - sono felice di provare ad aiutare quella persona,

ma non ho intenzione di pulirgli il culo dopo ogni scoreggia.

Sì, è sufficiente se avete dichiarato array statico doppio MACDBuffer[20] e non è sufficiente se avete dichiarato array dinamico doppio MACDBuffer[].

artmedia70 te l'ha detto .

 
ALXIMIKS:

Siamo chiari, se qualcuno ha bisogno di qualcosa e io so qualcosa, sono felice di provare ad aiutare quella persona,

Ma non ho intenzione di pulirgli il culo dopo ogni scoreggia.

Sì, è sufficiente se avete dichiarato array statico doppio MACDBuffer[20] e non è sufficiente se avete dichiarato array dinamico doppio MACDBuffer[].

artmedia70 te l'ha detto .


Ok, rendiamolo statico.

double MACDBuffer[20];

double min,max;
 
  
 int start()
  {
 
   for(int i=0; i<20; i++)
      MACDBuffer[i]=iMA(NULL,0,12,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,26,0,MODE_EMA,PRICE_CLOSE,i);

   min=ArrayMinimum(MACDBuffer);
   max=ArrayMaximum(MACDBuffer);
  
  Print(min,"____",max);

perché stampa 19__0?

 
lottamer:


Ok, che sia statico.

perché stampa 19__0?


perché funziona bene. C'è altro?