//+------------------------------------------------------------------+
//| TMA by jcl double SMA |
//+------------------------------------------------------------------+
double TMA(var *data,int period)
{
return SMA(series(SMA(data,period)),period);
}
//+------------------------------------------------------------------+
//| calcTmaTrue() |
//+------------------------------------------------------------------+
double calcTmaTrue( int inx )
{
// return ( iMA( symbol, tf, 21, 0, MODE_LWMA, PRICE_CLOSE, inx ) );
vars Close = series(priceClose());
double dblSum = 0;
double dblSumw = 0;
int jnx, knx;
int sundayCandles = 0;
for ( jnx = 0, knx = 21; jnx < 21; jnx++, knx-- )
{
dblSum += Close[inx + jnx + sundayCandles] * knx;
dblSumw += knx;
}
return ( dblSum / dblSumw );
}
//+------------------------------------------------------------------+
//| calcPrevTrue() |
//+------------------------------------------------------------------+
double calcPrevTrue( int inx )
{
vars Close = series(priceClose());
double dblSum = Close[ inx ] * 20;
double dblSumw = 20;
int jnx, knx;
int sundayCandles = 0;
for ( jnx = 1, knx = 21; jnx < 22; jnx++, knx-- )
{
dblSum += Close[ inx + jnx + sundayCandles ] * knx;
dblSumw += knx;
}
return ( dblSum / dblSumw );
}
//+------------------------------------------------------------------+
//| GetSlope() |
//+------------------------------------------------------------------+
double GetSlope(int shift)
{
int shiftWithoutSunday = shift;
double atr = ATR(100) / 10;
double gadblSlope = 0.0;
if ( atr != 0 )
{
double dblTma = calcTmaTrue( shiftWithoutSunday );
double dblPrev = calcPrevTrue( shiftWithoutSunday );
gadblSlope = ( dblTma - dblPrev ) / atr;
}
return ( gadblSlope );
}
function run()
{
BarPeriod = 240; // 4H Period
StartDate = 20120101;
EndDate = 20130701;
LookBack = 500;
set(PLOTNOW|PLOTPRICE);
vars Price = series(price());
vars TMATrue = series(calcTmaTrue(0));
vars jclTMA = series(TMA(Price,10)); //not sure what period meant to be but none match TMATrue
vars Slope = series(GetSlope(0));
vars RSISlope = series(RSI(Slope,2));
plot("TMATrue",TMATrue[0],0,BLUE);
plot("jclTMA",jclTMA[0],0,RED);
plot("SlopeTMATrue",Slope[0],NEW,RED);
plot("RSISlopeTMATrue",RSISlope[0],NEW,GREEN);
}