int MaPeriod = 1; // MA Period int MaShift = 0; // MA Shift ENUM_MA_METHOD MaMethod = MODE_SMA; // MA Method ENUM_APPLIED_PRICE MaPrice = PRICE_OPEN; // MA Close Price int OpenBar = 0; // MA Open Bar Shift int HighBar = 0; // MA High Bar Shift int LowBar = 0; // MA Low Bar Shift int CloseBar = 0; // MA Close Bar Shift void OnTick() { if((iHAMA(0)==0 && iHAMA(1)==1) || (iHAMA(0)==1 && iHAMA(1)==0) ) { //close all } if(iHAMA(0)==1) { //sell } else { if(iHAMA(0)==0) { //buy } } } int iHAMA(int bar) { double maOpen,maHigh,maLow,maClose,haOpen,haClose; double ExtMapBuffer1[30]; double ExtMapBuffer2[30]; ArrayFill(ExtMapBuffer1,0,30,0); ArrayFill(ExtMapBuffer2,0,30,0); for(int iCntr=15; iCntr>=0; iCntr--) { maOpen=iMA(NULL,0,MaPeriod,0,MaMethod,PRICE_OPEN,iCntr+OpenBar); maHigh=iMA(NULL,0,MaPeriod,0,MaMethod,PRICE_HIGH,iCntr+HighBar); maLow=iMA(NULL,0,MaPeriod,0,MaMethod,PRICE_LOW,iCntr+LowBar); maClose=iMA(NULL,0,MaPeriod,0,MaMethod,MaPrice,iCntr+CloseBar); haOpen=(ExtMapBuffer1[iCntr+1]+ExtMapBuffer2[iCntr+1])/2; haClose=(maOpen+maHigh+maLow+maClose)/4; ExtMapBuffer1[iCntr]=haOpen; ExtMapBuffer2[iCntr]=haClose; } if(ExtMapBuffer1[bar]>ExtMapBuffer2[bar]){return(OP_SELL);} if(ExtMapBuffer2[bar]>ExtMapBuffer1[bar]){return(OP_BUY);} return(-1); }