/// <summary> /// конструктор /// </summary> public StrategyBollinger(string name, StartProgram startProgram) : base(name, startProgram) { TabCreate(BotTabType.Simple); _tab = TabsSimple[0]; _bollinger = new Bollinger(name + "Bollinger", false); _bollinger = (Bollinger)_tab.CreateCandleIndicator(_bollinger, "Prime"); _bollinger.Save(); _moving = new MovingAverage(name + "Moving", false) { Lenght = 15 }; _moving = (MovingAverage)_tab.CreateCandleIndicator(_moving, "Prime"); _moving.Save(); _tab.CandleFinishedEvent += Bot_CandleFinishedEvent; Slipage = 0; Volume = 1; Regime = BotTradeRegime.On; DeleteEvent += Strategy_DeleteEvent; Load(); }
/// <summary> /// In this function we do all the work and send back the OrderAction. /// </summary> /// <param name="data"></param> /// <returns></returns> public OrderAction?calculate(IDataSeries data, IDataSeries open, IDataSeries high, IOrder longorder, IOrder shortorder, int bollinger_period, double bollinger_standarddeviation, int momentum_period, int rsi_period, int rsi_smooth, int rsi_level_low, int rsi_level_high, int momentum_level_low, int momentum_level_high) { //Calculate BB Bollinger bb = Bollinger(data, bollinger_standarddeviation, bollinger_period); Momentum mom = Momentum(data, momentum_period); RSI rsi = RSI(data, rsi_period, rsi_smooth); bb_lower = bb.Lower[0]; bb_middle = bb.Middle[0]; bb_upper = bb.Upper[0]; //if (high[0] > open[1]) //{ if (mom[0] >= momentum_level_high && rsi[0] <= rsi_level_low && data[0] <= bb.Lower[0] && data[1] <= bb.Lower[1] && data[2] <= bb.Lower[2]) { return(OrderAction.Buy); } else if (mom[0] <= momentum_level_low && rsi[0] >= rsi_level_high && data[0] >= bb.Upper[0] && data[1] >= bb.Upper[1] && data[2] >= bb.Upper[2]) { return(OrderAction.SellShort); } else if (data[0] >= bb.Upper[0] && longorder != null) { //currently we left the building on the upper band, is it better if we switch to a stop? return(OrderAction.Sell); } else if (data[0] <= bb.Lower[0] && shortorder != null) { return(OrderAction.BuyToCover); } //} return(null); }
/// <summary> /// Called on each bar update event (incoming tick) /// </summary> protected override void OnBarUpdate() { bolCyan = Bollinger(0.5, period); bolGreen = Bollinger(1.0, period); bolBlue = Bollinger(2.0, period); if (Position.MarketPosition == MarketPosition.Flat) { if (Low[0] <= bolBlue.Lower[0]) { lastTouchedBlue = CurrentBar; } // && rewardRiskRatio > 1.0 double rewardRiskRatio = (bolBlue.Middle[0] - bolGreen.Lower[0]) / (bolGreen.Lower[0] - bolBlue.Lower[0]); double barHeight = Math.Max(High[0] - Low[0], High[1] - Low[1]); barHeight = Math.Max(barHeight, High[2] - Low[2]); if (CurrentBar - lastTouchedBlue < 20 && bolBlue.Lower[15] < High[0] //&& (bolGreen.Lower[0] - bolBlue.Lower[0]) > barHeight ) { //DrawDot(CurrentBar+"SR", true, 0, bolGreen.Lower[0], Color.White); if (Close[0] < bolGreen.Lower[0]) { EnterLongStopLimit(qty, bolGreen.Lower[0], bolGreen.Lower[0]); } // ExitLongStop(qty, bolBlue.Lower[0]); // ExitLongLimit(qty, bolBlue.Middle[0]); } if (bolBlue.Lower[15] > bolGreen.Lower[0] //&& Close[0] < bolGreen.Lower[0] ) { // EnterShortLimit(qty, bolGreen.Lower[0]); } if (CurrentBar - lastTouchedBlue < 20 //&& bolBlue.Upper[15] > Low[0] //&& (bolGreen.Lower[0] - bolBlue.Lower[0]) > barHeight ) { if (Close[0] > bolGreen.Upper[0]) { EnterShortStopLimit(qty, bolGreen.Upper[0], bolGreen.Upper[0]); } } } AtmStrategyHandler(); //double stop = Math.Max(bolBlue.Lower[0], bolBlue.Lower[BarsSinceEntry()]); //double limit = bolBlue.Middle[0]; //ExitLongStop(stop); //ExitLongLimit(limit); }
protected override void OnStateChange() { if (State == State.SetDefaults) { Description = @"Enter the description for your new custom Strategy here."; Name = "DirectionalBolingerDivergenceTrendV2Code"; Calculate = Calculate.OnBarClose; EntriesPerDirection = 1; EntryHandling = EntryHandling.AllEntries; IsExitOnSessionCloseStrategy = true; ExitOnSessionCloseSeconds = 30; IsFillLimitOnTouch = false; MaximumBarsLookBack = MaximumBarsLookBack.TwoHundredFiftySix; OrderFillResolution = OrderFillResolution.Standard; Slippage = 0; StartBehavior = StartBehavior.WaitUntilFlat; TimeInForce = TimeInForce.Gtc; TraceOrders = true; RealtimeErrorHandling = RealtimeErrorHandling.StopCancelClose; StopTargetHandling = StopTargetHandling.PerEntryExecution; BarsRequiredToTrade = 20; // Disable this property for performance gains in Strategy Analyzer optimizations IsInstantiatedOnEachOptimizationIteration = true; StopLoss = 8; TakeProfit = 4; MAPeriod = 200; BollingerStdDev = 2; BollingerPeriod = 14; TrendTrade = @"TrendTrade"; CounterTrendTrade = @"CounterTrendTrade"; StochRSIPeriod = 14; StochRSIMax = 1; StochRSIMin = 0; } else if (State == State.Configure) { } else if (State == State.DataLoaded) { EMA1 = EMA(Close, Convert.ToInt32(MAPeriod)); EMA2 = EMA(Close, Convert.ToInt32(5)); Bollinger1 = Bollinger(Close, BollingerStdDev, Convert.ToInt32(BollingerPeriod)); Bollinger2 = Bollinger(Close, BollingerStdDev, Convert.ToInt32(BollingerPeriod)); StochRSI1 = StochRSI(Close, 14); EMA1.Plots[0].Brush = Brushes.Goldenrod; EMA2.Plots[0].Brush = Brushes.Goldenrod; Bollinger1.Plots[0].Brush = Brushes.Lime; Bollinger1.Plots[1].Brush = Brushes.Blue; Bollinger1.Plots[2].Brush = Brushes.Red; StochRSI1.Plots[0].Brush = Brushes.DarkCyan; AddChartIndicator(EMA1); AddChartIndicator(EMA2); AddChartIndicator(Bollinger1); AddChartIndicator(StochRSI1); SetProfitTarget(Convert.ToString(TrendTrade), CalculationMode.Ticks, TakeProfit); SetStopLoss(Convert.ToString(TrendTrade), CalculationMode.Ticks, StopLoss, false); } }
/// <summary> /// Called on every new bar of data. /// </summary> /// <param name="currentBar">The current bar of the simulation</param> protected override void OnBarUpdate(int currentBar) { base.OnBarUpdate(currentBar); Bollinger ind = (Bollinger)Dependents[0]; if (DataSeries.CrossAbove(Data.Close, ind.Upper, currentBar, 0) != -1) { WasFound[currentBar] = true; } }
protected override void OnCalculate() { Bollinger bb = Bollinger(2, 20); AddChartLine("Plot_Middle" + Time[0].ToString(), this.IsAutoAdjustableScale, 1, bb.Middle[1], 0, bb.Middle[0], this.Plot1Color, this.Dash1Style, this.Plot1Width); AddChartLine("Plot_Low" + Time[0].ToString(), this.IsAutoAdjustableScale, 1, bb.Lower[1], 0, bb.Lower[0], this.Plot0Color, this.Dash0Style, this.Plot0Width); AddChartLine("Plot_High" + Time[0].ToString(), this.IsAutoAdjustableScale, 1, bb.Upper[1], 0, bb.Upper[0], this.Plot0Color, this.Dash0Style, this.Plot0Width); if (High[0] < bb.Lower[0] || Low[0] > bb.Upper[0]) { //ok } else { this.BarColor = Color.White; } //Trigger double signal = 0; if (High[1] < bb.Lower[1]) { if (Low[0] > High[1] || High[0] > High[1]) { if (ShowArrows) { AddChartArrowUp("ArrowLong_Entry" + +Bars[0].Time.Ticks, this.IsAutoAdjustableScale, 0, Bars[0].Low, Color.LightGreen); } signal = 1; } } else if (Low[1] > bb.Upper[1]) { if (Low[0] < Low[1] || High[0] < Low[1]) { if (ShowArrows) { AddChartArrowDown("ArrowShort_Entry" + +Bars[0].Time.Ticks, this.IsAutoAdjustableScale, 0, Bars[0].High, Color.Red); } signal = -1; } } PlotLine.Set(signal); PlotColors[0][0] = this.Plot0Color; OutputDescriptors[0].PenStyle = this.Dash0Style; OutputDescriptors[0].Pen.Width = this.Plot0Width; }
public BollingerProFunctionChart(ChartView BaseChart) { candle = new Candle(); line = new Line(); bollingerFunction = new Bollinger(); var = new Variables.Variables(); Themes.CandleGodStyle(candle); BaseChart.Chart.Header.Text = "Bollinger Bands"; BaseChart.Chart.Series.Add(candle); BaseChart.Chart.Series.Add(line); candle.FillSampleValues(20); candle.HorizAxis = HorizontalAxis.Bottom; candle.VertAxis = VerticalAxis.Left; candle.Title = "Data Source"; line.DataSource = candle; line.Function = bollingerFunction; line.HorizAxis = HorizontalAxis.Bottom; line.VertAxis = VerticalAxis.Left; line.Title = "Bollinger"; line.LinePen.Width = 3; line.Color = var.GetPaletteBasic[2]; bollingerFunction.Deviation = 2; bollingerFunction.Exponential = false; bollingerFunction.LowBandPen.Color = var.GetPaletteBasic[3]; bollingerFunction.UpperBandPen.Color = var.GetPaletteBasic[2]; bollingerFunction.UpperBandPen.Visible = true; bollingerFunction.LowBand.Visible = true; bollingerFunction.LowBandPen.Width = 3; bollingerFunction.UpperBandPen.Width = 3; bollingerFunction.Series = candle; bollingerFunction.LowBand.XValues.DataMember = "X"; bollingerFunction.LowBand.XValues.DateTime = true; bollingerFunction.LowBand.XValues.Order = ValueListOrder.Ascending; bollingerFunction.LowBand.YValues.DataMember = "Y"; bollingerFunction.Period = 10; BaseChart.Chart.Axes.Left.Automatic = true; BaseChart.Chart.Axes.Left.Ticks.Transparency = 100; BaseChart.Chart.Axes.Bottom.SetMinMax(BaseChart.Chart.Axes.Bottom.MinXValue - 1, BaseChart.Chart.Axes.Bottom.MaxXValue + 1); BaseChart.Chart.Axes.Left.Increment = 10; }
public event Action <MarketFaze> MarketFazeChangeEvent; // событие изменения фазы рынка #endregion /// <summary> /// Конструктор класса робота /// </summary> /// <param name="name">имя робота</param> /// <param name="startProgram">программа, которая запустила робота</param> public OneLegArbitrageMy(string name, StartProgram startProgram) : base(name, startProgram) { //Запоминаем имя программы, которая запустила бота //Это может быть тестер, оптимизатор, терминал _startProgram = startProgram; //Создаем вкладки бота TabCreate(BotTabType.Simple); TabCreate(BotTabType.Index); _tabSec = TabsSimple[0]; _tabIndex = TabsIndex[0]; // создаем настроечные параметры робота LenghtMa = CreateParameter("Lenght MA", 100, 50, 200, 10); LenghtBollinger = CreateParameter("Lenght Bollinger", 100, 50, 200, 10); DeviationBollinger = CreateParameter("Deviation Bollinger", 1, 0.5m, 2.5m, 0.5m); LenghtAtr = CreateParameter("Lenght ATR", 20, 20, 100, 10); MultiplyAtr = CreateParameter("Multiplay ATR", 1, 1, 5, 0.5m); // cоздаем индикаторы _ma = new MovingAverage(name + "MA", false); _ma = (MovingAverage)_tabIndex.CreateCandleIndicator(_ma, "Prime"); _ma.Lenght = LenghtMa.ValueInt; _ma.Save(); _bollinger = new Bollinger(name + "Bollinger", false); _bollinger = (Bollinger)_tabIndex.CreateCandleIndicator(_bollinger, "Prime"); _bollinger.Lenght = LenghtBollinger.ValueInt; _bollinger.Deviation = DeviationBollinger.ValueDecimal; _bollinger.Save(); _atr = new Atr(name + "ATR", false); _atr = (Atr)_tabIndex.CreateCandleIndicator(_atr, "Second"); _atr.Lenght = LenghtAtr.ValueInt; _atr.Save(); // загружаем настроечные параметры робота Load(); // подписываемся на события _tabIndex.SpreadChangeEvent += TabIndex_SpreadChangeEvent; _tabSec.CandleFinishedEvent += TabSec_CandleFinishedEvent; ParametrsChangeByUser += OneLegArbitrage_ParametrsChangeByUser; DeleteEvent += OneLegArbitrage_DeleteEvent; //todo доработать OneLegArbitrage_DeleteEvent, чтобы удалялись все файлы робота }
protected override void OnStateChange() { if (State == State.SetDefaults) { Description = @"TTMS momentum histogram with squeeze dots."; Name = "TTMS"; Calculate = Calculate.OnPriceChange; IsOverlay = false; DisplayInDataBox = true; DrawOnPricePanel = false; DrawHorizontalGridLines = false; DrawVerticalGridLines = false; PaintPriceMarkers = true; ScaleJustification = NinjaTrader.Gui.Chart.ScaleJustification.Right; IsSuspendedWhileInactive = true; MomentumLength = 20; SqueezeLength = 20; SqueezeDotBrush = Brushes.Red; NormalDotBrush = Brushes.Blue; HistAboveZeroRising = Brushes.Lime; HistAboveZeroFalling = Brushes.DarkSlateGray; HistBelowZeroFalling = Brushes.Red; HistBelowZeroRising = Brushes.DarkSlateGray; SoundAlertsOn = false; BuySoundAlert = "Alert3.wav"; SellSoundAlert = "Alert4.wav"; AddPlot(new Stroke(Brushes.DarkSlateGray, 5), PlotStyle.Bar, "MomentumHistogram"); AddPlot(new Stroke(NormalDotBrush, 2), PlotStyle.Dot, "SqueezeDots"); } else if (State == State.Configure) { lrm_ = new Series <double>(this); medianPriceOsc_ = new Series <double>(this); BB = Bollinger(2.0, SqueezeLength); KC = KeltnerChannel(1.5, SqueezeLength); DC = DonchianChannel(MomentumLength); LR = LinReg(medianPriceOsc_, MomentumLength); ema_ = EMA(MomentumLength); } }
protected override void MyInitialize() { _boll = Bollinger(BollingerStdDev, BollingerPeriod); Add(_boll); _smaFast = SMA(SMAFastPeriod); _smaFast.Plots[0].Pen.Color = Color.Blue; Add(_smaFast); _smaSlow = SMA(SMASlowPeriod); _smaSlow.Plots[0].Pen.Color = Color.Purple; Add(_smaSlow); InitialStoploss = 100; ProfitTicks = 300; SetProfitTarget(CalculationMode.Ticks, 300); // SetStopLoss(CalculationMode.Ticks, 200); }
/// <summary> /// In this function we do all the work and send back the OrderDirection. /// </summary> /// <param name="data"></param> /// <returns></returns> public ResultValue calculate(IDataSeries data, IDataSeries open, IDataSeries high, IOrder longorder, IOrder shortorder, int bollinger_period, double bollinger_standarddeviation, int momentum_period, int rsi_period, int rsi_smooth, int rsi_level_low, int rsi_level_high, int momentum_level_low, int momentum_level_high) { //Create a return object ResultValue returnvalue = new ResultValue(); try { //Calculate BB Bollinger bb = Bollinger(data, bollinger_standarddeviation, bollinger_period); Momentum mom = Momentum(data, momentum_period); RSI rsi = RSI(data, rsi_period, rsi_smooth); bb_lower = bb.Lower[0]; bb_middle = bb.Middle[0]; bb_upper = bb.Upper[0]; if (mom[0] >= momentum_level_high && rsi[0] <= rsi_level_low && data[0] <= bb.Lower[0] && data[1] <= bb.Lower[1] && data[2] <= bb.Lower[2]) { returnvalue.Entry = OrderDirection.Buy; } else if (mom[0] <= momentum_level_low && rsi[0] >= rsi_level_high && data[0] >= bb.Upper[0] && data[1] >= bb.Upper[1] && data[2] >= bb.Upper[2]) { returnvalue.Entry = OrderDirection.Sell; } else if (data[0] >= bb.Upper[0] && longorder != null) { //currently we left the building on the upper band, is it better if we switch to a stop? returnvalue.Exit = OrderDirection.Sell; } else if (data[0] <= bb.Lower[0] && shortorder != null) { returnvalue.Exit = OrderDirection.Buy; } } catch (Exception) { //If this method is called via a strategy or a condition we need to log the error. returnvalue.ErrorOccured = true; } //return the result object return(returnvalue); }
/// <summary> /// This method is used to configure the strategy and is called once before any strategy method is called. /// </summary> protected override void Initialize() { atr = ATRTrailing(ATRTimes, ATRPeriod, ATRRatched); bollinger = Bollinger(BStdX, BPeriod); keltnerChannel = KeltnerChannel(KStdX, KPeriod); sMomentum = SMA(Momentum(MPeriod), MSmooth); //Add(Stochastics(periodD, periodK, smooth)); Add(RCTTMSqueeze(1, 2, 2, 20)); Add(atr); //Add(bollinger); //Add(keltnerChannel); //Add(sMomentum); atr.AutoScale = false; atr.PaintPriceMarkers = false; CalculateOnBarClose = true; }
/// <summary> /// Called on each bar update event (incoming tick) /// </summary> protected override void OnBarUpdate() { bolCyan = Bollinger(0.5, Period); bolGreen = Bollinger(1.0, Period); bolBlue = Bollinger(2.0, Period); if (Position.MarketPosition == MarketPosition.Flat) { if (Low[0] <= bolBlue.Lower[0]) { lastTouchedBlue = CurrentBar; } // && rewardRiskRatio > 1.0 double rewardRiskRatio = (bolBlue.Middle[0] - bolGreen.Lower[0]) / (bolGreen.Lower[0] - bolBlue.Lower[0]); double barHeight = Math.Max(High[0] - Low[0], High[1] - Low[1]); barHeight = Math.Max(barHeight, High[2] - Low[2]); if (CurrentBar - lastTouchedBlue < 20 //&& (bolGreen.Lower[0] - bolBlue.Lower[0]) > barHeight ) { EnterLongStopLimit(bolGreen.Lower[0], bolGreen.Lower[0]); ExitLongStop(bolBlue.Lower[0]); ExitLongLimit(bolBlue.Middle[0]); } } if (Position.MarketPosition == MarketPosition.Long) { lastTouchedBlue = 0; double stop = Math.Max(bolBlue.Lower[0], bolBlue.Lower[BarsSinceEntry()]); double limit = bolBlue.Middle[0]; ExitLongStop(stop); ExitLongLimit(limit); } }
protected override void OnCalculate() { Bollinger bol = Bollinger(this.Bollinger_stddev, this.Bollinger_Period); if (Close[0] < bol.Lower[0]) { longsignalbb = true; } else if (Close[0] > bol.Upper[0]) { shortsignalbb = true; } else { //nothing } MACD macd = MACD(this.MACD_Fast, this.MACD_Slow, this.MACD_Smooth); if (longsignalbb && CrossAbove(macd.Default, macd.Avg, 0)) { AddChartArrowUp(Time[0].ToString() + "long", 0, Low[0], this.ColorLongSignal); MyPlot1.Set(1); longsignalbb = false; } else if (shortsignalbb && CrossBelow(macd.Default, macd.Avg, 0)) { AddChartArrowDown(Time[0].ToString() + "short", 0, High[0], this.ColorShortSignal); MyPlot1.Set(-1); shortsignalbb = false; } else { MyPlot1.Set(0); } }
protected override void OnCalculate() { Bollinger bb = Bollinger(this.StandardDeviation, this.Period); if (Close[0] > bb.Upper[0]) { if (ShowSignalOnChartBackground) { this.BackColor = GlobalUtilities.AdjustOpacity(this.ColorLongSignalBackground, this.OpacityLongSignal / 100.0); } _signals.Set(1); } else if (Close[0] < bb.Lower[0]) { if (ShowSignalOnChartBackground) { this.BackColor = GlobalUtilities.AdjustOpacity(this.ColorShortSignalBackground, this.OpacityShortSignal / 100.0); } _signals.Set(-1); } else { _signals.Set(_signals[1]); if (_signals[1] == 1) { if (ShowSignalOnChartBackground) { this.BackColor = GlobalUtilities.AdjustOpacity(this.ColorLongSignalBackground, this.OpacityLongSignal / 100.0); } } else { if (ShowSignalOnChartBackground) { this.BackColor = GlobalUtilities.AdjustOpacity(this.ColorShortSignalBackground, this.OpacityShortSignal / 100.0); } } } if (this.ShowSignalOnChartArrow) { if (_signals[0] == 1 && _signals[1] != 1) { AddChartArrowUp("ArrowLong_MA" + +Bars[0].Time.Ticks, this.IsAutoAdjustableScale, 0, Bars[0].Low, this.ColorLongSignalArrow); } else if (_signals[0] == -1 && _signals[1] != -1) { AddChartArrowDown("ArrowShort_MA" + +Bars[0].Time.Ticks, this.IsAutoAdjustableScale, 0, Bars[0].High, this.ColorShortSignalArrow); } } //set bb this.Plot_Middle.Set(bb.Middle[0]); this.Plot_High.Set(bb.Upper[0]); this.Plot_Low.Set(bb.Lower[0]); //Set the color PlotColors[0][0] = this.Color_1; OutputDescriptors[0].PenStyle = this.DashStyle_1; OutputDescriptors[0].Pen.Width = this.LineWidth_1; PlotColors[1][0] = this.Color_2; OutputDescriptors[1].PenStyle = this.DashStyle_2; OutputDescriptors[1].Pen.Width = this.LineWidth_2; PlotColors[2][0] = this.Color_3; OutputDescriptors[2].PenStyle = this.DashStyle_3; OutputDescriptors[2].Pen.Width = this.LineWidth_3; }
/// <summary> /// If the runnable has already been created, returns that object. If not then /// returns an new runnable object based on the name and the instrument. /// </summary> /// <param name="nameAndParameters">Name of the runnable</param> /// <returns>The runnable object</returns> public Runnable GetRunnable(string nameAndParameters) { Runnable requestedItem = null; // The name can have parameters to pass to the runnable construtor // and are separated by commas. // Ex: Rsi,11,3 would create the Rsi and pass the numbers to it in a // list. Its up to the indicator to do what it will with each number. string[] splitParams = nameAndParameters.Split(','); string runnableName = splitParams[0]; string[] runnableParams = splitParams.Skip(1).Take(splitParams.Length - 1).ToArray(); // See if the runnable is created already and return that object if it is. int key = nameAndParameters.GetHashCode(); if (_createdItems.ContainsKey(key)) { requestedItem = _createdItems[key]; } else { switch (runnableName) { // Indicators. case "Bollinger": requestedItem = new Bollinger(_tickerData, this); Simulator.DataOutput.SaveIndicator((Indicator)requestedItem); break; case "BressertDss": requestedItem = new BressertDss(_tickerData, this, runnableParams); Simulator.DataOutput.SaveIndicator((Indicator)requestedItem); break; case "BressertTimingBands": requestedItem = new BressertTimingBands(_tickerData, this); Simulator.DataOutput.SaveIndicator((Indicator)requestedItem); break; case "BearBeltHold": requestedItem = new BearBeltHold(_tickerData, this); Simulator.DataOutput.SaveIndicator((Indicator)requestedItem); break; case "BearEngulfing": requestedItem = new BearEngulfing(_tickerData, this); Simulator.DataOutput.SaveIndicator((Indicator)requestedItem); break; case "BearHarami": requestedItem = new BearHarami(_tickerData, this); Simulator.DataOutput.SaveIndicator((Indicator)requestedItem); break; case "BearHaramiCross": requestedItem = new BearHaramiCross(_tickerData, this); Simulator.DataOutput.SaveIndicator((Indicator)requestedItem); break; case "BullBeltHold": requestedItem = new BullBeltHold(_tickerData, this); Simulator.DataOutput.SaveIndicator((Indicator)requestedItem); break; case "BullEngulfing": requestedItem = new BullEngulfing(_tickerData, this); Simulator.DataOutput.SaveIndicator((Indicator)requestedItem); break; case "BullHarami": requestedItem = new BullHarami(_tickerData, this); Simulator.DataOutput.SaveIndicator((Indicator)requestedItem); break; case "BullHaramiCross": requestedItem = new BullHaramiCross(_tickerData, this); Simulator.DataOutput.SaveIndicator((Indicator)requestedItem); break; case "Cci14": requestedItem = new Cci(_tickerData, this, 14); Simulator.DataOutput.SaveIndicator((Indicator)requestedItem); break; case "DarkCloudCover": requestedItem = new DarkCloudCover(_tickerData, this); Simulator.DataOutput.SaveIndicator((Indicator)requestedItem); break; case "Doji": requestedItem = new Doji(_tickerData, this); Simulator.DataOutput.SaveIndicator((Indicator)requestedItem); break; case "BearDoji": requestedItem = new BearDoji(_tickerData, this); Simulator.DataOutput.SaveIndicator((Indicator)requestedItem); break; case "DownsideTasukiGap": requestedItem = new DownsideTasukiGap(_tickerData, this); Simulator.DataOutput.SaveIndicator((Indicator)requestedItem); break; case "EaseOfMovement": requestedItem = new EaseOfMovement(_tickerData, this); Simulator.DataOutput.SaveIndicator((Indicator)requestedItem); break; case "EveningStar": requestedItem = new EveningStar(_tickerData, this); Simulator.DataOutput.SaveIndicator((Indicator)requestedItem); break; case "FallingThreeMethods": requestedItem = new FallingThreeMethods(_tickerData, this); Simulator.DataOutput.SaveIndicator((Indicator)requestedItem); break; case "Hammer": requestedItem = new Hammer(_tickerData, this); Simulator.DataOutput.SaveIndicator((Indicator)requestedItem); break; case "HangingMan": requestedItem = new HangingMan(_tickerData, this); Simulator.DataOutput.SaveIndicator((Indicator)requestedItem); break; case "InvertedHammer": requestedItem = new InvertedHammer(_tickerData, this); Simulator.DataOutput.SaveIndicator((Indicator)requestedItem); break; case "KeltnerChannel": requestedItem = new KeltnerChannel(_tickerData, this); Simulator.DataOutput.SaveIndicator((Indicator)requestedItem); break; case "Macd": requestedItem = new Macd(_tickerData, this); Simulator.DataOutput.SaveIndicator((Indicator)requestedItem); break; case "Momentum14": requestedItem = new Momentum(_tickerData, this, 14); Simulator.DataOutput.SaveIndicator((Indicator)requestedItem); break; case "MorningStar": requestedItem = new MorningStar(_tickerData, this); Simulator.DataOutput.SaveIndicator((Indicator)requestedItem); break; case "PiercingLine": requestedItem = new PiercingLine(_tickerData, this); Simulator.DataOutput.SaveIndicator((Indicator)requestedItem); break; case "PriceOscillator": requestedItem = new PriceOscillator(_tickerData, this); Simulator.DataOutput.SaveIndicator((Indicator)requestedItem); break; case "RisingThreeMethods": requestedItem = new RisingThreeMethods(_tickerData, this); Simulator.DataOutput.SaveIndicator((Indicator)requestedItem); break; case "Rsi": requestedItem = new Rsi(_tickerData, this, runnableParams); Simulator.DataOutput.SaveIndicator((Indicator)requestedItem); break; case "Rsi3m3": requestedItem = new Rsi3m3(_tickerData, this); Simulator.DataOutput.SaveIndicator((Indicator)requestedItem); break; case "ShootingStar": requestedItem = new ShootingStar(_tickerData, this); Simulator.DataOutput.SaveIndicator((Indicator)requestedItem); break; case "Sma": requestedItem = new Sma(_tickerData, this); Simulator.DataOutput.SaveIndicator((Indicator)requestedItem); break; case "StickSandwitch": requestedItem = new StickSandwitch(_tickerData, this); Simulator.DataOutput.SaveIndicator((Indicator)requestedItem); break; case "StochasticsFast": requestedItem = new StochasticsFast(_tickerData, this); Simulator.DataOutput.SaveIndicator((Indicator)requestedItem); break; case "Stochastics": requestedItem = new Stochastics(_tickerData, this); Simulator.DataOutput.SaveIndicator((Indicator)requestedItem); break; case "StochRsi": requestedItem = new StochRsi(_tickerData, this); Simulator.DataOutput.SaveIndicator((Indicator)requestedItem); break; case "Trend": requestedItem = new Trend(_tickerData, this); Simulator.DataOutput.SaveIndicator((Indicator)requestedItem); break; case "ThreeBlackCrows": requestedItem = new ThreeBlackCrows(_tickerData, this); Simulator.DataOutput.SaveIndicator((Indicator)requestedItem); break; case "ThreeWhiteSoldiers": requestedItem = new ThreeWhiteSoldiers(_tickerData, this); Simulator.DataOutput.SaveIndicator((Indicator)requestedItem); break; case "Trix": requestedItem = new Trix(_tickerData, this); Simulator.DataOutput.SaveIndicator((Indicator)requestedItem); break; case "UpsideGapTwoCrows": requestedItem = new UpsideGapTwoCrows(_tickerData, this); Simulator.DataOutput.SaveIndicator((Indicator)requestedItem); break; case "UpsideTasukiGap": requestedItem = new UpsideTasukiGap(_tickerData, this); Simulator.DataOutput.SaveIndicator((Indicator)requestedItem); break; case "WilliamsR": requestedItem = new WilliamsR(_tickerData, this); Simulator.DataOutput.SaveIndicator((Indicator)requestedItem); break; case "Dmi": requestedItem = new Dmi(_tickerData, this); Simulator.DataOutput.SaveIndicator((Indicator)requestedItem); break; case "DtOscillator": requestedItem = new DtOscillator(_tickerData, this, runnableParams); Simulator.DataOutput.SaveIndicator((Indicator)requestedItem); break; case "FibonacciZones": requestedItem = new FibonacciZones(_tickerData, this); Simulator.DataOutput.SaveIndicator((Indicator)requestedItem); break; case "ElliotWaves": requestedItem = new ElliotWaves(_tickerData, this); Simulator.DataOutput.SaveIndicator((Indicator)requestedItem); break; case "ZigZag": requestedItem = new ZigZag(_tickerData, this, runnableParams); Simulator.DataOutput.SaveIndicator((Indicator)requestedItem); break; ///////////////////////////// Strategies //////////////////////////// case "BestOfRootStrategies": requestedItem = new BestOfRootStrategies(_tickerData, this); break; case "ComboStrategy": requestedItem = new ComboStrategy(_tickerData, this); break; case "BressertApproach": requestedItem = new BressertApproach(_tickerData, this); break; case "BressertComboStrategy": requestedItem = new BressertComboStrategy(_tickerData, this); break; case "FibonacciRsi3m3": requestedItem = new FibonacciRsi3m3(_tickerData, this); break; case "FibonacciDtOscillator": requestedItem = new FibonacciDtOscillator(_tickerData, this); break; case "ElliotWavesStrategy": requestedItem = new ElliotWavesStrategy(_tickerData, this); break; // // Bull // case "BullBollingerExtended": requestedItem = new BullBollingerExtended(_tickerData, this); break; case "BullBeltHoldFound": requestedItem = new BullBeltHoldFound(_tickerData, this); break; case "BullEngulfingFound": requestedItem = new BullEngulfingFound(_tickerData, this); break; case "BullHaramiFound": requestedItem = new BullHaramiFound(_tickerData, this); break; case "BullHaramiCrossFound": requestedItem = new BullHaramiCrossFound(_tickerData, this); break; case "BullCciCrossover": requestedItem = new BullCciCrossover(_tickerData, this); break; case "BullEaseOfMovement": requestedItem = new BullEaseOfMovement(_tickerData, this); break; case "BullDojiFound": requestedItem = new BullDojiFound(_tickerData, this); break; case "HammerFound": requestedItem = new HammerFound(_tickerData, this); break; case "BullKeltnerExtended": requestedItem = new BullKeltnerExtended(_tickerData, this); break; case "BullMacdCrossover": requestedItem = new BullMacdCrossover(_tickerData, this); break; case "BullMacdMomentum": requestedItem = new BullMacdMomentum(_tickerData, this); break; case "BullMomentumCrossover": requestedItem = new BullMomentumCrossover(_tickerData, this); break; case "MorningStarFound": requestedItem = new MorningStarFound(_tickerData, this); break; case "PiercingLineFound": requestedItem = new PiercingLineFound(_tickerData, this); break; case "RisingThreeMethodsFound": requestedItem = new RisingThreeMethodsFound(_tickerData, this); break; case "BullRsiCrossover": requestedItem = new BullRsiCrossover(_tickerData, this); break; case "BullSmaCrossover": requestedItem = new BullSmaCrossover(_tickerData, this); break; case "StickSandwitchFound": requestedItem = new StickSandwitchFound(_tickerData, this); break; case "BullStochasticsFastCrossover": requestedItem = new BullStochasticsFastCrossover(_tickerData, this); break; case "BullStochasticsCrossover": requestedItem = new BullStochasticsCrossover(_tickerData, this); break; case "BullStochRsiCrossover": requestedItem = new BullStochRsiCrossover(_tickerData, this); break; case "ThreeWhiteSoldiersFound": requestedItem = new ThreeWhiteSoldiersFound(_tickerData, this); break; case "BullTrendStart": requestedItem = new BullTrendStart(_tickerData, this); break; case "BullTrixSignalCrossover": requestedItem = new BullTrixSignalCrossover(_tickerData, this); break; case "BullTrixZeroCrossover": requestedItem = new BullTrixZeroCrossover(_tickerData, this); break; case "UpsideTasukiGapFound": requestedItem = new UpsideTasukiGapFound(_tickerData, this); break; case "BullWilliamsRCrossover": requestedItem = new BullWilliamsRCrossover(_tickerData, this); break; case "BullPriceOscillator": requestedItem = new BullPriceOscillator(_tickerData, this); break; case "BullDmi": requestedItem = new BullDmi(_tickerData, this); break; case "BullBressertDss": requestedItem = new BullBressertDss(_tickerData, this, runnableParams); break; case "BullRsi3m3": requestedItem = new BullRsi3m3(_tickerData, this); break; case "BullDtOscillator": requestedItem = new BullDtOscillator(_tickerData, this); break; //////////// Predicted bull strategies /////////// case "BullCciCrossoverPredicted": requestedItem = new BullCciCrossoverPredicted(_tickerData, this); break; case "BullDmiPredicted": requestedItem = new BullDmiPredicted(_tickerData, this); break; case "BullEaseOfMovementPredicted": requestedItem = new BullEaseOfMovementPredicted(_tickerData, this); break; case "BullKeltnerExtendedPredicted": requestedItem = new BullKeltnerExtendedPredicted(_tickerData, this); break; case "BullMacdCrossoverPredicted": requestedItem = new BullMacdCrossoverPredicted(_tickerData, this); break; case "BullMomentumCrossoverPredicted": requestedItem = new BullMomentumCrossoverPredicted(_tickerData, this); break; case "BullPriceOscillatorPredicted": requestedItem = new BullPriceOscillatorPredicted(_tickerData, this); break; case "BullRsiCrossoverPredicted": requestedItem = new BullRsiCrossoverPredicted(_tickerData, this); break; case "BullSmaCrossoverPredicted": requestedItem = new BullSmaCrossoverPredicted(_tickerData, this); break; case "BullStochasticsCrossoverPredicted": requestedItem = new BullStochasticsCrossoverPredicted(_tickerData, this); break; case "BullStochasticsFastCrossoverPredicted": requestedItem = new BullStochasticsFastCrossoverPredicted(_tickerData, this); break; case "BullStochRsiCrossoverPredicted": requestedItem = new BullStochRsiCrossoverPredicted(_tickerData, this); break; case "BullTrixSignalCrossoverPredicted": requestedItem = new BullTrixSignalCrossoverPredicted(_tickerData, this); break; case "BullTrixZeroCrossoverPredicted": requestedItem = new BullTrixZeroCrossoverPredicted(_tickerData, this); break; case "BullWilliamsRCrossoverPredicted": requestedItem = new BullWilliamsRCrossoverPredicted(_tickerData, this); break; // // Bear // case "BearBollingerExtended": requestedItem = new BearBollingerExtended(_tickerData, this); break; case "BearCciCrossover": requestedItem = new BearCciCrossover(_tickerData, this); break; case "BearEaseOfMovement": requestedItem = new BearEaseOfMovement(_tickerData, this); break; case "BearDojiFound": requestedItem = new BearDojiFound(_tickerData, this); break; case "BearKeltnerExtended": requestedItem = new BearKeltnerExtended(_tickerData, this); break; case "BearMacdMomentum": requestedItem = new BearMacdMomentum(_tickerData, this); break; case "BearMacdCrossover": requestedItem = new BearMacdCrossover(_tickerData, this); break; case "BearMomentumCrossover": requestedItem = new BearMomentumCrossover(_tickerData, this); break; case "BearRsiCrossover": requestedItem = new BearRsiCrossover(_tickerData, this); break; case "BearSmaCrossover": requestedItem = new BearSmaCrossover(_tickerData, this); break; case "BearStochasticsCrossover": requestedItem = new BearStochasticsCrossover(_tickerData, this); break; case "BearStochasticsFastCrossover": requestedItem = new BearStochasticsFastCrossover(_tickerData, this); break; case "BearStochRsiCrossover": requestedItem = new BearStochRsiCrossover(_tickerData, this); break; case "BearTrendStart": requestedItem = new BearTrendStart(_tickerData, this); break; case "BearTrixSignalCrossover": requestedItem = new BearTrixSignalCrossover(_tickerData, this); break; case "BearTrixZeroCrossover": requestedItem = new BearTrixZeroCrossover(_tickerData, this); break; case "BearWilliamsRCrossover": requestedItem = new BearWilliamsRCrossover(_tickerData, this); break; case "BearBeltHoldFound": requestedItem = new BearBeltHoldFound(_tickerData, this); break; case "BearEngulfingFound": requestedItem = new BearEngulfingFound(_tickerData, this); break; case "BearHaramiFound": requestedItem = new BearHaramiFound(_tickerData, this); break; case "BearHaramiCrossFound": requestedItem = new BearHaramiCrossFound(_tickerData, this); break; case "DarkCloudCoverFound": requestedItem = new DarkCloudCoverFound(_tickerData, this); break; case "DownsideTasukiGapFound": requestedItem = new DownsideTasukiGapFound(_tickerData, this); break; case "EveningStarFound": requestedItem = new EveningStarFound(_tickerData, this); break; case "FallingThreeMethodsFound": requestedItem = new FallingThreeMethodsFound(_tickerData, this); break; case "HangingManFound": requestedItem = new HangingManFound(_tickerData, this); break; case "InvertedHammerFound": requestedItem = new InvertedHammerFound(_tickerData, this); break; case "ShootingStarFound": requestedItem = new ShootingStarFound(_tickerData, this); break; case "ThreeBlackCrowsFound": requestedItem = new ThreeBlackCrowsFound(_tickerData, this); break; case "UpsideGapTwoCrowsFound": requestedItem = new UpsideGapTwoCrowsFound(_tickerData, this); break; case "BearPriceOscillator": requestedItem = new BearPriceOscillator(_tickerData, this); break; case "BearDmi": requestedItem = new BearDmi(_tickerData, this); break; case "BearBressertDss": requestedItem = new BearBressertDss(_tickerData, this, runnableParams); break; case "BearRsi3m3": requestedItem = new BearRsi3m3(_tickerData, this); break; case "BearDtOscillator": requestedItem = new BearDtOscillator(_tickerData, this); break; //////////// Predicted bear strategies /////////// case "BearCciCrossoverPredicted": requestedItem = new BearCciCrossoverPredicted(_tickerData, this); break; case "BearDmiPredicted": requestedItem = new BearDmiPredicted(_tickerData, this); break; case "BearEaseOfMovementPredicted": requestedItem = new BearEaseOfMovementPredicted(_tickerData, this); break; case "BearKeltnerExtendedPredicted": requestedItem = new BearKeltnerExtendedPredicted(_tickerData, this); break; case "BearMacdCrossoverPredicted": requestedItem = new BearMacdCrossoverPredicted(_tickerData, this); break; case "BearMomentumCrossoverPredicted": requestedItem = new BearMomentumCrossoverPredicted(_tickerData, this); break; case "BearPriceOscillatorPredicted": requestedItem = new BearPriceOscillatorPredicted(_tickerData, this); break; case "BearRsiCrossoverPredicted": requestedItem = new BearRsiCrossoverPredicted(_tickerData, this); break; case "BearSmaCrossoverPredicted": requestedItem = new BearSmaCrossoverPredicted(_tickerData, this); break; case "BearStochasticsCrossoverPredicted": requestedItem = new BearStochasticsCrossoverPredicted(_tickerData, this); break; case "BearStochasticsFastCrossoverPredicted": requestedItem = new BearStochasticsFastCrossoverPredicted(_tickerData, this); break; case "BearStochRsiCrossoverPredicted": requestedItem = new BearStochRsiCrossoverPredicted(_tickerData, this); break; case "BearTrixSignalCrossoverPredicted": requestedItem = new BearTrixSignalCrossoverPredicted(_tickerData, this); break; case "BearTrixZeroCrossoverPredicted": requestedItem = new BearTrixZeroCrossoverPredicted(_tickerData, this); break; case "BearWilliamsRCrossoverPredicted": requestedItem = new BearWilliamsRCrossoverPredicted(_tickerData, this); break; default: throw new Exception(nameAndParameters + " doesn't exist"); } _createdItems[key] = requestedItem; } return(requestedItem); }
/// <summary> /// Called on each bar update event (incoming tick) /// </summary> protected override void OnBarUpdate() { double stopPrice = 0; double limitPrice = 0; int qty = 1; if (BarsPeriod.Id != PeriodType.Range) { DrawTextFixed("error msg", "This Strategy only works on Intraday Range Bars", TextPosition.BottomRight); return; } if (Bars.BarsSinceSession == 1) { ResetTrade(); } RcMACD macd = RcMACD(12, 26, 9); RSI rsi = RSI(7, 3); Stochastics stoc = Stochastics(3, 5, 2); Bollinger bollinger = Bollinger(2, 12); if (UseRSIFilter == 1) { if (rsi[0] > 70) { this.DrawTriangleUp(CurrentBar + "Up", false, 0, Low[0] - 2 * TickSize, Color.Green); } else if (rsi[0] < 30) { DrawTriangleDown(CurrentBar + "Down", false, 0, High[0] + 2 * TickSize, Color.Red); } } else { if (stoc.D[0] > 80) { DrawTriangleUp(CurrentBar + "Up", false, 0, Low[0] - 2 * TickSize, Color.Green); } else if (stoc.D[0] < 20) { DrawTriangleDown(CurrentBar + "Down", false, 0, High[0] + 2 * TickSize, Color.Red); } } if (Position.MarketPosition == MarketPosition.Flat) { if (entryOrderLong != null) { CancelOrder(entryOrderLong); entryOrderLong = null; } else // Long Entry Conditions if (longTrades && entryOrderLong == null && macd.Mom[0] > 0 && macd.Mom[0] > macd.Avg[0] && ((UseRSIFilter == 1 && rsi[0] > 70) || (UseRSIFilter == 0 && stoc.D[0] < 20)) && Rising(bollinger.Upper) && Close[0] > (bollinger.Upper[0] - 2 * TickSize) //&& Time[0].DayOfWeek != DayOfWeek.Friday //&& (ToTime(Time[0]) >= 83000 && ToTime(Time[0]) <= 103000) ) { DrawArrowUp(CurrentBar + "Long", false, 0, Low[0] - 8 * TickSize, Color.Green); if (Close[0] == High[0]) { //DrawDot(CurrentBar + "marketPrice", false, 1, Close[0], Color.Gray); if (!reverseTrades) { entryOrderLong = SubmitOrder(0, OrderAction.Buy, OrderType.Market, qty, limitPrice, stopPrice, orderPrefix + "ocoEnter", "Long"); } else { entryOrderLong = SubmitOrder(0, OrderAction.SellShort, OrderType.Market, qty, limitPrice, stopPrice, orderPrefix + "ocoEnter", "!Long"); } } else { stopPrice = Close[0] + 1 * TickSize; limitPrice = Close[0] + 1 * TickSize; //DrawDot(CurrentBar + "stopPrice", false, 1, stopPrice, Color.DarkGray); //DrawDot(CurrentBar + "limitPrice", false, 1, limitPrice, Color.Black); if (!reverseTrades) { entryOrderLong = SubmitOrder(0, OrderAction.Buy, OrderType.StopLimit, qty, limitPrice, stopPrice, orderPrefix + "ocoEnter", "Long"); } else { entryOrderLong = SubmitOrder(0, OrderAction.SellShort, OrderType.StopLimit, qty, limitPrice, stopPrice, orderPrefix + "ocoEnter", "!Long"); } } } // Short Entry Conditions if (shortTrades && entryOrderShort == null && macd.Mom[0] < 0 && macd.Mom[0] < macd.Avg[0] && ((UseRSIFilter == 1 && rsi[0] < 30) || (UseRSIFilter == 0 && stoc.D[0] > 80)) && Falling(bollinger.Lower) && Close[0] < (bollinger.Lower[0] + 2 * TickSize)) { DrawArrowDown(CurrentBar + "Short", false, 0, High[0] + 8 * TickSize, Color.Red); if (Close[0] == Low[0]) { //DrawDot(CurrentBar + "marketPrice", false, 1, Close[0], Color.Gray); if (!reverseTrades) { entryOrderShort = SubmitOrder(0, OrderAction.SellShort, OrderType.Market, qty, limitPrice, stopPrice, orderPrefix + "ocoEnter", "Short"); } else { entryOrderShort = SubmitOrder(0, OrderAction.Buy, OrderType.Market, qty, limitPrice, stopPrice, orderPrefix + "ocoEnter", "!Short"); } } else { stopPrice = Close[0] - 1 * TickSize; limitPrice = Close[0] - 1 * TickSize; //DrawDot(CurrentBar + "stopPrice", false, 1, stopPrice, Color.DarkGray); //DrawDot(CurrentBar + "limitPrice", false, 1, limitPrice, Color.Black); if (!reverseTrades) { entryOrderShort = SubmitOrder(0, OrderAction.SellShort, OrderType.StopLimit, qty, limitPrice, stopPrice, orderPrefix + "ocoEnter", "Short"); } else { entryOrderShort = SubmitOrder(0, OrderAction.Buy, OrderType.StopLimit, qty, limitPrice, stopPrice, orderPrefix + "ocoEnter", "!Short"); } } } } }
private StrategyParameterInt alarn_persent; // с каким использованным % депо можно закрывать убыточную сделку public Frankbol_for_bnb(string name, StartProgram startProgram) : base(name, startProgram) // конструктор { TabCreate(BotTabType.Simple); // создание простой вкладки _tab = TabsSimple[0]; // записываем первую вкладку в поле kvot_name = "USDT"; // тут надо указать - инициализировать название квотируемой валюты (деньги) tovar_name = "BNB"; // тут надо указать - инициализировать название товара vkl_Robota = CreateParameter("РОБОТ Включен?", false); slippage = CreateParameter("Велич. проскаль.у ордеров", 1m, 1m, 200m, 5m); profit = CreateParameter("ТЭЙКПРОФИТ от рынка На ", 10, 5, 50, 5); greed = CreateParameter("Сколько минимум прибыли ожидать в сделке на каждые 100$ ", 0.55m, 0.25m, 5.5m, 0.05m); // жадность greed_max = CreateParameter("Сколько Максимум прибыли ожидать в сделке на каждые 100$ ", 1.25m, 0.25m, 5.5m, 0.05m); // жадность velich_usrednen = CreateParameter("Усред.уваелич в раз ", 0.01m, 0.01m, 0.5m, 0.01m); do_piram = CreateParameter(" РАСТ. до Пирамиды", 20m, 5m, 200m, 5m); turbo_shift = CreateParameter(" Turbo добавлять", 50m, 5m, 200m, 5m); pir_of = CreateParameter(" ОТКлючить Пирамиду при % товара", 10m, 5m, 100m, 5m); vkl_piramid = CreateParameter("Пирамида включена?", false); prof_on = CreateParameter("Забирать профит с % ", 10m, 5m, 100m, 5m); ckok_profit_stop = CreateParameter("Сколько ПРИБЫЛИ закрывать стоп ордером? ", 1m, 0.01m, 10m, 0.01m); vkl_stopa = CreateParameter("Стоп Включен?", true); deltaUsredn = CreateParameter("УСРЕДнять через", 20m, 5m, 50m, 5m); start_per_depo = CreateParameter("СТАРТОВАТЬ с ? % депо)", 5, 5, 20, 5); min_sum = CreateParameter("МИН сумма орд.на бирже($)", 10.1m, 10.1m, 10.1m, 10.1m); komis_birgi = CreateParameter("КОМ биржи в %", 0.2m, 0, 0.1m, 0.1m); uchet_blok_sred_vkl = CreateParameter("Учитывать блокир. средства?", false); n_min = CreateParameter("зависание снимать через N минут ", 1, 1, 20, 1); volum_alarm = CreateParameter("АВАРИЙНЫЙ ОБЪЕМ ПРОДАЖ", 450, 150, 1000, 50); kpit_sum = CreateParameter("Закр. Позицию с УБЫТОКОМ от ", -1m, 10.1m, 10.1m, 10.1m); vkl_met_fix_loss_time = CreateParameter("Закрываться по ВРЕМЕНИ в убыток ? ", true); vkl_alarm_volum = CreateParameter("Убыток по ОБЪЕМАМ Закрывать ? ", false); Itogo = CreateParameter("Итого Заработано ", 0m, 0m, 0m, 0m); n_min_lesion = CreateParameter("Закрывать убыток через N минут ", 120, 30, 360, 20); sprint = CreateParameter("Большие объемы это когда больше = ", 101, 50, 200, 50); alarn_persent = CreateParameter("% купленного можно сливать = ", 25, 50, 100, 1); _bolin = new Bollinger(name + "Bollinger", false); _bolin.Lenght = 20; _bolin.Deviation = 2.2m; _bolin = (Bollinger)_tab.CreateCandleIndicator(_bolin, "Prime"); _bolin.Save(); block_in = true; // инициализируем значение блокировки _ma_short = new MovingAverage(name + "Ma5", true); _ma_short = (MovingAverage)_tab.CreateCandleIndicator(_ma_short, "Prime"); _ma_short.Lenght = 5; // присвоение значения _ma_short.Save(); _ma_long = new MovingAverage(name + "Ma20", false); _ma_long = (MovingAverage)_tab.CreateCandleIndicator(_ma_long, "Prime"); _ma_long.Lenght = 20; // присвоение значения _ma_long.Save(); _vol = new Volume(name + "Volum", false); _vol = (Volume)_tab.CreateCandleIndicator(_vol, "nameArea"); _vol.Save(); _tab.BestBidAskChangeEvent += _tab_BestBidAskChangeEvent; // событие изменения лучших цен _tab.OrderUpdateEvent += _tab_OrderUpdateEvent; // событие обновления ордеров _tab.MarketDepthUpdateEvent += _tab_MarketDepthUpdateEvent; // пришел новый стакан _tab.PositionNetVolumeChangeEvent += _tab_PositionNetVolumeChangeEvent; // у позиции изменился объем _tab.PositionClosingSuccesEvent += _tab_PositionClosingSuccesEvent; // позиция успешно закрыта _tab.NewTickEvent += _tab_NewTickEvent; // событие новых тиков } // конструктор