Untitled
unknown
plain_text
a year ago
20 kB
11
Indexable
#region Using declarations
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Input;
using System.Windows.Media;
using System.Xml.Serialization;
using NinjaTrader.Cbi;
using NinjaTrader.Gui;
using NinjaTrader.Gui.Chart;
using NinjaTrader.Gui.SuperDom;
using NinjaTrader.Gui.Tools;
using NinjaTrader.Data;
using NinjaTrader.NinjaScript;
using NinjaTrader.Core.FloatingPoint;
using NinjaTrader.NinjaScript.DrawingTools;
using SharpDX;
using System.Security.Cryptography;
#endregion
//This namespace holds Indicators in this folder and is required. Do not change it.
namespace NinjaTrader.NinjaScript.Indicators.PROS
{
public class NubePRO : Indicator
{
#region Variables
private bool colorbars = true;
private bool colorOutline = true;
private bool drawArrows = true;
private int emah = 34; // Default setting for Emah
private int emal = 34; // Default setting for Emal
private Brush barColorCondition1 = Brushes.Chartreuse;
private Brush barColorCondition2 = Brushes.Green;
private Brush barColorCondition3 = Brushes.LightBlue;
private Brush barColorCondition4 = Brushes.RoyalBlue;
private Brush barColorCondition5 = Brushes.DarkOrange;
private Brush barColorCondition6 = Brushes.Red;
private Brush candleOutlineCondition1 = Brushes.Chartreuse;
private Brush candleOutlineCondition2 = Brushes.Green;
private Brush candleOutlineCondition3 = Brushes.LightBlue;
private Brush candleOutlineCondition4 = Brushes.RoyalBlue;
private Brush candleOutlineCondition5 = Brushes.DarkOrange;
private Brush candleOutlineCondition6 = Brushes.Red;
private int trend;
private ISeries<double> maHigh, maLow;
private bool condition1 = false;
private bool condition6 = false;
private bool arrowUp = false;
private bool arrowDown = false;
private double cciVal = 0.0;
private double atrVal = 0.0;
private double upTrend = 0.0;
private double downTrend = 0.0;
// Additional variables for the new channel plot
private double channelAtrVal = 0.0;
private double upTrendChannel = 0.0;
private double downTrendChannel = 0.0;
private Series<double> channelTrend;
private int savedUBar = 0;
private int savedDBar = 0;
// User defined variables (add any user defined variables below)
#endregion
protected override void OnStateChange()
{
if (State == State.SetDefaults)
{
Description = @"";
Name = "NubePRO";
Calculate = Calculate.OnBarClose;
IsOverlay = true;
cciPeriod = 20;
atrPeriod = 5;
atrMult = 1.0;
channelATRMultiplier = 3;
channelATRPeriod = 5;
DisplayInDataBox = true;
DrawOnPricePanel = true;
DrawHorizontalGridLines = true;
DrawVerticalGridLines = true;
PaintPriceMarkers = true;
HighlightChart = true;
ScaleJustification = ScaleJustification.Right;
drawArrows = true;
BullOpacity = 25;
BearOpacity = 25;
BullChart = Brushes.OliveDrab;
BearChart = Brushes.IndianRed;
AddPlot(Brushes.Orange, Name);
AddPlot(Brushes.Orange, Name + "-Channel");
}
else if (State == State.DataLoaded)
{
maHigh = SMA(High, 14);
maLow = SMA(Low, 14);
Trend[0] = 0;
channelTrend = new Series<double>(this);
}
}
protected override void OnBarUpdate()
{
if (CurrentBar < cciPeriod || CurrentBar < atrPeriod)
return;
BackBrush = null;
#region Candle colors
//CANDLE COLORS
condition1 = false;
condition6 = false;
// Condition set 1
if (Open[0] <= Close[0]
&& Close[0] > EMA(High, Emah)[0])
{
condition1 = true;
if (colorbars)
{
BarBrush = barColorCondition1;
}
if (colorOutline)
{
CandleOutlineBrush = candleOutlineCondition1;
}
}
// Condition set 2
if (Open[0] >= Close[0]
&& Close[0] > EMA(High, Emah)[0])
{
if (colorbars)
{
BarBrush = barColorCondition2;
}
if (colorOutline)
{
CandleOutlineBrush = candleOutlineCondition2;
}
}
// Condition set 3
if (Open[0] <= Close[0]
&& Close[0] < EMA(High, Emah)[0]
&& Close[0] > EMA(Low, Emal)[0])
{
if (colorbars)
{
BarBrush = barColorCondition3;
}
if (colorOutline)
{
CandleOutlineBrush = candleOutlineCondition3;
}
}
// Condition set 4
if (Open[0] >= Close[0]
&& Close[0] < EMA(High, Emah)[0]
&& Close[0] > EMA(Low, Emal)[0])
{
if (colorbars)
{
BarBrush = barColorCondition4;
}
if (colorOutline)
{
CandleOutlineBrush = candleOutlineCondition4;
}
}
// Condition set 5
if (Open[0] <= Close[0]
&& Close[0] < EMA(Low, Emal)[0])
{
if (colorbars)
{
BarBrush = barColorCondition5;
}
if (colorOutline)
{
CandleOutlineBrush = candleOutlineCondition5;
}
}
// Condition set 6
if (Open[0] >= Close[0]
&& Close[0] < EMA(Low, Emal)[0])
{
condition6 = true;
if (colorbars)
{
BarBrush = barColorCondition6;
}
if (colorOutline)
{
CandleOutlineBrush = candleOutlineCondition6;
}
}
#endregion
#region Drawing arrows
//Arrows
if (drawArrows)
{
double maHighCurrent = maHigh[0];
double maLowCurrent = maLow[0];
double atrCurrent = ATR(14)[0];
double threshold = atrCurrent * 0.5;
if (Close[0] > maHighCurrent + threshold && trend != 1)
{
if (condition1)
{
Draw.ArrowUp(this, "Up " + CurrentBar, false, 0, Low[0] - 2 * TickSize, Brushes.White);
arrowUp = true;
arrowDown = false;
trend = 1;
}
}
else if (Close[0] < maLowCurrent - threshold && trend != -1)
{
if (condition6)
{
Draw.ArrowDown(this, "Down " + CurrentBar, false, 0, High[0] + 2 * TickSize, Brushes.White);
arrowDown = true;
arrowUp = false;
trend = -1;
}
}
}
#endregion
// TREND
cciVal = CCI(Close, cciPeriod)[0];
atrVal = ATR(Close, atrPeriod)[0];
channelAtrVal = ATR(Close, channelATRPeriod)[0];
upTrend = Low[0] - atrVal * atrMult;
downTrend = High[0] + atrVal * atrMult;
upTrendChannel = Low[0] - channelAtrVal * channelATRMultiplier;
downTrendChannel = High[0] + channelAtrVal * channelATRMultiplier;
if (cciVal >= 0)
{
if (upTrend < Trend[1])
Trend[0] = Trend[1];
else
Trend[0] = upTrend;
}
else
{
if (downTrend > Trend[1])
Trend[0] = Trend[1];
else
Trend[0] = downTrend;
}
if (cciVal >= 0)
{
if (upTrendChannel < channelTrend[1])
channelTrend[0] = channelTrend[1];
else
channelTrend[0] = upTrendChannel;
}
else
{
if (downTrendChannel > channelTrend[1])
channelTrend[0] = channelTrend[1];
else
channelTrend[0] = downTrendChannel;
}
// Update the values for plotting
Values[0][0] = Trend[0];
Values[1][0] = channelTrend[0];
// Set plot brushes and draw region based on condition
if (arrowUp && CurrentBar != savedUBar)
{
savedUBar = CurrentBar;
PlotBrushes[0][0] = Brushes.Lime;
PlotBrushes[1][0] = Brushes.Lime;
Draw.Region(this, "NubePROS-ChannelUp" + savedUBar, CurrentBar - savedUBar + 1, 0, Values[0], Values[1], null, Brushes.Lime, 15);
}
else if (arrowDown && CurrentBar != savedDBar)
{
savedDBar = CurrentBar;
PlotBrushes[0][0] = Brushes.Red;
PlotBrushes[1][0] = Brushes.Red;
Draw.Region(this, "NubePROS-ChannelDown" + savedDBar, CurrentBar - savedDBar + 1, 0, Values[0], Values[1], null, Brushes.Red, 15);
}
#region HighlightChart
if (HighlightChart)
{
if (arrowDown)
{
BackBrush = BearChart;
}
if (arrowUp)
{
BackBrush = BullChart;
}
}
#endregion
}
#region Properties
[Browsable(false)]
[XmlIgnore]
public Series<double> SslUp
{
get { return Values[0]; }
}
[Browsable(false)]
[XmlIgnore]
public Series<double> SslDown
{
get { return Values[1]; }
}
[Browsable(false)] // this line prevents the data series from being displayed in the indicator properties dialog, do not remove
[XmlIgnore()] // this line ensures that the indicator can be saved/recovered as part of a chart template, do not remove
public Series<double> EmaHigh
{
get { return Values[0]; }
}
[Browsable(false)] // this line prevents the data series from being displayed in the indicator properties dialog, do not remove
[XmlIgnore()] // this line ensures that the indicator can be saved/recovered as part of a chart template, do not remove
public Series<double> EmaClose
{
get { return Values[1]; }
}
[Browsable(false)] // this line prevents the data series from being displayed in the indicator properties dialog, do not remove
[XmlIgnore()] // this line ensures that the indicator can be saved/recovered as part of a chart template, do not remove
public Series<double> EmaLow
{
get { return Values[2]; }
}
[NinjaScriptProperty]
[Display(Name = "1. Draw Arrows?", Description = "Draw Suy/Sell Arrows?", GroupName = "Colors", Order = 0)]
public bool DrawArrows
{
get { return drawArrows; }
set { drawArrows = value; }
}
[NinjaScriptProperty]
[Display(Description = "Default value for EMA of High", GroupName = "Parameters", Order = 1)]
public int Emah
{
get { return emah; }
set { emah = Math.Max(1, value); }
}
[NinjaScriptProperty]
[Display(Description = "Default value for EMA of Low", GroupName = "Parameters", Order = 1)]
public int Emal
{
get { return emal; }
set { emal = Math.Max(1, value); }
}
[NinjaScriptProperty]
[Range(1, int.MaxValue)]
[Display(Name = "CCI Period", Order = 1, GroupName = "Parameters")]
public int cciPeriod
{ get; set; }
[NinjaScriptProperty]
[Range(1, int.MaxValue)]
[Display(Name = "ATR Period", Order = 2, GroupName = "Parameters")]
public int atrPeriod
{ get; set; }
[NinjaScriptProperty]
[Range(-20, int.MaxValue)]
[Display(Name = "ATR Multiplier", Order = 3, GroupName = "Parameters")]
public double atrMult
{ get; set; }
[NinjaScriptProperty]
[Range(1, int.MaxValue)]
[Display(Name = "Channel ATR Period", Order = 4, GroupName = "Parameters")]
public int channelATRPeriod
{ get; set; }
[NinjaScriptProperty]
[Range(1, int.MaxValue)]
[Display(Name = "Channel ATR Multiplier", Order = 5, GroupName = "Parameters")]
public int channelATRMultiplier
{ get; set; }
[Browsable(false)]
[XmlIgnore]
public Series<double> Trend
{
get { return Values[0]; }
}
[NinjaScriptProperty]
[XmlIgnore]
[Display(Name = "Bull Opacity", Order = 2, GroupName = "1. Highlight Chart")]
public int BullOpacity
{ get; set; }
[NinjaScriptProperty]
[XmlIgnore]
[Display(Name = "Bear Opacity", Order = 4, GroupName = "1. Highlight Chart")]
public int BearOpacity
{ get; set; }
[XmlIgnore()]
[Display(Name = "Bear Color", GroupName = "1. Highlight Chart", Order = 3)]
public Brush BearChart
{ get; set; }
[Browsable(false)]
public string BearChartSerialize
{
get { return Serialize.BrushToString(BearChart); }
set { BearChart = Serialize.StringToBrush(value); }
}
[XmlIgnore()]
[Display(Name = "Bull Color ", GroupName = "1. Highlight Chart", Order = 1)]
public Brush BullChart
{ get; set; }
[Browsable(false)]
public string BullChartSerialize
{
get { return Serialize.BrushToString(BullChart); }
set { BullChart = Serialize.StringToBrush(value); }
}
[NinjaScriptProperty]
[Display(Name = "HighlightChart", Order = 0, GroupName = "1. Highlight Chart")]
public bool HighlightChart
{ get; set; }
#endregion
}
}
#region NinjaScript generated code. Neither change nor remove.
namespace NinjaTrader.NinjaScript.Indicators
{
public partial class Indicator : NinjaTrader.Gui.NinjaScript.IndicatorRenderBase
{
private PROS.NubePRO[] cacheNubePRO;
public PROS.NubePRO NubePRO(bool drawArrows, int emah, int emal, int cciPeriod, int atrPeriod, double atrMult, int channelATRPeriod, int channelATRMultiplier, int bullOpacity, int bearOpacity, bool highlightChart)
{
return NubePRO(Input, drawArrows, emah, emal, cciPeriod, atrPeriod, atrMult, channelATRPeriod, channelATRMultiplier, bullOpacity, bearOpacity, highlightChart);
}
public PROS.NubePRO NubePRO(ISeries<double> input, bool drawArrows, int emah, int emal, int cciPeriod, int atrPeriod, double atrMult, int channelATRPeriod, int channelATRMultiplier, int bullOpacity, int bearOpacity, bool highlightChart)
{
if (cacheNubePRO != null)
for (int idx = 0; idx < cacheNubePRO.Length; idx++)
if (cacheNubePRO[idx] != null && cacheNubePRO[idx].DrawArrows == drawArrows && cacheNubePRO[idx].Emah == emah && cacheNubePRO[idx].Emal == emal && cacheNubePRO[idx].cciPeriod == cciPeriod && cacheNubePRO[idx].atrPeriod == atrPeriod && cacheNubePRO[idx].atrMult == atrMult && cacheNubePRO[idx].channelATRPeriod == channelATRPeriod && cacheNubePRO[idx].channelATRMultiplier == channelATRMultiplier && cacheNubePRO[idx].BullOpacity == bullOpacity && cacheNubePRO[idx].BearOpacity == bearOpacity && cacheNubePRO[idx].HighlightChart == highlightChart && cacheNubePRO[idx].EqualsInput(input))
return cacheNubePRO[idx];
return CacheIndicator<PROS.NubePRO>(new PROS.NubePRO(){ DrawArrows = drawArrows, Emah = emah, Emal = emal, cciPeriod = cciPeriod, atrPeriod = atrPeriod, atrMult = atrMult, channelATRPeriod = channelATRPeriod, channelATRMultiplier = channelATRMultiplier, BullOpacity = bullOpacity, BearOpacity = bearOpacity, HighlightChart = highlightChart }, input, ref cacheNubePRO);
}
}
}
namespace NinjaTrader.NinjaScript.MarketAnalyzerColumns
{
public partial class MarketAnalyzerColumn : MarketAnalyzerColumnBase
{
public Indicators.PROS.NubePRO NubePRO(bool drawArrows, int emah, int emal, int cciPeriod, int atrPeriod, double atrMult, int channelATRPeriod, int channelATRMultiplier, int bullOpacity, int bearOpacity, bool highlightChart)
{
return indicator.NubePRO(Input, drawArrows, emah, emal, cciPeriod, atrPeriod, atrMult, channelATRPeriod, channelATRMultiplier, bullOpacity, bearOpacity, highlightChart);
}
public Indicators.PROS.NubePRO NubePRO(ISeries<double> input , bool drawArrows, int emah, int emal, int cciPeriod, int atrPeriod, double atrMult, int channelATRPeriod, int channelATRMultiplier, int bullOpacity, int bearOpacity, bool highlightChart)
{
return indicator.NubePRO(input, drawArrows, emah, emal, cciPeriod, atrPeriod, atrMult, channelATRPeriod, channelATRMultiplier, bullOpacity, bearOpacity, highlightChart);
}
}
}
namespace NinjaTrader.NinjaScript.Strategies
{
public partial class Strategy : NinjaTrader.Gui.NinjaScript.StrategyRenderBase
{
public Indicators.PROS.NubePRO NubePRO(bool drawArrows, int emah, int emal, int cciPeriod, int atrPeriod, double atrMult, int channelATRPeriod, int channelATRMultiplier, int bullOpacity, int bearOpacity, bool highlightChart)
{
return indicator.NubePRO(Input, drawArrows, emah, emal, cciPeriod, atrPeriod, atrMult, channelATRPeriod, channelATRMultiplier, bullOpacity, bearOpacity, highlightChart);
}
public Indicators.PROS.NubePRO NubePRO(ISeries<double> input , bool drawArrows, int emah, int emal, int cciPeriod, int atrPeriod, double atrMult, int channelATRPeriod, int channelATRMultiplier, int bullOpacity, int bearOpacity, bool highlightChart)
{
return indicator.NubePRO(input, drawArrows, emah, emal, cciPeriod, atrPeriod, atrMult, channelATRPeriod, channelATRMultiplier, bullOpacity, bearOpacity, highlightChart);
}
}
}
#endregion
Editor is loading...
Leave a Comment