Miscellaneous
0
Views
0
Downloads
0
Favorites
FractalAMA_MBK_v1
//+----------------------------------------------------------------------------------+
//| FractalAMA |
//| |
//| 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_chart_window
#property indicator_buffers 2
#property indicator_color1 Red
#property indicator_color2 Blue
//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
//----
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(2);
//---- 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);
//---- 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;
}
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)] );
}
//+------------------------------------------------------------------+
Comments
Markdown Formatting Guide
# H1
## H2
### H3
**bold text**
*italicized text*
[title](https://www.example.com)

`code`
```
code block
```
> blockquote
- Item 1
- Item 2
1. First item
2. Second item
---