TMA Slope
TMA Slope
03 Jun 2013, 23:08
Hi,
can somebody help me to make TMA Slope. This 3 functions is need to calc TMA Slope - from mq4:
//+------------------------------------------------------------------+
//| GetSlope() |
//+------------------------------------------------------------------+
double GetSlope(string symbol, int tf, int shift)
{
double dblTma, dblPrev;
double atr = iATR(symbol, tf, 100, shift + 10) / 10;
double gadblSlope = 0.0;
if ( atr != 0 )
{
dblTma = calcTmaTrue( symbol, tf, shift );
dblPrev = calcPrevTrue( symbol, tf, shift );
gadblSlope = ( dblTma - dblPrev ) / atr;
}
return ( gadblSlope );
}//End double GetSlope(int tf, int shift)
//+------------------------------------------------------------------+
//| calcTmaTrue() |
//+------------------------------------------------------------------+
double calcTmaTrue( string symbol, int tf, int inx )
{
return ( iMA( symbol, tf, 21, 0, MODE_LWMA, PRICE_CLOSE, inx ) );
}
//+------------------------------------------------------------------+
//| calcPrevTrue() |
//+------------------------------------------------------------------+
double calcPrevTrue( string symbol, int tf, int inx )
{
double dblSum = iClose( symbol, tf, inx + 1 ) * 21;
double dblSumw = 21;
int jnx, knx;
dblSum += iClose( symbol, tf, inx ) * 20;
dblSumw += 20;
for ( jnx = 1, knx = 20; jnx <= 20; jnx++, knx-- )
{
dblSum += iClose( symbol, tf, inx + 1 + jnx ) * knx;
dblSumw += knx;
}
return ( dblSum / dblSumw );
}
Replies
DomnikInvest
04 Jun 2013, 17:39
Now I add reference and now is withaut errors but dont work
//#reference: C:\Users\ToTo\Documents\cAlgo\Sources\Indicators\AverageTrueRange.algo // ------------------------------------------------------------------------------- // // This is a Template used as a guideline to build your own Robot. // Please use the “Feedback” tab to provide us with your suggestions about cAlgo’s API. // // ------------------------------------------------------------------------------- using System; using cAlgo.API; using cAlgo.API.Indicators; namespace cAlgo.Indicators { [Indicator(IsOverlay = false)] public class TMASlope : Indicator { private AverageTrueRange _averageTrueRange; private TriangularMovingAverage _triangularMovingAverage; [Parameter(DefaultValue = 0.0)] public double Parameter { get; set; } [Output("Main", Color = Colors.Turquoise, PlotType = PlotType.Histogram)] public IndicatorDataSeries Result { get; set; } protected override void Initialize() { _triangularMovingAverage = Indicators.TriangularMovingAverage(MarketSeries.Close, 21); _averageTrueRange = Indicators.GetIndicator<AverageTrueRange>(100); } double calcPrevTrue( int index ) { double dblSum = MarketSeries.Close[ index + 1] * 21; double dblSumw = 21; int jnx, knx; dblSum += MarketSeries.Close[ index ] * 20; dblSumw += 20; for ( jnx = 1, knx = 20; jnx <= 20; jnx++, knx-- ) { dblSum += MarketSeries.Close[index + 1 + jnx ] * knx; dblSumw += knx; } return ( dblSum / dblSumw ); } public override void Calculate(int index) { double dblTma, dblPrev; double atr =_averageTrueRange.Result[index + 10] / 10; double gadblSlope = 0.0; if ( atr != 0 ) { dblTma = _triangularMovingAverage.Result[index]; dblPrev = calcPrevTrue( index ); gadblSlope = ( dblTma - dblPrev ) / atr; } Result[index] = gadblSlope ; } } }
@DomnikInvest
cAlgo_Fanatic
04 Jun 2013, 18:09
In the Calculate method index is the last index of the series at the moment. Therefore any value such as:
MarketSeries.Close[index + 1 + jnx ]
does not exist yet.
You want to calculate backwards by subtracting from the last index instead of adding.
@cAlgo_Fanatic
DomnikInvest
04 Jun 2013, 18:42
Please can you help me to fix the code its my first time with C# and I am stil confused - If you can show me how to fix I can learn from this for the future....THX
@DomnikInvest
cAlgo_Fanatic
05 Jun 2013, 09:53
Start by changing the lines where you are adding to the index to subtract instead and see if this is the desired outcome of the indicator like so:
double dblSum = MarketSeries.Close[ index - 1] * 21; //... dblSum += MarketSeries.Close[index - 1 - jnx] * knx; //... double atr = _averageTrueRange.Result[index - 10] / 10;
@cAlgo_Fanatic
DomnikInvest
05 Jun 2013, 14:17
Thanks I already see where was the problem.... THX anyway
@DomnikInvest
DomnikInvest
05 Jun 2013, 15:38
Add levels
Hi,
how can I add 2 levels 0.5 and -0.5, 0.8 and -0.8 for example?
//#reference: C:\Users\ToTo\Documents\cAlgo\Sources\Indicators\AverageTrueRange.algo // ------------------------------------------------------------------------------- // // This is a Template used as a guideline to build your own Robot. // Please use the “Feedback” tab to provide us with your suggestions about cAlgo’s API. // // ------------------------------------------------------------------------------- using System; using cAlgo.API; using cAlgo.API.Indicators; namespace cAlgo.Indicators { [Indicator(IsOverlay = false)] public class TMASlope : Indicator { private AverageTrueRange _averageTrueRange; private TriangularMovingAverage _triangularMovingAverage; [Parameter(DefaultValue = 0.0)] public double Parameter { get; set; } [Output("Main", Color = Colors.Turquoise, PlotType = PlotType.Histogram)] public IndicatorDataSeries Result { get; set; } protected override void Initialize() { _triangularMovingAverage = Indicators.TriangularMovingAverage(MarketSeries.Close, 21); _averageTrueRange = Indicators.GetIndicator<AverageTrueRange>(100); } double calcPrevTrue( int index ) { double dblSum = MarketSeries.Close[ index - 1] * 21; double dblSumw = 21; int jnx, knx; dblSum -= MarketSeries.Close[ index ] * 20; dblSumw -= 20; for ( jnx = 1, knx = 20; jnx <= 20; jnx++, knx-- ) { dblSum -= MarketSeries.Close[index - 1 - jnx ] * knx; dblSumw -= knx; } return ( dblSum / dblSumw ); } public override void Calculate(int index) { double dblTma, dblPrev; double atr =_averageTrueRange.Result[index - 10] / 10; double gadblSlope = 0.0; if ( atr != 0 ) { dblTma = _triangularMovingAverage.Result[index]; dblPrev = calcPrevTrue( index ); gadblSlope = ( dblPrev - dblTma ) / atr; } Result[index] = gadblSlope ; } } }
@DomnikInvest
DomnikInvest
05 Jun 2013, 15:40
right code!!!
//#reference: C:\Users\ToTo\Documents\cAlgo\Sources\Indicators\AverageTrueRange.algo // ------------------------------------------------------------------------------- // // This is a Template used as a guideline to build your own Robot. // Please use the “Feedback” tab to provide us with your suggestions about cAlgo’s API. // // ------------------------------------------------------------------------------- using System; using cAlgo.API; using cAlgo.API.Indicators; namespace cAlgo.Indicators { [Indicator(IsOverlay = false)] public class TMASlope_11 : Indicator { private AverageTrueRange _averageTrueRange; private WeightedMovingAverage _weightedMovingAverage; [Parameter(DefaultValue = 0.0)] public double Parameter { get; set; } [Output("Main", Color = Colors.Turquoise, PlotType = PlotType.Histogram)] public IndicatorDataSeries Result { get; set; } protected override void Initialize() { _weightedMovingAverage = Indicators.WeightedMovingAverage(MarketSeries.Close, 21); _averageTrueRange = Indicators.GetIndicator<AverageTrueRange>(100); } double calcPrevTrue( int index ) { double dblSum = MarketSeries.Close[ index - 1] * 21; double dblSumw = 21; int jnx, knx; dblSum += MarketSeries.Close[ index ] * 20; dblSumw += 20; for ( jnx = 1, knx = 20; jnx <= 20; jnx++, knx-- ) { dblSum += MarketSeries.Close[index - 1 - jnx ] * knx; dblSumw += knx; } return ( dblSum / dblSumw ); } public override void Calculate(int index) { double dblTma, dblPrev; double atr =_averageTrueRange.Result[index - 10] / 10; double gadblSlope = 0.0; if ( atr != 0 ) { dblTma =_weightedMovingAverage.Result[index]; dblPrev = calcPrevTrue( index ); gadblSlope = ( dblTma-dblPrev ) / atr; } Result[index] = gadblSlope ; } } }
@DomnikInvest
DomnikInvest
04 Jun 2013, 16:51
This is my first time diling with C# so be patience...hehe ... pleas help me ... I get error... And I dont know if I am going right way...
// -------------------------------------------------------------------------------
//
// This is a Template used as a guideline to build your own Robot.
// Please use the “Feedback” tab to provide us with your suggestions about cAlgo’s API.
//
// -------------------------------------------------------------------------------
using System;
using cAlgo.API;
using cAlgo.API.Indicators;
namespace cAlgo.Indicators
{
[Indicator(IsOverlay = false)]
public class TMASlope : Indicator
{
private AverageTrueRange _averageTrueRange;
private TriangularMovingAverage _triangularMovingAverage;
[Parameter(DefaultValue = 0.0)]
public double Parameter { get; set; }
[Output("Main", Color = Colors.Turquoise, PlotType = PlotType.Histogram)]
public IndicatorDataSeries Result { get; set; }
protected override void Initialize()
{
_triangularMovingAverage = Indicators.TriangularMovingAverage(MarketSeries.Close, 21);
_averageTrueRange = Indicators.GetIndicator<AverageTrueRange>(100);
}
double calcPrevTrue( int index )
{
double dblSum = MarketSeries.Close[ index + 1] * 21;
double dblSumw = 21;
int jnx, knx;
dblSum += MarketSeries.Close[ index ] * 20;
dblSumw += 20;
for ( jnx = 1, knx = 20; jnx <= 20; jnx++, knx-- )
{
dblSum += MarketSeries.Close[index + 1 + jnx ] * knx;
dblSumw += knx;
}
return ( dblSum / dblSumw );
}
public override void Calculate(int index)
{
double dblTma, dblPrev;
double atr = _averageTrueRange.Result[index + 10] / 10;
double gadblSlope = 0.0;
if ( atr != 0 )
{
dblTma = _triangularMovingAverage.Result[index];
dblPrev = calcPrevTrue( index );
gadblSlope = ( dblTma - dblPrev ) / atr;
}
Result[index] = gadblSlope ;
}
}
}
@DomnikInvest