• Тинькофф Банк-лучшие банковские продукты еще выгоднее
    Выбирайте продукт от банка Тинькофф
  • Уважаемые форумчане, друзья и посетители!
    Поступило предложение ( ссылка на обсуждение ) на сбор средств поддержания форума в рабочем состоянии с 1 июня ( оплата хостинга, бэкап ежедневный на другой хостинг и тд), отчетность будет предоставляться ежемесячно. Пока на ЮMoney ( яндекс деньги), доступно картой перевод, далее добавлю другие способы. Сумму перевода указывайте на ваш выбор исходя из своих возможностей.
    Форум продолжает свою работу благодаря Вашим пожертвованиям.

NinjaTrader 8 Индикатор волатильности

Прошу посильной помощи в коде. Сделан индикатор на основе ролика от Сергея (Выше). Вопрос в скрине.
 

Вложения

  • Прошу помощи в коде..png
    Прошу помощи в коде..png
    293,9 КБ · Просмотры: 49
Для тех кто выкладывает код в виде картинки предназначен отдельный котёл в аду.
 
Сергей (NT8), чувствительная натура... ))) Лучше советом помоги первокласснику.

Прикрепил код в вордовском файле, котел пустовать будет... )
 

Вложения

  • VolatilityPrival.docx
    18,2 КБ · Просмотры: 12
Последнее редактирование:
За код в ворде двойной котёл)) Это вообще нечитаемо.

Есть же специальные теги для этого на форуме
C#:
Сюда
Писать
Код

А по теме добавляй дневной или любой другой таймфрейм и используй данные с него без проблем.
 
За код в ворде двойной котёл))
Развеселил. Код очень большой,там 4, или 5 страниц, в файле все компактно, перекрасить цвет - секундное дело, копирнуть в редактор тоже. Это при желании. Понятно, что можно прописать любой ТФ, первокласснику с алфавитом бы разобраться, а идеи и логика понятны. Вроде нашел вариант, попробую по аналогии.
 
C#:
//
// Copyright (C) 2019, NinjaTrader LLC <www.ninjatrader.com>.
// NinjaTrader reserves the right to modify or overwrite this NinjaScript component with each release.
//
#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.Data;
using NinjaTrader.NinjaScript;
using NinjaTrader.Core.FloatingPoint;
using NinjaTrader.NinjaScript.DrawingTools;
#endregion

// This namespace holds indicators in this folder and is required. Do not change it.
namespace NinjaTrader.NinjaScript.Indicators
{
    /// <summary>
    /// Calculates the range of a bar.
    /// </summary>
    public class Volatility : Indicator
    {
        protected override void OnStateChange()
        {
            if (State == State.SetDefaults)
            {
                Description                    = NinjaTrader.Custom.Resource.NinjaScriptIndicatorDescriptionRange;
                Name                        = "Volatility";
                BarsRequiredToPlot            = 0;
                IsSuspendedWhileInactive    = true;

                AddPlot(new Stroke(Brushes.Goldenrod, 2), PlotStyle.Bar, NinjaTrader.Custom.Resource.RangeValue);
            }
        }

        protected override void OnBarUpdate()
        {
            // Add a 15 minute Bars object to the strategy
            //AddDataSeries(Data.BarsPeriodType.Minute, 15);
            //(Data.BarsPeriodType.Minute, 1440)
            Value[0] = High[0] - Low[0];
            //string str="Абракадарба";
            //string str="ATR=" + ATR(14)[0].ToString()+ " Range=" + SMA(Range(),14)[0];
            string str=string.Format("ATR={0:0.##} SMA(Range)={1:0.##} Цена прошла в %={2:00.##}%", ATR(90)[0], SMA(Range(),90)[0], 100*(High[0] - Low[0])/SMA(Range(),90)[0]);
            Draw.TextFixed(this, "tag1", str, TextPosition.TopLeft);
        }
    }
}

#region NinjaScript generated code. Neither change nor remove.

namespace NinjaTrader.NinjaScript.Indicators
{
    public partial class Indicator : NinjaTrader.Gui.NinjaScript.IndicatorRenderBase
    {
        private Volatility[] cacheVolatility;
        public Volatility Volatility()
        {
            return Volatility(Input);
        }

        public Volatility Volatility(ISeries<double> input)
        {
            if (cacheVolatility != null)
                for (int idx = 0; idx < cacheVolatility.Length; idx++)
                    if (cacheVolatility[idx] != null &&  cacheVolatility[idx].EqualsInput(input))
                        return cacheVolatility[idx];
            return CacheIndicator<Volatility>(new Volatility(), input, ref cacheVolatility);
        }
    }
}

namespace NinjaTrader.NinjaScript.MarketAnalyzerColumns
{
    public partial class MarketAnalyzerColumn : MarketAnalyzerColumnBase
    {
        public Indicators.Volatility Volatility()
        {
            return indicator.Volatility(Input);
        }

        public Indicators.Volatility Volatility(ISeries<double> input )
        {
            return indicator.Volatility(input);
        }
    }
}

namespace NinjaTrader.NinjaScript.Strategies
{
    public partial class Strategy : NinjaTrader.Gui.NinjaScript.StrategyRenderBase
    {
        public Indicators.Volatility Volatility()
        {
            return indicator.Volatility(Input);
        }

        public Indicators.Volatility Volatility(ISeries<double> input )
        {
            return indicator.Volatility(input);
        }
    }
}

#endregion
 
Хочу вбросить свои 5 копеек.
Тут говорится о входе в рынок когда % меньше 30-40%, но это в корне не верно т.к. при таком раскладе не известно в какую сторону входить и можно попасть во флет с 80% вероятностью, а почему бы в разворот не заходить при АТР приближающийся к 90-100% и тем более привыкающий 100%. Кто-то скажет, что это ловля ножей, но я скажу, что это самый смак, заходить на разворотах т.к. его проще выловить и понятно в какую сторону входить.
 
Yes, получилось. Пустовать котлам.
Подскажите плиз, какой код добавить, что бы ATR по 1440 мин строился в не зависимости от расположенного ТФ.
И как скрыть подвальный баровый график, какой код удалить ?
 
да вроде бы в ветке эта тема поднималась, надо добавить датасерию.
еще проще, через генератор создать, там все кликая мышкой можно сделать.
 
код что выше дополнил
Код:
protected override void OnStateChange()
        {
            if (State == State.SetDefaults)
            {
                Description = NinjaTrader.Custom.Resource.NinjaScriptIndicatorDescriptionRange;
                Name = "Volatility";
                BarsRequiredToPlot = 0;
                IsSuspendedWhileInactive = true;
                DrawOnPricePanel = true;
                IsOverlay = true;


                //AddPlot(new Stroke(Brushes.Goldenrod, 2), PlotStyle.Bar, NinjaTrader.Custom.Resource.RangeValue);
            }
            else if (State == State.Configure)
            {
                AddDataSeries(BarsPeriodType.Minute, 1440);
            }
        }

        protected override void OnBarUpdate()
        {
            if(CurrentBars[1] < 0)
                return;

           //Value[0] = High[0] - Low[0];

            string str = string.Format("ATR={0:0.##} SMA(Range)={1:0.##} Price passed in %={2:00.##}%", ATR(Inputs[1], 90)[0], SMA(Range(Inputs[1]), 90)[0], 100 * (Range(Inputs[1])[0]) / SMA(Range(Inputs[1]), 90)[0]);
            Draw.TextFixed(this, "tag1", str, TextPosition.TopLeft);
        }
 
Просто добавить мало, еще нужно с этой Серии получать данные. ))
Код:
protected override void OnStateChange()
        {
            if (State == State.SetDefaults)
            {
                Description = NinjaTrader.Custom.Resource.NinjaScriptIndicatorDescriptionRange;
                Name = "Volatility";
                BarsRequiredToPlot = 0;
                IsSuspendedWhileInactive = true;
                DrawOnPricePanel = true;
                IsOverlay = true;


                //AddPlot(new Stroke(Brushes.Goldenrod, 2), PlotStyle.Bar, NinjaTrader.Custom.Resource.RangeValue);
            }
            else if (State == State.Configure)
            {
                AddDataSeries(BarsPeriodType.Minute, 1440);
            }
        }

        protected override void OnBarUpdate()
        {
            if(CurrentBars[1] < 0)
                return;
            if(BarsInProgress == 1) //Получаем данные с AddDataSeries 1 так как DataSeries 0 это текущий ТФ графика.
            {
           //Value[0] = High[0] - Low[0];

            string str = string.Format("ATR={0:0.##} SMA(Range)={1:0.##} Price passed in %={2:00.##}%", ATR(Inputs[1], 90)[0], SMA(Range(Inputs[1]), 90)[0], 100 * (Range(Inputs[1])[0]) / SMA(Range(Inputs[1]), 90)[0]);
            Draw.TextFixed(this, "tag1", str, TextPosition.TopLeft);
            }
        }
 
Просто добавить мало, еще нужно с этой Серии получать данные. ))
Код:
protected override void OnStateChange()
        {
            if (State == State.SetDefaults)
            {
                Description = NinjaTrader.Custom.Resource.NinjaScriptIndicatorDescriptionRange;
                Name = "Volatility";
                BarsRequiredToPlot = 0;
                IsSuspendedWhileInactive = true;
                DrawOnPricePanel = true;
                IsOverlay = true;


                //AddPlot(new Stroke(Brushes.Goldenrod, 2), PlotStyle.Bar, NinjaTrader.Custom.Resource.RangeValue);
            }
            else if (State == State.Configure)
            {
                AddDataSeries(BarsPeriodType.Minute, 1440);
            }
        }

        protected override void OnBarUpdate()
        {
            if(CurrentBars[1] < 0)
                return;
            if(BarsInProgress == 1) //Получаем данные с AddDataSeries 1 так как DataSeries 0 это текущий ТФ графика.
            {
           //Value[0] = High[0] - Low[0];

            string str = string.Format("ATR={0:0.##} SMA(Range)={1:0.##} Price passed in %={2:00.##}%", ATR(Inputs[1], 90)[0], SMA(Range(Inputs[1]), 90)[0], 100 * (Range(Inputs[1])[0]) / SMA(Range(Inputs[1]), 90)[0]);
            Draw.TextFixed(this, "tag1", str, TextPosition.TopLeft);
            }
        }
вот тут и проверяю есть ли данные во второй датасерии
Код:
 if(CurrentBars[1] < 0)
return;
 
Последнее редактирование:
Продолжу свои мыли по поводу его использования.

Пример на CL имеем 11.07.19 на окончание дня (тк вола дневная) вола была 123% ,имеем разворот в этот день. Конечно с запозданием, но на за 10.07 вола была 107%. Плюс использование определенных уровней и еще кое чего мы получаем 12.07 отличный вход на шорт!
 
Хочу вбросить свои 5 копеек.
Тут говорится о входе в рынок когда % меньше 30-40%, но это в корне не верно т.к. при таком раскладе не известно в какую сторону входить и можно попасть во флет с 80% вероятностью, а почему бы в разворот не заходить при АТР приближающийся к 90-100% и тем более привыкающий 100%. Кто-то скажет, что это ловля ножей, но я скажу, что это самый смак, заходить на разворотах т.к. его проще выловить и понятно в какую сторону входить.
Продолжу свои мыли по поводу его использования.

Пример на CL имеем 11.07.19 на окончание дня (тк вола дневная) вола была 123% ,имеем разворот в этот день. Конечно с запозданием, но на за 10.07 вола была 107%. Плюс использование определенных уровней и еще кое чего мы получаем 12.07 отличный вход на шорт!
Dengaz, только за одни эти Ваши откровения - Огромная Благодарность!:Hi::Greeting::Good2:
Поделились бы.., развили бы эту тему о Вашем видении Волатильности (ATR?) полнее - было бы вообще - Здорово!:Good2:
Хотелось бы и для YM и MYM.
было бы неплохо скрины посмотреть
Присоединяюсь к пожеланию.
 
Волу на любом инструменте может каждый сам глянуть. Маржа практически на все инструменты, разворотные сетапы известны большинству, а дальше дело за малым. Тему не особо мне интересно развивать. Перерос я уже сидение на форумах. Сюда так от безделия захожу :tongue:
В день 40п. 1 контрактом и жизнь удалась. С неба звезд не хватаю. Но это все в планах т.к. своего депо не имею , да и смысла в нем нет тк есть проп-компании. Имею 2 стратегии, долгосрок и внутридневку - щас тестирую. На внутридневной планирую в проп, там заработать и на свое депо по долгосроку. Типо того.
gMj9ly3.png

SI7Si1U.png
 
Назад
Верх Низ