Programmazione Visual Trader Hull Moving Average (1 Viewer)

kadet

Forumer attivo
E' un po' che seguo i cicli,
ho letto in giro della media mobile di Hull,
detta HMA, che riesca ad indicare abbastanza bene l'evoluzione
del ciclo in esame, usando i giusti settaggi.

Ho trovato la formula
per Visual Trader, questa:

Var:p(100);
Var:demip,temp,racineP,mmhull;
Var:demipp;


demiP=round(p/2,0);
temp=op(op(mov(c,demip,a),constval(2),mul),mov(c,p,a),sub);
racinep=round(sqrt(p),0);
mmhull=mov(temp,racinep,a);

plotchart(mmhull,0,blue,solid,2);




Funziona molto bene, inserendola da
tools/inserisci trading system ....,
va be questo lo sapete gia,
ho anche impostato in modo che cambi colore
nelle fasi di rialzo e ribasso in questo modo:

'colore up valore>valore precedente'

però, ecco il quesito per gli esperti,
dopo la chiusura e riapertura di Visual Trader,
perdo il settaggio, praticamente la linea torna di un colore unico.

Come posso modificare la formula
in modo che rimanga la mia impostazione ???

Grazie in anticipo !!

Ciao a tutti
 

kadet

Forumer attivo
Non ci posso credere ..... non c'è stata un anima buona
che mi abbia offerto un po' d'aiuto !!!

Va be ... pazienza !!!


Ecco cio che sono riuscito a fare da solo:

Questa è a 64 periodi, si puo mettere anche il comando "Input".

Var:p(64);
Var:demip,temp,racineP,mmhull;
Var:demipp;
Var:colore;

demiP=round(p/2,0);
temp=op(op(mov(c,demip,a),constval(2),mul),mov(c,p,a),sub);
racinep=round(sqrt(p),0);
mmhull=mov(temp,racinep,a);

If mmhull < ref(mmhull,1)then
colore = red;
endif;

If mmhull > ref(mmhull,1)then
colore = green;
endif;


plotchart(mmhull,0,colore,solid,2);


Grazie :(:(
 
Ultima modifica:

Conte Vlad

Muttley fa qualcosa!
Salve... uso questo codice con VT5 per generare la media di hull...
Generlamente però osservo un'altra piattaforma, MetaTrader4 e l'indicatore della hull è un pò diverso ed ha un codice decisamente più complesso...
Di programmazione non so molto, anzi, quasi nulla ....

Con il codice della hull su VT5 ho notato che la media non tiene conto dell'ultima candela e questo è un grosso problema .... mentre su MT4, l'altro codice gestisce la candela corso ...

Il codice è questo sotto, c'è qualcuno in grado di capire le differenze e tradurlo in VT5?? :bow:

Codice:
//+---------------------------------------------------------------------------+ 
//| HMA.mq4                                                                   |
//| Copyright © 2006 WizardSerg <[email protected]>, ForexMagazine #104      |
//| [email protected]                                                        |
//| Revised by IgorAD,[email protected]                                  |   
//| Personalized by iGoR AKA FXiGoR for the Trend Slope Trading method (T_S_T)|
//| Link:                                                                     |
//| contact: [email protected]                                      |                                
//+---------------------------------------------------------------------------+
#property copyright "MT4 release WizardSerg <[email protected]>, ?? ??????? ForexMagazine #104"
#property link      "[email protected]"
//----
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 White
#property indicator_color2 Red
//---- input parameters 
extern int       period=15;
extern int       method=3;                        
extern int       price=0;                           
//---- buffers 
double Uptrend[];
double Dntrend[];
double ExtMapBuffer[];
//+------------------------------------------------------------------+ 
//| Custom indicator initialization function                         | 
//+------------------------------------------------------------------+ 
int init()
  {
   IndicatorBuffers(3);
   SetIndexBuffer(0, Uptrend);
   //ArraySetAsSeries(Uptrend, true); 
   SetIndexBuffer(1, Dntrend);
   //ArraySetAsSeries(Dntrend, true); 
   SetIndexBuffer(2, ExtMapBuffer);
   ArraySetAsSeries(ExtMapBuffer, true);
//----
   SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2);
   SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,2);
//----
   IndicatorShortName("Signal Line("+period+")");
   return(0);
  }
//+------------------------------------------------------------------+ 
//| Custor indicator deinitialization function                       | 
//+------------------------------------------------------------------+ 
int deinit()
  { 
   return(0);
  } 
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double WMA(int x, int p)
  {
   return(iMA(NULL, 0, p, 0, method, price, x));
  }
//+------------------------------------------------------------------+ 
//| Custom indicator iteration function                              | 
//+------------------------------------------------------------------+ 
int start()
  {
   int counted_bars=IndicatorCounted();
   if(counted_bars < 0)
      return(-1);
//----
   int x=0;
   int p=MathSqrt(period);
   int e=Bars - counted_bars + period + 1;
//----
   double vect[], trend[];
//----
   if(e > Bars)
      e=Bars;
//----
   ArrayResize(vect, e);
   ArraySetAsSeries(vect, true);
   ArrayResize(trend, e);
   ArraySetAsSeries(trend, true);
//----
   for(x=0; x < e; x++)
     {
      vect[x]=2*WMA(x, period/2) - WMA(x, period);
      }
   for(x=0; x < e-period; x++)
//----
      ExtMapBuffer[x]=iMAOnArray(vect, 0, p, 0, method, x);
   for(x=e-period; x>=0; x--)
     {
      trend[x]=trend[x+1];
      if (ExtMapBuffer[x]> ExtMapBuffer[x+1]) trend[x] =1;
      if (ExtMapBuffer[x]< ExtMapBuffer[x+1]) trend[x] =-1;
      if (trend[x]>0)
        { 
         Uptrend[x]=ExtMapBuffer[x];
         if (trend[x+1]<0) Uptrend[x+1]=ExtMapBuffer[x+1];
         Dntrend[x]=EMPTY_VALUE;
        }
      else
         if (trend[x]<0)
           {
            Dntrend[x]=ExtMapBuffer[x];
            if (trend[x+1]>0) Dntrend[x+1]=ExtMapBuffer[x+1];
            Uptrend[x]=EMPTY_VALUE;
           }
      }
   return(0);
  }
//+------------------------------------------------------------------+
 

gilato

Forumer attivo
devi scrivere così

PlotChart(mmhull, 0, COLUPDOWNVAL, solid, 2);

E' un po' che seguo i cicli,
ho letto in giro della media mobile di Hull,
detta HMA, che riesca ad indicare abbastanza bene l'evoluzione
del ciclo in esame, usando i giusti settaggi.

Ho trovato la formula
per Visual Trader, questa:

Var:p(100);
Var:demip,temp,racineP,mmhull;
Var:demipp;

demiP=round(p/2,0);
temp=op(op(mov(c,demip,a),constval(2),mul),mov(c,p,a),sub);
racinep=round(sqrt(p),0);
mmhull=mov(temp,racinep,a);

plotchart(mmhull,0,blue,solid,2);




Funziona molto bene, inserendola da
tools/inserisci trading system ....,
va be questo lo sapete gia,
ho anche impostato in modo che cambi colore
nelle fasi di rialzo e ribasso in questo modo:

'colore up valore>valore precedente'

però, ecco il quesito per gli esperti,
dopo la chiusura e riapertura di Visual Trader,
perdo il settaggio, praticamente la linea torna di un colore unico.

Come posso modificare la formula
in modo che rimanga la mia impostazione ???

Grazie in anticipo !!

Ciao a tutti
 

Conte Vlad

Muttley fa qualcosa!
Salve... uso questo codice con VT5 per generare la media di hull...
Generlamente però osservo un'altra piattaforma, MetaTrader4 e l'indicatore della hull è un pò diverso ed ha un codice decisamente più complesso...
Di programmazione non so molto, anzi, quasi nulla ....

Con il codice della hull su VT5 ho notato che la media non tiene conto dell'ultima candela e questo è un grosso problema .... mentre su MT4, l'altro codice gestisce la candela corso ...

Il codice è questo sotto, c'è qualcuno in grado di capire le differenze e tradurlo in VT5?? :bow:

Codice:
//+---------------------------------------------------------------------------+ 
//| HMA.mq4                                                                   |
//| Copyright © 2006 WizardSerg <[email protected]>, ForexMagazine #104      |
//| [email protected]                                                        |
//| Revised by IgorAD,[email protected]                                  |   
//| Personalized by iGoR AKA FXiGoR for the Trend Slope Trading method (T_S_T)|
//| Link:                                                                     |
//| contact: [email protected]                                      |                                
//+---------------------------------------------------------------------------+
#property copyright "MT4 release WizardSerg <[email protected]>, ?? ??????? ForexMagazine #104"
#property link      "[email protected]"
//----
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 White
#property indicator_color2 Red
//---- input parameters 
extern int       period=15;
extern int       method=3;                        
extern int       price=0;                           
//---- buffers 
double Uptrend[];
double Dntrend[];
double ExtMapBuffer[];
//+------------------------------------------------------------------+ 
//| Custom indicator initialization function                         | 
//+------------------------------------------------------------------+ 
int init()
  {
   IndicatorBuffers(3);
   SetIndexBuffer(0, Uptrend);
   //ArraySetAsSeries(Uptrend, true); 
   SetIndexBuffer(1, Dntrend);
   //ArraySetAsSeries(Dntrend, true); 
   SetIndexBuffer(2, ExtMapBuffer);
   ArraySetAsSeries(ExtMapBuffer, true);
//----
   SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2);
   SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,2);
//----
   IndicatorShortName("Signal Line("+period+")");
   return(0);
  }
//+------------------------------------------------------------------+ 
//| Custor indicator deinitialization function                       | 
//+------------------------------------------------------------------+ 
int deinit()
  { 
   return(0);
  } 
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double WMA(int x, int p)
  {
   return(iMA(NULL, 0, p, 0, method, price, x));
  }
//+------------------------------------------------------------------+ 
//| Custom indicator iteration function                              | 
//+------------------------------------------------------------------+ 
int start()
  {
   int counted_bars=IndicatorCounted();
   if(counted_bars < 0)
      return(-1);
//----
   int x=0;
   int p=MathSqrt(period);
   int e=Bars - counted_bars + period + 1;
//----
   double vect[], trend[];
//----
   if(e > Bars)
      e=Bars;
//----
   ArrayResize(vect, e);
   ArraySetAsSeries(vect, true);
   ArrayResize(trend, e);
   ArraySetAsSeries(trend, true);
//----
   for(x=0; x < e; x++)
     {
      vect[x]=2*WMA(x, period/2) - WMA(x, period);
      }
   for(x=0; x < e-period; x++)
//----
      ExtMapBuffer[x]=iMAOnArray(vect, 0, p, 0, method, x);
   for(x=e-period; x>=0; x--)
     {
      trend[x]=trend[x+1];
      if (ExtMapBuffer[x]> ExtMapBuffer[x+1]) trend[x] =1;
      if (ExtMapBuffer[x]< ExtMapBuffer[x+1]) trend[x] =-1;
      if (trend[x]>0)
        { 
         Uptrend[x]=ExtMapBuffer[x];
         if (trend[x+1]<0) Uptrend[x+1]=ExtMapBuffer[x+1];
         Dntrend[x]=EMPTY_VALUE;
        }
      else
         if (trend[x]<0)
           {
            Dntrend[x]=ExtMapBuffer[x];
            if (trend[x+1]>0) Dntrend[x+1]=ExtMapBuffer[x+1];
            Uptrend[x]=EMPTY_VALUE;
           }
      }
   return(0);
  }
//+------------------------------------------------------------------+


Non c'è nessuno che ha notato il problema delle hull in VT5 ??
e che sappia tradurre il codice di MT4? :rolleyes:
 
Vi segnalo le formule corrette(secondo me) di filtraggio secondo modalità conosciute.

Moving Averages

Inoltre è apparsa recentemente sul palcoscenico mondiale una misteriosa GEMA che viene venduta a caro prezzo.

Gaussian Exponential Moving Average.

Il nome pomposo e credo poco corretto si traduce in un artifizio contabile che trovate al link seguente, risparmiando soldi e credo tempo.

gEMA


In pratica filtra un prezzo+incremento dello smoothing esponenziale.

Non commento, magari fa miracoli. Magari no.
 
Ultima modifica:

tucciotrader

Trader Calabrese
Se può interessare, la HMA per Amibroker:
Codice:
_SECTION_BEGIN("Hull Moving Average");
// Hull Moving Average
P = ParamField("Price field",-1);
period = Param("Periodo",16,0,512);
sqrtperiod = sqrt(period);
Hull = WMA(2*WMA(P,period/2)-WMA(P,period),LastValue(sqrtperiod));
Colore = IIf(Hull >= Ref(Hull,-1),ParamColor("Colore Up",colorWhite),ParamColor("Colore Down",colorViolet));
Plot(Hull,"Hull",Colore,ParamStyle("Style")+styleNoTitle);
_SECTION_END();
 

reef

...
C'è pure la ALMA che è fichissima (Arnaud Legoux Moving Average).
Googlando trovate il suo sito e il PDF di supporto.

Codice:
/*________________________________________________________________________________________________
AFL code by hiscores. Originally posted here http://finance.groups.yahoo.com/grou...message/154257
 
Minor mod by rmike to Modify the AFL in conformance with NinjaTrader & Metatrader
releases by the original developer. 
 
Release Date - 09 Nov 10
 
AFL Usage - Moving Average. Further information Can be found at http://www.arnaudlegoux.com/
________________________________________________________________________________________________*/
 
_SECTION_BEGIN("ALMA");
p = ParamField("Price Field");
windowSize = Param("Window Size", 9, 5, 201, 2);
sigma = Param("Sigma", 6, 1, 20);
Offset = Param("Offset", 0.85, 0.05, 1.0, 0.05);
 
m = floor(Offset * (windowSize - 1));
s = windowSize / sigma;
 
w = 0;
wSum = 0;
 
for(i = 1; i < windowSize; i++)
{
     w[i] = exp(-((i-m)*(i-m))/(2*s*s));
     wSum += w[i];
}
 
for(i = 1; i < windowSize; i++)
{
     w[i] = w[i] / wSum;
}
 
alma = Null;
 
for(j = 1; j < BarCount; j++)
{
     alSum = 0;
 
     if(j < windowSize)
     {
         alma[j] = Null;
     }
     else
     {
         for(i = 1; i < windowSize; i++)
         {
             alSum += p[j - (windowSize - 1 - i)] * w[i];
         }
 
         alma[j] = alSum;
     }
}
 
Plot(alma, "ALMA("+windowSize+","+sigma+","+Offset+")", ParamColor("ALMA Color", colorRed), ParamStyle("ALMA Style", styleLine|styleThick|styleNoLabel), maskDefault);  
_SECTION_END();

Tutte 'ste medie mobili... Alla fine sono anche troppe la SMA e l'EMA :rolleyes:
 
Ultima modifica:

Users who are viewing this thread

Alto