Warning! This section will be deprecated on February 1st 2025. Please move all your Indicators to the cTrader Store catalogue.
Description
Many pivot points are available on cTrader, but this one is necessary for the Telegram alert scanner. =)
Scanner here : https://ctrader.com/algos/cbots/show/4404/
Enjoy for Free =)
Previous account here : https://ctrader.com/users/profile/70920
Contact telegram : https://t.me/nimi012
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using cAlgo.API;
using cAlgo.API.Collections;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;
namespace cAlgo
{
[Indicator(IsOverlay = true, TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
public class PivotPointAIO : Indicator
{
[Parameter("Mode", DefaultValue = ModeType.FibonacciHighLowOnClose)]
public ModeType Mode { get; set; }
[Parameter("Time Frame", DefaultValue = "Month1")]
public TimeFrame TF { get; set; }
[Output("High", LineColor = "8EFFA500", PlotType = PlotType.Line, LineStyle = LineStyle.LinesDots, Thickness = 1)]
public IndicatorDataSeries h { get; set; }
[Output("Low", LineColor = "8EFFA500", PlotType = PlotType.Line, LineStyle = LineStyle.LinesDots, Thickness = 1)]
public IndicatorDataSeries l { get; set; }
[Output("Pivot", LineColor = "7200FFFF", PlotType = PlotType.Line, LineStyle = LineStyle.LinesDots, Thickness = 1)]
public IndicatorDataSeries p { get; set; }
[Output("M", LineColor = "8EFFA500", PlotType = PlotType.Line, LineStyle = LineStyle.LinesDots, Thickness = 1)]
public IndicatorDataSeries m { get; set; }
[Output("MH", LineColor = "6CFFFFFF", PlotType = PlotType.Line, LineStyle = LineStyle.LinesDots, Thickness = 1)]
public IndicatorDataSeries mh { get; set; }
[Output("ML", LineColor = "6CFFFFFF", PlotType = PlotType.Line, LineStyle = LineStyle.LinesDots, Thickness = 1)]
public IndicatorDataSeries ml { get; set; }
[Output("R1", LineColor = "66008000", PlotType = PlotType.Line, LineStyle = LineStyle.LinesDots, Thickness = 1)]
public IndicatorDataSeries r1 { get; set; }
[Output("R2", LineColor = "66008000", PlotType = PlotType.Line, LineStyle = LineStyle.LinesDots, Thickness = 1)]
public IndicatorDataSeries r2 { get; set; }
[Output("R3", LineColor = "66008000", PlotType = PlotType.Line, LineStyle = LineStyle.LinesDots, Thickness = 1)]
public IndicatorDataSeries r3 { get; set; }
[Output("R4", LineColor = "66008000", PlotType = PlotType.Line, LineStyle = LineStyle.LinesDots, Thickness = 1)]
public IndicatorDataSeries r4 { get; set; }
[Output("R5", LineColor = "66008000", PlotType = PlotType.Line, LineStyle = LineStyle.LinesDots, Thickness = 1)]
public IndicatorDataSeries r5 { get; set; }
[Output("R6", LineColor = "66008000", PlotType = PlotType.Line, LineStyle = LineStyle.LinesDots, Thickness = 1)]
public IndicatorDataSeries r6 { get; set; }
[Output("R7", LineColor = "66008000", PlotType = PlotType.Line, LineStyle = LineStyle.LinesDots, Thickness = 1)]
public IndicatorDataSeries r7 { get; set; }
[Output("R8", LineColor = "66008000", PlotType = PlotType.Line, LineStyle = LineStyle.LinesDots, Thickness = 1)]
public IndicatorDataSeries r8 { get; set; }
[Output("R9", LineColor = "66008000", PlotType = PlotType.Line, LineStyle = LineStyle.LinesDots, Thickness = 1)]
public IndicatorDataSeries r9 { get; set; }
[Output("R10", LineColor = "66008000", PlotType = PlotType.Line, LineStyle = LineStyle.LinesDots, Thickness = 1)]
public IndicatorDataSeries r10 { get; set; }
[Output("S1", LineColor = "47FF0000", PlotType = PlotType.Line, LineStyle = LineStyle.LinesDots, Thickness = 1)]
public IndicatorDataSeries s1 { get; set; }
[Output("S2", LineColor = "47FF0000", PlotType = PlotType.Line, LineStyle = LineStyle.LinesDots, Thickness = 1)]
public IndicatorDataSeries s2 { get; set; }
[Output("S3", LineColor = "47FF0000", PlotType = PlotType.Line, LineStyle = LineStyle.LinesDots, Thickness = 1)]
public IndicatorDataSeries s3 { get; set; }
[Output("S4", LineColor = "47FF0000", PlotType = PlotType.Line, LineStyle = LineStyle.LinesDots, Thickness = 1)]
public IndicatorDataSeries s4 { get; set; }
[Output("S5", LineColor = "47FF0000", PlotType = PlotType.Line, LineStyle = LineStyle.LinesDots, Thickness = 1)]
public IndicatorDataSeries s5 { get; set; }
[Output("S6", LineColor = "47FF0000", PlotType = PlotType.Line, LineStyle = LineStyle.LinesDots, Thickness = 1)]
public IndicatorDataSeries s6 { get; set; }
[Output("S7", LineColor = "47FF0000", PlotType = PlotType.Line, LineStyle = LineStyle.LinesDots, Thickness = 1)]
public IndicatorDataSeries s7 { get; set; }
[Output("S8", LineColor = "47FF0000", PlotType = PlotType.Line, LineStyle = LineStyle.LinesDots, Thickness = 1)]
public IndicatorDataSeries s8 { get; set; }
[Output("S9", LineColor = "47FF0000", PlotType = PlotType.Line, LineStyle = LineStyle.LinesDots, Thickness = 1)]
public IndicatorDataSeries s9 { get; set; }
[Output("S10", LineColor = "47FF0000", PlotType = PlotType.Line, LineStyle = LineStyle.LinesDots, Thickness = 1)]
public IndicatorDataSeries s10 { get; set; }
public IndicatorDataSeries NextHighPriceFibo, NextLowPriceFibo, NextHighPctFibo, NextLowPctFibo;
public string HighPivot, LowPivot;
private Bars pivotBars;
public IndicatorDataSeries[] res;
public IndicatorDataSeries[] breakPlus;
public IndicatorDataSeries[] breakMinus;
public IndicatorDataSeries[] gapPlus;
public IndicatorDataSeries[] gapMinus;
public IndicatorDataSeries[] rejectPlus;
public IndicatorDataSeries[] rejectMinus;
public enum ModeType
{
Standard,
Fibonacci,
FibonacciOpenClose,
FibonacciHighLow,
FibonacciHighLowOnClose,
Camarilla,
Woodie,
DeMark
}
public enum LevelType
{
MH,
M,
ML,
R1,
R2,
R3,
R4,
R5,
R6,
R7,
R8,
S1,
S2,
S3,
S4,
S5,
S6,
S7,
S8,
None
}
protected override void Initialize()
{
NextHighPriceFibo = CreateDataSeries();
NextLowPriceFibo = CreateDataSeries();
NextHighPctFibo = CreateDataSeries();
NextLowPctFibo = CreateDataSeries();
HighPivot = "";
LowPivot = "";
pivotBars = MarketData.GetBars(TF);
res = new IndicatorDataSeries[19];
res[0] = r8;
res[1] = r7;
res[2] = r6;
res[3] = r5;
res[4] = r4;
res[5] = r3;
res[6] = r2;
res[7] = r1;
res[8] = mh;
res[9] = m;
res[10] = ml;
res[11] = s1;
res[12] = s2;
res[13] = s3;
res[14] = s4;
res[15] = s5;
res[16] = s6;
res[17] = s7;
res[18] = s8;
breakPlus = new IndicatorDataSeries[19];
breakMinus = new IndicatorDataSeries[19];
gapPlus = new IndicatorDataSeries[19];
gapMinus = new IndicatorDataSeries[19];
rejectPlus = new IndicatorDataSeries[19];
rejectMinus = new IndicatorDataSeries[19];
for (int i = 0; i < res.Length; i++)
{
breakPlus[i] = CreateDataSeries();
breakMinus[i] = CreateDataSeries();
gapPlus[i] = CreateDataSeries();
gapMinus[i] = CreateDataSeries();
rejectPlus[i] = CreateDataSeries();
rejectMinus[i] = CreateDataSeries();
}
}
public override void Calculate(int index)
{
int pivotIndex = pivotBars.OpenTimes.GetIndexByTime(Bars.OpenTimes[index]) - 1;
if (index > 0)
{
CalculatePivots(index, pivotIndex);
}
for (int i = 0; i < res.Length; i++)
{
breakPlus[i][index] = 0;
breakMinus[i][index] = 0;
gapPlus[i][index] = 0;
gapMinus[i][index] = 0;
rejectPlus[i][index] = 0;
rejectMinus[i][index] = 0;
if (!double.IsNaN(res[i][index]))
{
// Break Pus: Gap-up or close above pivot line and open below
if ((Bars.ClosePrices[index] > res[i][index] && Bars.OpenPrices[index] < res[i][index]))
{
breakPlus[i][index] = 1;
}
// Break Mins: Gap-down or close below pivot line and open above
if ((Bars.ClosePrices[index] < res[i][index] && Bars.OpenPrices[index] > res[i][index]))
{
breakMinus[i][index] = 1;
}
if ((Bars.ClosePrices[index - 2] < res[i][index - 1] && Bars.OpenPrices[index - 1] > res[i][index]))
{
gapPlus[i][index] = 1;
}
// Break Mins: Gap-down or close below pivot line and open above
if (Bars.ClosePrices[index - 2] > res[i][index - 1] && Bars.OpenPrices[index - 1] < res[i][index])
{
gapMinus[i][index] = 1;
}
// Rejection Plus: low below pivot line but open and close above
if (Bars.LowPrices[index] < res[i][index] && Bars.ClosePrices[index] > res[i][index] && Bars.OpenPrices[index] > res[i][index])
{
rejectPlus[i][index] = 1;
}
// Rejection Minus: high above pivot line but open and close below
if (Bars.HighPrices[index] > res[i][index] && Bars.ClosePrices[index] < res[i][index] && Bars.OpenPrices[index] < res[i][index])
{
rejectMinus[i][index] = 1;
}
}
}
}
public void CalculatePivots(int index, int pivotIndex)
{
double high = pivotBars.HighPrices[pivotIndex];
double low = pivotBars.LowPrices[pivotIndex];
double close = pivotBars.ClosePrices[pivotIndex];
double open1 = pivotBars.OpenPrices[pivotIndex];
switch (Mode)
{
default:
case ModeType.Standard:
if (Mode == ModeType.Standard || Mode == ModeType.Woodie)
{
if (Mode == ModeType.Woodie)
p[index] = (high + low + 2 * close) / 4;
else
p[index] = (high + low + close) / 3;
h[index] = high;
l[index] = low;
m[index] = close;
ml[index] = close;
mh[index] = open1;
r1[index] = 2 * p[index] - low;
r2[index] = p[index] + high - low;
s1[index] = 2 * p[index] - high;
s2[index] = p[index] - high + low;
r3[index] = high + 2 * (p[index] - low);
s3[index] = low - 2 * (high - p[index]);
r4[index] = p[index] + 2 * (high - low);
s4[index] = p[index] - 2 * (high - low);
r5[index] = (r1[index] + r2[index]) / 2;
s5[index] = (s1[index] + s2[index]) / 2;
r6[index] = (r2[index] + r3[index]) / 2;
s6[index] = (s2[index] + s3[index]) / 2;
r7[index] = (r3[index] + r4[index]) / 2;
s7[index] = (s3[index] + s4[index]) / 2;
r8[index] = (p[index] + r1[index]) / 2;
s8[index] = (p[index] + s1[index]) / 2;
}
break;
case ModeType.Fibonacci:
p[index] = (high + low + close) / 3.0;
h[index] = high;
l[index] = low;
m[index] = close;
ml[index] = close;
mh[index] = open1;
r1[index] = p[index] + (high - low) * 0.382;
s1[index] = p[index] - (high - low) * 0.382;
r2[index] = p[index] + (high - low) * 0.618;
s2[index] = p[index] - (high - low) * 0.618;
r3[index] = p[index] + (high - low) * 0.886;
s3[index] = p[index] - (high - low) * 0.886;
r3[index] = p[index] + (high - low) * 1.0;
s3[index] = p[index] - (high - low) * 1.0;
r4[index] = p[index] + (high - low) * 1.27;
s4[index] = p[index] - (high - low) * 1.27;
r5[index] = p[index] + (high - low) * 1.618;
s5[index] = p[index] - (high - low) * 1.618;
r6[index] = p[index] + (high - low) * 2.0;
s6[index] = p[index] - (high - low) * 2.0;
r7[index] = p[index] + (high - low) * 2.618;
s7[index] = p[index] - (high - low) * 2.618;
r8[index] = double.NaN;
s8[index] = double.NaN;
r9[index] = double.NaN;
s9[index] = double.NaN;
r10[index] = double.NaN;
s10[index] = double.NaN;
break;
case ModeType.FibonacciOpenClose:
if (Mode == ModeType.FibonacciOpenClose)
{
if (open1 > close)
{
p[index] = close;
h[index] = high;
l[index] = low;
ml[index] = close;
mh[index] = open1;
r1[index] = close + ((open1 - close) * 0.114);
s1[index] = close - ((open1 - close) * 0.114);
r2[index] = close + ((open1 - close) * 0.146);
s2[index] = close - ((open1 - close) * 0.146);
r3[index] = close + ((open1 - close) * 0.236);
s3[index] = close - ((open1 - close) * 0.236);
r4[index] = close + ((open1 - close) * 0.382);
s4[index] = close - ((open1 - close) * 0.382);
r5[index] = close + ((open1 - close) * 0.5);
s5[index] = close - ((open1 - close) * 0.5);
r6[index] = close + ((open1 - close) * 0.618);
s6[index] = close - ((open1 - close) * 0.618);
r7[index] = close + ((open1 - close) * 0.707);
s7[index] = close - ((open1 - close) * 0.707);
r8[index] = close + ((open1 - close) * 0.763);
s8[index] = close - ((open1 - close) * 0.763);
r9[index] = close + ((open1 - close) * 0.886);
s9[index] = close - ((open1 - close) * 0.886);
r10[index] = close + (open1 - close);
s10[index] = close - (open1 - close);
}
if (open1 < close)
{
p[index] = close;
h[index] = high;
l[index] = low;
ml[index] = close;
mh[index] = open1;
s1[index] = close + ((open1 - close) * 0.114);
r1[index] = close - ((open1 - close) * 0.114);
s2[index] = close + ((open1 - close) * 0.146);
r2[index] = close - ((open1 - close) * 0.146);
s3[index] = close + ((open1 - close) * 0.236);
r3[index] = close - ((open1 - close) * 0.236);
s4[index] = close + ((open1 - close) * 0.382);
r4[index] = close - ((open1 - close) * 0.382);
s5[index] = close + ((open1 - close) * 0.5);
r5[index] = close - ((open1 - close) * 0.5);
s6[index] = close + ((open1 - close) * 0.618);
r6[index] = close - ((open1 - close) * 0.618);
s7[index] = close + ((open1 - close) * 0.707);
r7[index] = close - ((open1 - close) * 0.707);
s8[index] = close + ((open1 - close) * 0.763);
r8[index] = close - ((open1 - close) * 0.763);
s9[index] = close + ((open1 - close) * 0.886);
r9[index] = close - ((open1 - close) * 0.886);
s10[index] = close + (open1 - close);
r10[index] = close - (open1 - close);
}
}
break;
case ModeType.FibonacciHighLow:
if (open1 < close)
{
p[index] = high;
h[index] = high;
l[index] = low;
m[index] = close;
ml[index] = close;
mh[index] = open1;
r1[index] = high + ((high - low) * 0.114);
s1[index] = high - ((high - low) * 0.114);
r2[index] = high + ((high - low) * 0.146);
s2[index] = high - ((high - low) * 0.146);
r3[index] = high + ((high - low) * 0.236);
s3[index] = high - ((high - low) * 0.236);
r4[index] = high + ((high - low) * 0.382);
s4[index] = high - ((high - low) * 0.382);
r5[index] = high + ((high - low) * 0.5);
s5[index] = high - ((high - low) * 0.5);
r6[index] = high + ((high - low) * 0.618);
s6[index] = high - ((high - low) * 0.618);
r7[index] = high + ((high - low) * 0.707);
s7[index] = high - ((high - low) * 0.707);
r8[index] = high + ((high - low) * 0.763);
s8[index] = high - ((high - low) * 0.763);
r9[index] = high + ((high - low) * 0.886);
s9[index] = high - ((high - low) * 0.886);
r10[index] = high + (high - low);
s10[index] = high - (high - low);
}
else if (open1 > close)
{
p[index] = low;
h[index] = high;
l[index] = low;
ml[index] = close;
mh[index] = open1;
m[index] = close;
mh[index] = close + (open1 - close);
ml[index] = close - (open1 - close);
r1[index] = low - ((low - high) * 0.114);
s1[index] = low + ((low - high) * 0.114);
r2[index] = low - ((low - high) * 0.146);
s2[index] = low + ((low - high) * 0.146);
r3[index] = low - ((low - high) * 0.236);
s3[index] = low + ((low - high) * 0.236);
r4[index] = low - ((low - high) * 0.382);
s4[index] = low + ((low - high) * 0.382);
r5[index] = low - ((low - high) * 0.5);
s5[index] = low + ((low - high) * 0.5);
r6[index] = low - ((low - high) * 0.618);
s6[index] = low + ((low - high) * 0.618);
r7[index] = low - ((low - high) * 0.707);
s7[index] = low + ((low - high) * 0.707);
r8[index] = low - ((low - high) * 0.763);
s8[index] = low + ((low - high) * 0.763);
r9[index] = low - ((low - high) * 0.886);
s9[index] = low + ((low - high) * 0.886);
r10[index] = low - (low - high);
s10[index] = low + (low - high);
}
break;
case ModeType.FibonacciHighLowOnClose:
if (open1 < close)
{
p[index] = close;
h[index] = high;
l[index] = low;
m[index] = close;
ml[index] = close;
mh[index] = open1;
r1[index] = close + ((high - low) * 0.114);
s1[index] = close - ((high - low) * 0.114);
r2[index] = close + ((high - low) * 0.146);
s2[index] = close - ((high - low) * 0.146);
r3[index] = close + ((high - low) * 0.236);
s3[index] = close - ((high - low) * 0.236);
r4[index] = close + ((high - low) * 0.382);
s4[index] = close - ((high - low) * 0.382);
r5[index] = close + ((high - low) * 0.5);
s5[index] = close - ((high - low) * 0.5);
r6[index] = close + ((high - low) * 0.618);
s6[index] = close - ((high - low) * 0.618);
r7[index] = close + ((high - low) * 0.707);
s7[index] = close - ((high - low) * 0.707);
r8[index] = close + ((high - low) * 0.763);
s8[index] = close - ((high - low) * 0.763);
r9[index] = close + ((high - low) * 0.886);
s9[index] = close - ((high - low) * 0.886);
r10[index] = close + (high - low);
s10[index] = close - (high - low);
}
else if (open1 > close)
{
p[index] = close;
h[index] = high;
l[index] = low;
m[index] = close;
ml[index] = close;
mh[index] = open1;
r1[index] = close - ((low - high) * 0.114);
s1[index] = close + ((low - high) * 0.114);
r2[index] = close - ((low - high) * 0.146);
s2[index] = close + ((low - high) * 0.146);
r3[index] = close - ((low - high) * 0.236);
s3[index] = close + ((low - high) * 0.236);
r4[index] = close - ((low - high) * 0.382);
s4[index] = close + ((low - high) * 0.382);
r5[index] = close - ((low - high) * 0.5);
s5[index] = close + ((low - high) * 0.5);
r6[index] = close - ((low - high) * 0.618);
s6[index] = close + ((low - high) * 0.618);
r7[index] = close - ((low - high) * 0.707);
s7[index] = close + ((low - high) * 0.707);
r8[index] = close - ((low - high) * 0.763);
s8[index] = close + ((low - high) * 0.763);
r9[index] = close - ((low - high) * 0.886);
s9[index] = close + ((low - high) * 0.886);
r10[index] = close - (low - high);
s10[index] = close + (low - high);
}
break;
case ModeType.Camarilla:
p[index] = (high + low + close) / 3.0;
m[index] = close;
h[index] = close;
l[index] = open1;
ml[index] = close - (high - low) * 1.1 / 24;
mh[index] = close + (high - low) * 1.1 / 24;
r1[index] = close + (high - low) * 1.1 / 12.0;
s1[index] = close - (high - low) * 1.1 / 12.0;
r2[index] = close + (high - low) * 1.1 / 6.0;
s2[index] = close - (high - low) * 1.1 / 6.0;
r3[index] = close + (high - low) * 1.1 / 4.0;
s3[index] = close - (high - low) * 1.1 / 4.0;
r4[index] = close + (high - low) * 1.1 / 2.0;
s4[index] = close - (high - low) * 1.1 / 2.0;
r5[index] = close + (high - low) * 1.1 * 3.0 / 4.0;
s5[index] = close - (high - low) * 1.1 * 3.0 / 4.0;
r6[index] = close + (high - low) * 1.1;
s6[index] = close - (high - low) * 1.1;
r7[index] = close + (high - low) * 1.1 * 5.0 / 4.0;
s7[index] = close - (high - low) * 1.1 * 5.0 / 4.0;
r8[index] = close + (high - low) * 1.1 * 3.0 / 2.0;
s8[index] = close - (high - low) * 1.1 * 3.0 / 2.0;
r9[index] = double.NaN;
s9[index] = double.NaN;
r10[index] = double.NaN;
s10[index] = double.NaN;
break;
case ModeType.DeMark:
double open = Bars.OpenPrices[index - 1];
double X = close < open ? (high + 2.0 * low + close) : close > open ? (2.0 * high + low + close) : (high + low + 2.0 * close);
p[index] = X / 4.0;
h[index] = high;
l[index] = low;
m[index] = close;
ml[index] = close;
mh[index] = open1;
r1[index] = X / 2.0 - low;
s1[index] = X / 2.0 - high;
r2[index] = double.NaN;
s2[index] = double.NaN;
r3[index] = double.NaN;
s3[index] = double.NaN;
r4[index] = double.NaN;
s4[index] = double.NaN;
r5[index] = double.NaN;
s5[index] = double.NaN;
r6[index] = double.NaN;
s6[index] = double.NaN;
r7[index] = double.NaN;
s7[index] = double.NaN;
r8[index] = double.NaN;
s8[index] = double.NaN;
r9[index] = double.NaN;
s9[index] = double.NaN;
r10[index] = double.NaN;
s10[index] = double.NaN;
break;
}
var range = GetLevel(GetNextHigherLevel(Bars.ClosePrices.Last(0)), 0) - GetLevel(GetNextLowerLevel(Bars.ClosePrices.Last(0)), 0);
var rangeBars = GetLevel(GetNextHigherLevel(Bars.ClosePrices.Last(0)), 0) - Bars.ClosePrices.Last(0);
HighPivot = (GetNextHigherLevel(Bars.ClosePrices.Last(0))).ToString();
LowPivot = (GetNextLowerLevel(Bars.ClosePrices.Last(0))).ToString();
NextHighPctFibo[index] = rangeBars / range * 100;
NextLowPctFibo[index] = (100 - (rangeBars / range * 100));
NextHighPriceFibo[index] = GetLevel(GetNextHigherLevel(Bars.ClosePrices.Last(0)), 0);
NextLowPriceFibo[index] = GetLevel(GetNextLowerLevel(Bars.ClosePrices.Last(0)), 0);
// Print("Time : " + Bars.OpenTimes.Last(0) + " Price : " + Bars.ClosePrices.Last(0).ToString("F4") + " NextHighPrice " + GetNextHigherLevel(Bars.ClosePrices.Last(0)) + " : " + NextHighPriceFibo[index].ToString("F4") + "(" + NextHighPctFibo[index].ToString("F0") + ") NextLowPrice " + GetNextLowerLevel(Bars.ClosePrices.Last(0)) + " : " + NextLowPriceFibo[index].ToString("F4") + "(" + NextLowPctFibo[index].ToString("F0") + ")");
}
public double GetLevel(LevelType level, int barsAgo)
{
if (level == LevelType.MH)
return mh.Last(barsAgo);
else if (level == LevelType.M)
return m.Last(barsAgo);
else if (level == LevelType.ML)
return ml.Last(barsAgo);
else if (level == LevelType.R1)
return r1.Last(barsAgo);
else if (level == LevelType.R2)
return r2.Last(barsAgo);
else if (level == LevelType.R3)
return r3.Last(barsAgo);
else if (level == LevelType.R4)
return r4.Last(barsAgo);
else if (level == LevelType.R5)
return r5.Last(barsAgo);
else if (level == LevelType.R6)
return r6.Last(barsAgo);
else if (level == LevelType.R7)
return r7.Last(barsAgo);
else if (level == LevelType.R8)
return r8.Last(barsAgo);
else if (level == LevelType.S1)
return s1.Last(barsAgo);
else if (level == LevelType.S2)
return s2.Last(barsAgo);
else if (level == LevelType.S3)
return s3.Last(barsAgo);
else if (level == LevelType.S4)
return s4.Last(barsAgo);
else if (level == LevelType.S5)
return s5.Last(barsAgo);
else if (level == LevelType.S6)
return s6.Last(barsAgo);
else if (level == LevelType.S7)
return s7.Last(barsAgo);
else if (level == LevelType.S8)
return s8.Last(barsAgo);
else
return double.NaN;
}
// Get next higher level
public LevelType GetNextHigherLevel(LevelType level)
{
if (level == LevelType.MH)
return LevelType.R1;
else if (level == LevelType.M)
return LevelType.MH;
else if (level == LevelType.ML)
return LevelType.M;
else if (level == LevelType.R1)
return LevelType.R2;
else if (level == LevelType.R2)
return LevelType.R3;
else if (level == LevelType.R3)
return LevelType.R4;
else if (level == LevelType.R4)
return LevelType.R5;
else if (level == LevelType.R5)
return LevelType.R6;
else if (level == LevelType.R6)
return LevelType.R7;
else if (level == LevelType.R7)
return LevelType.R8;
else if (level == LevelType.R8)
return LevelType.None;
else if (level == LevelType.S1)
return LevelType.ML;
else if (level == LevelType.S2)
return LevelType.S1;
else if (level == LevelType.S3)
return LevelType.S2;
else if (level == LevelType.S4)
return LevelType.S3;
else if (level == LevelType.S5)
return LevelType.S4;
else if (level == LevelType.S6)
return LevelType.S5;
else if (level == LevelType.S7)
return LevelType.S6;
else if (level == LevelType.S8)
return LevelType.S7;
else
return LevelType.None;
}
// Get next higher level
public LevelType GetNextLowerLevel(LevelType level)
{
if (level == LevelType.MH)
return LevelType.M;
else if (level == LevelType.M)
return LevelType.ML;
else if (level == LevelType.ML)
return LevelType.S1;
else if (level == LevelType.R1)
return LevelType.MH;
else if (level == LevelType.R2)
return LevelType.R1;
else if (level == LevelType.R3)
return LevelType.R2;
else if (level == LevelType.R4)
return LevelType.R3;
else if (level == LevelType.R5)
return LevelType.R4;
else if (level == LevelType.R6)
return LevelType.R5;
else if (level == LevelType.R7)
return LevelType.R6;
else if (level == LevelType.R8)
return LevelType.R7;
else if (level == LevelType.S1)
return LevelType.S2;
else if (level == LevelType.S2)
return LevelType.S3;
else if (level == LevelType.S3)
return LevelType.S4;
else if (level == LevelType.S4)
return LevelType.S5;
else if (level == LevelType.S5)
return LevelType.S6;
else if (level == LevelType.S6)
return LevelType.S7;
else if (level == LevelType.S7)
return LevelType.S8;
else if (level == LevelType.S8)
return LevelType.None;
else
return LevelType.None;
}
// Get next higher level from price
public LevelType GetNextHigherLevel(double price)
{
if (price >= GetLevel(LevelType.R7, 0) && price < GetLevel(LevelType.R8, 0))
return LevelType.R8;
if (price >= GetLevel(LevelType.R6, 0) && price < GetLevel(LevelType.R7, 0))
return LevelType.R7;
if (price >= GetLevel(LevelType.R5, 0) && price < GetLevel(LevelType.R6, 0))
return LevelType.R6;
if (price >= GetLevel(LevelType.R4, 0) && price < GetLevel(LevelType.R5, 0))
return LevelType.R5;
if (price >= GetLevel(LevelType.R3, 0) && price < GetLevel(LevelType.R4, 0))
return LevelType.R4;
if (price >= GetLevel(LevelType.R2, 0) && price < GetLevel(LevelType.R3, 0))
return LevelType.R3;
if (price >= GetLevel(LevelType.R1, 0) && price < GetLevel(LevelType.R2, 0))
return LevelType.R2;
if (price >= GetLevel(LevelType.MH, 0) && price < GetLevel(LevelType.R1, 0))
return LevelType.R1;
if (price >= GetLevel(LevelType.M, 0) && price < GetLevel(LevelType.MH, 0))
return LevelType.MH;
if (price >= GetLevel(LevelType.ML, 0) && price < GetLevel(LevelType.M, 0))
return LevelType.M;
if (price >= GetLevel(LevelType.S1, 0) && price < GetLevel(LevelType.ML, 0))
return LevelType.ML;
if (price >= GetLevel(LevelType.S2, 0) && price < GetLevel(LevelType.S1, 0))
return LevelType.S1;
if (price >= GetLevel(LevelType.S3, 0) && price < GetLevel(LevelType.S2, 0))
return LevelType.S2;
if (price >= GetLevel(LevelType.S4, 0) && price < GetLevel(LevelType.S3, 0))
return LevelType.S3;
if (price >= GetLevel(LevelType.S5, 0) && price < GetLevel(LevelType.S4, 0))
return LevelType.S4;
if (price >= GetLevel(LevelType.S6, 0) && price < GetLevel(LevelType.S5, 0))
return LevelType.S5;
if (price >= GetLevel(LevelType.S7, 0) && price < GetLevel(LevelType.S6, 0))
return LevelType.S6;
if (price >= GetLevel(LevelType.S8, 0) && price < GetLevel(LevelType.S7, 0))
return LevelType.S7;
if (price < GetLevel(LevelType.S8, 0))
return LevelType.S8;
else
return LevelType.None;
}
// Get next lower level from price
public LevelType GetNextLowerLevel(double price)
{
if (price > GetLevel(LevelType.R8, 0))
return LevelType.R8;
if (price > GetLevel(LevelType.R7, 0) && price <= GetLevel(LevelType.R8, 0))
return LevelType.R7;
if (price > GetLevel(LevelType.R6, 0) && price <= GetLevel(LevelType.R7, 0))
return LevelType.R6;
if (price > GetLevel(LevelType.R5, 0) && price <= GetLevel(LevelType.R6, 0))
return LevelType.R5;
if (price > GetLevel(LevelType.R4, 0) && price <= GetLevel(LevelType.R5, 0))
return LevelType.R4;
if (price > GetLevel(LevelType.R3, 0) && price <= GetLevel(LevelType.R4, 0))
return LevelType.R3;
if (price > GetLevel(LevelType.R2, 0) && price <= GetLevel(LevelType.R3, 0))
return LevelType.R2;
if (price > GetLevel(LevelType.R1, 0) && price <= GetLevel(LevelType.R2, 0))
return LevelType.R1;
if (price > GetLevel(LevelType.MH, 0) && price <= GetLevel(LevelType.R1, 0))
return LevelType.MH;
if (price > GetLevel(LevelType.M, 0) && price <= GetLevel(LevelType.MH, 0))
return LevelType.M;
if (price > GetLevel(LevelType.ML, 0) && price <= GetLevel(LevelType.M, 0))
return LevelType.ML;
if (price > GetLevel(LevelType.S1, 0) && price <= GetLevel(LevelType.ML, 0))
return LevelType.S1;
if (price > GetLevel(LevelType.S2, 0) && price <= GetLevel(LevelType.S1, 0))
return LevelType.S2;
if (price > GetLevel(LevelType.S3, 0) && price <= GetLevel(LevelType.S2, 0))
return LevelType.S3;
if (price > GetLevel(LevelType.S4, 0) && price <= GetLevel(LevelType.S3, 0))
return LevelType.S4;
if (price > GetLevel(LevelType.S5, 0) && price <= GetLevel(LevelType.S4, 0))
return LevelType.S5;
if (price > GetLevel(LevelType.S6, 0) && price <= GetLevel(LevelType.S5, 0))
return LevelType.S6;
if (price > GetLevel(LevelType.S7, 0) && price <= GetLevel(LevelType.S6, 0))
return LevelType.S7;
if (price > GetLevel(LevelType.S8, 0) && price <= GetLevel(LevelType.S7, 0))
return LevelType.S8;
else
return LevelType.None;
}
}
}
YE
YesOrNot2
Joined on 17.05.2024
- Distribution: Free
- Language: C#
- Trading platform: cTrader Automate
- File name: PivotPointAIO.algo
- Rating: 3.33
- Installs: 525
- Modified: 27/07/2024 12:16
Note that publishing copyrighted material is strictly prohibited. If you believe there is copyrighted material in this section, please use the Copyright Infringement Notification form to submit a claim.
Comments
Log in to add a comment.
No comments found.