Double Weighted Moving Average for Amibroker (AFL)

Double Weighted Moving Average for Amibroker (AFL)


This is Double Weighted Moving Average (DWMA), like DEMA

DWMA can be used for Hull Moving Average Cross Over Strategies, like how Jurik is using DWMA for Cross Overs



//////////////////////////////////////////////////////////////////

_SECTION_BEGIN("Chart Settings");
 
OUTcolor = ParamColor("Outer Panel Color",ColorRGB(25, 25, 25));
IINUPcolor = ParamColor("Inner Panel Upper",ColorRGB(45, 45, 45));
INDNcolor = ParamColor("Inner Panel Lower",ColorRGB(45, 45, 45));
TitleColor = ParamColor("Title Color ",ColorRGB(25, 25, 25));

SetChartOptions(0,chartShowDates|chartShowArrows);

stn= Param("Digit Length",10,1,40,1);
td=1.2;//String Decimals
TickSz = 0.05;

GraphXSpace=10;

_SECTION_END();

//////////////////////////////////////////////////////////////////

_SECTION_BEGIN("Background Text");

C11=ParamColor("up panel",ColorRGB(25, 25, 25));
C12=ParamColor("dn panel",ColorRGB(25, 25, 25) );
C13=Param("fonts",20,10,50,1 );
C14=Param("left-right",2.1,1.0,5.0,0.1 );
C15=Param("up-down",8,1,30,1 );
Miny = Status("axisminy");
Maxy = Status("axismaxy");
lvb = Status("lastvisiblebar");
fvb = Status("firstvisiblebar");
pxwidth = Status("pxwidth");
pxheight = Status("pxheight");
GfxSetBkMode( 0 );
GfxSelectFont("Verdana", 12, 500, False, False, 0);
GfxSetTextColor(ColorRGB(34, 34, 34));
GfxSetTextAlign( 6 );

pricechange=(C-Ref(C,-1))*100/Ref(C,-1);
changeponit=C-Ref(C,-1);
Vlp=Param("Volume lookback period",15,10,300,10);
Vrg=MA(V,Vlp);
St = StDev(Vrg,Vlp);
Vp3 = Vrg + 3*st;
Vp2 = Vrg + 2*st;;
Vp1 = Vrg + 1*st;;
Vn1 = Vrg -1*st;
Vn2 = Vrg -2*st;

x=Param("xposn",1,0,1000,1);
y=Param("yposn",1,0,1000,1);

GfxGradientRect( 1, 1, 2000, 60, ColorRGB(25, 25, 25), ColorRGB(25, 25, 25));GfxSetBkMode(0);

_SECTION_END();

//////////////////////////////////////////////////////////////////

_SECTION_BEGIN("Name, Date & Time");

GfxSelectFont( "Verdana", 16, 600, False );
GfxSetTextColor( colorRGB(251,251,0));
GfxTextOut( Name(), x+150, y+10);

GfxSelectFont( "Verdana", 14, 600, False );
GfxSetTextColor(colorRGB(255,255,255));
GfxTextOut( Date(), x+400, y+10 );

_SECTION_END();

//////////////////////////////////////////////////////////////////

_SECTION_BEGIN("Time Left");

function GetSecondNum()
{
Time = Now( 4 );
Seconds = int( Time % 100 );
Minutes = int( Time / 100 % 100 );
Hours = int( Time / 10000 % 100 );
SecondNum = int( Hours * 60 * 60 + Minutes * 60 + Seconds );
return SecondNum;
}
RequestTimedRefresh( 1 );
TimeFrame = Interval();
SecNumber = GetSecondNum();
Newperiod = SecNumber % TimeFrame == 0;
SecsLeft = SecNumber - int( SecNumber / TimeFrame ) * TimeFrame;
SecsToGo = TimeFrame - SecsLeft;

GfxSelectSolidBrush( ColorRGB(0,0,0));
GfxSelectPen( ColorRGB(0,0,0) , 3 );
if ( NewPeriod )
{
GfxSelectSolidBrush( ColorRGB(0,0,0));
GfxSelectPen( colorRGB(0,0,0), 3 );
}

GfxSelectFont( "Verdana", 14, 600, False );
GfxSetTextColor( colorRGB(255, 119, 255) );
GfxTextOut( "Time Left:" +SecsToGo+"/" +NumToStr( TimeFrame, 1.0 ), x+650, y+10 );

_SECTION_END();

//////////////////////////////////////////////////////////////////

_SECTION_BEGIN("Current Market Price");

GfxSelectFont("Verdana", 18, 600, False  );
GfxSetTextColor( colorRGB(161, 202, 241));
GfxTextOut("LTP:" +WriteVal(C,td), x+1200,y+35 );

_SECTION_END();

//////////////////////////////////////////////////////////////////

_SECTION_BEGIN("O,H,L,C,V");

GfxSelectFont( "Verdana", 14, 600, False );
GfxSetTextColor( ColorRGB(255,255,255) );
GfxTextOut( "Open:"+WriteVal(O,td), x+850, y+10 );

GfxSelectFont( "Verdana", 14, 600, False );
GfxSetTextColor( ColorRGB(0,255,0) );
GfxTextOut( "High:"+WriteVal(H,td), x+1050, y+10 );

GfxSelectFont( "Verdana", 14, 600, False );
GfxSetTextColor( colorRGB(255, 69, 0) );
GfxTextOut( "Low:"+WriteVal(L,td), x+1250, y+10 );

GfxSelectFont( "Verdana", 14, 600, False );
GfxSetTextColor( colorRGB(255,255,0) );
GfxTextOut( "Close:"+WriteVal(C,td), x+1450, y+10 );

td1 = 1.0; //String Decimals

GfxSelectFont( "Verdana", 14, 600, False );
GfxSetTextColor( colorRGB(255, 119, 255) );
GfxTextOut( "Vol:"+WriteVal(V,td1, stn), x+1650, y+10 );

_SECTION_END();

//////////////////////////////////////////////////////////////////

_SECTION_BEGIN("Heiken Ashi");

HaClose[0] = (Open[0]+High[0]+Low[0]+Close[0]) / 4;
HaOpen[0]  = (HaClose[0] + Open[0]) / 2;
HaHigh[0]  = Max( High[0], Max( HaClose[0], HaOpen[0] ) );
HaLow[0]   = Min( Low[0], Min( HaClose[0], HaOpen[0] ) );

for (i=1; i<BarCount; i++)
    {
    HaClose[i] = (Open[i]+High[i]+Low[i]+Close[i]) / 4;
    Haopen[i]  = (HaClose[i-1] + HaOpen[i-1]) / 2; // Here is the problem when using Arrays: Haopen always uses its own previous value
    HaHigh[i]  = Max( High[i], Max( HaClose[i], HaOpen[i] ) );
    Halow[i]   = Min( Low[i], Min( HaClose[i], HaOpen[i] ) );
}

range = 3;

BarColor = IIf( PDI(range) > MDI(range), ColorRGB(222, 236, 255),ColorRGB(30, 144, 255));

PlotOHLC( HaOpen, HaHigh, HaLow, HaClose, " " , BarColor, styleCandle|styleNoLabel, Null, Null, 0, 0, 3);

_SECTION_END();

//////////////////////////////////////////////////////////////////

_SECTION_BEGIN("Price Line");

PriceLineColor=ColorRGB(161, 202, 241);
Barsback = 500;
FirstBar = BarCount - BarsBack;
YY = IIf(BarIndex() >= Firstbar,EndValue(C),Null);

Plot(YY,"Current Price",PriceLineColor, styleLine|styleNoLabel|styleThick, 2);

side = 1;

dist = 0;

for( i = 0; i < BarCount; i++ )

if(i+side== BarCount) PlotText( "\n " + C[ i ] ,  i, YY[ i ]-dist, ColorRGB(255, 8, 0));

_SECTION_END();

//////////////////////////////////////////////////////////////////

_SECTION_BEGIN("Double Weighted Moving Averages");

AP = (HaLow+HaHigh)/2;


// DWMA 9

function DWMA(price,periods)
{

e1=WMA(price,periods);
e2=WMA(e1,Periods);

DWMAi=2*e1-e2;
return DWMAi;
}

MA1 = DWMA(AP, 9);

Plot ( MA1, " ", ColorRGB(255, 0, 255) ,  styleNoLabel, Null, Null, 0 , 0, 2);

// HMA 13

MA2 = HMA(AP, 13);

Plot ( MA2, " ", ColorRGB(255, 255, 0) , styleNoLabel, Null, Null, 0 , 0, 2);



_SECTION_END();

//////////////////////////////////////////////////////////////////

_SECTION_BEGIN("Mood");


BKswitch = ParamToggle("Mood","On,Off");

OUTcolor = ParamColor("Outer Panel Color",ColorRGB(25, 25, 25));
INUPcolor = ParamColor("Inner Panel Upper",ColorRGB(45, 45, 45));
INDNcolor = ParamColor("Inner Panel Lower",ColorRGB(45, 45, 45));
TitleColor = ParamColor("Title Color ",ColorRGB(25, 25, 25));
if (NOT BKswitch)
{
SetChartBkColor(OUTcolor); // color of outer border
SetChartBkGradientFill(INUPcolor,INDNcolor,TitleColor); // color of inner panel
}

_SECTION_END();

//////////////////////////////////////////////////////////////////

Comments