FRAMAOsma....

 

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)] );
}

__________________