Download MetaTrader 5

FRAMAOsma....

To add comments, please log in or register
lorsotoro
69
lorsotoro  

I've modified FRAMA Ehlers in FRAMAOsma but I've two problems....

1) the values of osma compared to the values of frama and signal are too small and I can't see any of the 3 values.

2) when I change time-frame or re-start metatrader program, the history of OSMA histogram disappears.

the code is right...

.......where do I wrong?!?

Thanks for yours helping!
:-)

//
//+------------------------------------------------------------------+
// FRAMAOsma
//
// Description: Fractal Adaptive Moving Average - by John Ehlers
// Version 1.1 7/17/2006
//
// Heavily modified and reprogrammed by Matt Kennel (mbkennelfx@gmail.com)
//
// Notes:
// October 2005 Issue - "FRAMA - Fractal Adaptive Moving Average"
// Length will be forced to be an even number. Odd numbers will be bumped up to the
// next even number.
// Formula Parameters: Defaults:
// RPeriod 16

#property copyright "Copyright © 2005, MrPip " // and mbkennel
#property link "http://www.metaquotes.net/"

//---- indicator settings
#property indicator_separate_window
#property indicator_buffers 4
#property indicator_color1 Red
#property indicator_color2 Lime
#property indicator_color3 Red
#property indicator_color4 Lime

//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
double ExtMapBuffer3[];
double ExtMapBuffer4[];

extern int RPeriod = 16;
extern double multiplier = 4.6;
extern double signal_multiplier = 2.5;

//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{


//---- 1 additional buffers are used for counting.
IndicatorBuffers(4);

//---- drawing settings
SetIndexBuffer(0,ExtMapBuffer1);
SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2);
SetIndexShift(0,0);
IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS));
SetIndexBuffer(1,ExtMapBuffer2);
SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,2);
SetIndexShift(1,0);
SetIndexBuffer(2,ExtMapBuffer3);
SetIndexStyle (2,DRAW_HISTOGRAM);
SetIndexShift(2,0);
SetIndexBuffer(3,ExtMapBuffer4);
SetIndexStyle (3,DRAW_HISTOGRAM);
SetIndexShift(3,0);

//---- initialization done
return(0);
}

int start()
{
int i,k,counted_bars=IndicatorCounted();

if (Bars < RPeriod) return(0);
Comment("Bars : ",Bars);
int maxshift = Bars-RPeriod-1;
int limit= maxshift - counted_bars;
if (limit < 1) limit = 1;

int N = MathFloor(RPeriod/2)*2; // Force N to even number
double frama = Close[maxshift];
double signal = frama;

ExtMapBuffer1[maxshift] = Close[maxshift];
ExtMapBuffer2[maxshift] = Close[maxshift];

for(int shift = limit-1; shift >= 0; shift--) {
double dimension_estimate = DEst(shift,N);

double alpha = MathExp(-multiplier*(dimension_estimate-1.0));
double alphas = MathExp(-signal_multiplier*(dimension_estimate-1.0));

if (alpha > 1.0) alpha = 1.0;
if (alpha < 0.01) alpha = 0.01;
if (alphas > 1.0) alphas = 1.0;
if (alphas < 0.01) alphas = 0.01;

frama = alpha* Close[shift] + (1.0-alpha)* ExtMapBuffer1[shift+1];
signal = alphas * frama + (1.0 - alphas)* ExtMapBuffer2[shift+1];

ExtMapBuffer1[shift] = frama;
ExtMapBuffer2[shift] = signal;
ExtMapBuffer3[shift] = EMPTY_VALUE;
ExtMapBuffer4[shift] = EMPTY_VALUE;

double FRAMAOsma = (ExtMapBuffer1[shift]-ExtMapBuffer2[shift]);

if(FRAMAOsma > 0)
ExtMapBuffer3[i] = FRAMAOsma;
else ExtMapBuffer4[i] = FRAMAOsma;
}
return(0);
}


double DEst(int shift, int n) {
//
double R1, R2, R3;
int n2 = n/2;

R3 = Range(shift,n) / n;
R1 = Range(shift,n2) / n2;
R2 = Range(shift+n2,n2) / n2;

return( (MathLog(R1+R2)-MathLog(R3) )* 1.442695 ) ; // log_2(e) = 1.442694




}

double Range(int i, int k)
{
return( High[Highest(NULL,0,MODE_HIGH,k,i)] - Low[Lowest(NULL,0,MODE_LOW,k,i)] );
}

__________________

To add comments, please log in or register