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

Иконка ресурса

NinjaTrader 8 Простой футпринт 2015-11-26

Нет прав для скачивания
С НТ8 не все просто, видимо писать нужно будет после выхода ее из тестирования. На каждой версии есть отличия, даже простые индикаторы работают по разному. Мне уже три раза переписали,
тут вариантов не много, либо сидеть на бешке для которой написано что-то и ждать выхода финальной версии, либо оставаться пока на НТ7, с ней все ровно.
 
Все сделал у как в учебнике у меня не работает помогите разобраться пишет
Indicator 'SimpleFootPrint': Error on calling 'OnRender' method on bar 0: You are accessing an index with a value that is invalid since it is out-of-range. I.E. accessing a series [barsAgo] with a value of 5 when there are only 4 bars on the chart.
нинзя 8 демо CQG
а что именно сделали? пишет что неправильно обратились по индексу.
 
Помогите, подскажите, есть для НТ8 индикатор, отображающий объемы в барах, типа Cluster Volume Indicator, который только для НТ7. На 8-ой он не работает. Я не программист, переписать не могу.
 
Не могу установить футпринт - помогите пожалуйста. В архиве нет никакого хмл. Где его взять?
 

Вложения

  • 1.jpg
    1.jpg
    42,9 КБ · Просмотры: 83
Последнее редактирование:
Не могу установить футпринт - помогите пожалуйста. В архиве нет никакого хмл. Где его взять?
а как вы его устанавливаете, если из архива, то залейте архив, посмотрим. ПО идее в архиве должен быть файл info.xml (в нем указывается версия платформы) и папка с файлами индикатора
 
С установкой разобрался - установка прошла успешно.
Теперь - при перезагрузки NT8 пишет, что не может очистить кеш и при установки индикатора ничего не происходит на графике.
Галочки по скринам в начале темы я поставил, но на графике ничего нечего не изменилось.
Что я делаю не так и в чем причина?
 
С кешем разобрался - больше не ругается !!!
Всё равно !!! При добавлении на график индикатора - ничего не происходит.
Помогите пожалуйста разобраться.
 
С кешем разобрался - больше не ругается !!!
Всё равно !!! При добавлении на график индикатора - ничего не происходит.
Помогите пожалуйста разобраться.
Проблема наверное из-за смены релиза НТ8. поставил себе, выдавал ошибку, в методе OnRender закоментировал две последние строки (пока не разобрался за что она отвечает), но индикатор стал работать.
Код:
protected override void OnRender(ChartControl chartControl, ChartScale chartScale)
        {
            
            TextFormat tf=new TextFormat(new SharpDX.DirectWrite.Factory(),"Arial",16);
            tf.ParagraphAlignment=ParagraphAlignment.Center;
            tf.TextAlignment=SharpDX.DirectWrite.TextAlignment.Center;
            
            TextFormat tf_low=new TextFormat(new SharpDX.DirectWrite.Factory(),"Arial",12);
            tf_low.ParagraphAlignment=ParagraphAlignment.Near;
            tf_low.TextAlignment=SharpDX.DirectWrite.TextAlignment.Trailing;
            
            TextFormat tf_low2=new TextFormat(new SharpDX.DirectWrite.Factory(),"Arial",12);
            tf_low2.ParagraphAlignment=ParagraphAlignment.Near;
            tf_low2.TextAlignment=SharpDX.DirectWrite.TextAlignment.Leading;
            Print("Точка останова");
            for (int idx = ChartBars.FromIndex; idx <= ChartBars.ToIndex; idx++)
            {
                double      closeValue              = ChartBars.Bars.GetClose(idx);
                double      openValue               = ChartBars.Bars.GetOpen(idx);
                double      highValue              = ChartBars.Bars.GetHigh(idx);
                double      lowValue               = ChartBars.Bars.GetLow(idx);
                
                IEnumerable<ABV> _list = main_list.Where(p => p.Id == idx);
                    
                GlyphTypeface gtf=new GlyphTypeface();
                System.Windows.Media.Typeface t_face=new System.Windows.Media.Typeface(new System.Windows.Media.FontFamily("Arial"),FontStyles.Normal,FontWeights.Normal,FontStretches.Normal);               
                t_face.TryGetGlyphTypeface(out gtf);
                double h_str=gtf.CapsHeight*16;
                        
                int x=chartControl.GetXByBarIndex(ChartBars,idx)-(int)chartControl.BarWidth;
                int y_close=chartScale.GetYByValue(closeValue)-(int)(h_str*0.5*1.8);
                int y_open=chartScale.GetYByValue(openValue)-(int)(h_str*0.5*1.8);
                int y_high=chartScale.GetYByValue(highValue+TickSize)-(int)(h_str*0.5*1.8);
                int y_low=chartScale.GetYByValue(lowValue-TickSize)-(int)(h_str*0.5*1.8);
                BrushProperties bp2=new BrushProperties();
                BrushProperties bp_frame=new BrushProperties();
                bp_frame.Opacity=0.99f;
                bp2.Opacity=0.7f;
                int y3=y_close;
                SharpDX.Color clr=SharpDX.Color.Gray;
                if (closeValue>openValue)
                    clr=SharpDX.Color.Green;
                else if (closeValue<openValue)
                {
                    clr=SharpDX.Color.Red;
                    y3=y_open;
                }
                        
                SharpDX.Direct2D1.SolidColorBrush sb2=new SharpDX.Direct2D1.SolidColorBrush(RenderTarget,clr,bp2);
                SharpDX.Direct2D1.SolidColorBrush frame=new SharpDX.Direct2D1.SolidColorBrush(RenderTarget,SharpDX.Color.Black,bp2);
                            
                RenderTarget.FillRectangle(new RectangleF(x-10,y3,8,(float)Math.Abs(y_close-y_open)+(int)(h_str*1.8)),sb2);   
                if (idx==ChartBars.Count-1)
                {
                    
                    foreach(KeyValuePair<double, ABVolume> kvp in _abv)
                    {
                        int y=chartScale.GetYByValue(kvp.Key)-(int)(h_str*0.5*1.8);
                        int y2=chartScale.GetYByValue(kvp.Key+TickSize)-(int)(h_str);
                        string str="";   
                        str=kvp.Value.ask_volume.ToString()+" x "+kvp.Value.bid_volume.ToString();
                        BrushProperties bp=new BrushProperties();
                        bp.Opacity=0.7f;
                        SharpDX.Color clr2=SharpDX.Color.Green;
                        if (kvp.Value.ask_volume<kvp.Value.bid_volume)
                            clr2=SharpDX.Color.Red;
                        SharpDX.Direct2D1.SolidColorBrush sb=new SharpDX.Direct2D1.SolidColorBrush(RenderTarget,clr2,bp);
                        RenderTarget.FillRectangle(new RectangleF(x,y,(int)chartControl.BarWidth*2,(float)(h_str*1.8)),sb);   
                        
                        if (kvp.Key==Close[0])
                            RenderTarget.DrawRectangle(new RectangleF(x,y,(int)chartControl.BarWidth*2,(float)(h_str*1.8)),frame,3);   
                            
                        RenderTarget.DrawText(str,tf,new RectangleF(x,y,(int)chartControl.BarWidth*2,(float)(h_str*1.8)),
                            new SharpDX.Direct2D1.SolidColorBrush(RenderTarget,SharpDX.Color.Black),
                            DrawTextOptions.None,MeasuringMode.GdiClassic);
                    }
                    
                }
                else
                {
                    double delta=0;
                    double max_delta=0;
                    double curr_delta=0;
                    foreach (ABV t in _list)
                    {
                        curr_delta=t.Vol_ask+t.Vol_bid;
                        if (curr_delta>max_delta)
                            max_delta=curr_delta;
                    }
                    foreach (ABV t in _list)
                    {
                        
                        int y=chartScale.GetYByValue(t.Price)-(int)(h_str*0.5*1.8);
                        int y2=chartScale.GetYByValue(t.Price+TickSize)-(int)(h_str);
                        string str="";   
                        str=t.Vol_ask.ToString()+" x "+t.Vol_bid.ToString();
                        delta+=t.Vol_ask;
                        delta-=t.Vol_bid;
                        curr_delta=t.Vol_ask+t.Vol_bid;
                        double curr_procent=100*curr_delta/max_delta;
                        double curr_opacity=Math.Round(curr_procent/100*0.8,1);
                        BrushProperties bp=new BrushProperties();
                        bp.Opacity=(float)curr_opacity;
                        SharpDX.Color clr3=SharpDX.Color.Green;
                        if (t.Vol_ask<t.Vol_bid)
                            clr3=SharpDX.Color.Red;
                        SharpDX.Direct2D1.SolidColorBrush sb=new SharpDX.Direct2D1.SolidColorBrush(RenderTarget,clr3,bp);
                        RenderTarget.FillRectangle(new RectangleF(x,y,(int)chartControl.BarWidth*2,(float)(h_str*1.8)),sb);   
                        
                        RenderTarget.DrawText(str,tf,new RectangleF(x,y,(int)chartControl.BarWidth*2,(float)(h_str*1.8)),
                            new SharpDX.Direct2D1.SolidColorBrush(RenderTarget,SharpDX.Color.Black),
                        DrawTextOptions.None,MeasuringMode.GdiClassic);
                    }   
                    RenderTarget.DrawText(delta.ToString(),tf_low,new RectangleF(x,y_low,(int)chartControl.BarWidth*2,(float)(h_str*1.8)),
                            new SharpDX.Direct2D1.SolidColorBrush(RenderTarget,SharpDX.Color.Black),DrawTextOptions.None,MeasuringMode.GdiClassic);
                    //RenderTarget.DrawText(Volume[ChartBars.Count-idx-1].ToString(),tf_low2,new RectangleF(x,y_low,(int)chartControl.BarWidth*2,(float)(h_str*1.8)),
                    //        new SharpDX.Direct2D1.SolidColorBrush(RenderTarget,SharpDX.Color.Black),DrawTextOptions.None,MeasuringMode.GdiClassic);
                    
                    }
                    
                }
                
        }
 
  • Like
Реакции: Iman
Проблема наверное из-за смены релиза НТ8. поставил себе, выдавал ошибку, в методе OnRender закоментировал две последние строки (пока не разобрался за что она отвечает), но индикатор стал работать.

Спасибо, что разобрались с моей проблемой!
К сожалению я не программист и очень далёк от переделок индикаторов и разных кодов.
Если Вам не очень трудно - перешлите пожалуйста мне уже отредактированный индикатор на почту: mu@lanwizard.ru
 
Спасибо - Arkadiy !
Файлик получил, но теперь не могу понять, как удалить старый файл перед установкой вашего файла.
Подскажите пожалуйста.
 
установите поверх, думаю что заменит. просто под рукой нет нт8 чтобы точно ответить
 
Установил индикатор поверх старого, но индикатор не работает. На графике есть информация, что он установлен, но вообще ничего не происходит.
С ранее установленным индикатором - было тоже самое.
Спасибо Вам - Arkadiy ! ......... наверно придётся ждать выхода NT8 - без багов, или индикатор - заточенный под NT8.
 
Не отображается футпринт! Установил все как и описано, накидываю индюк на график, но футпринт не отображается! в чем может быть проблема?
 
вопрос к разработчику индикатора NT8. можно ли решить проблему связанную подвисанием самого чарта когда сжимаешь по оси х. я так понимаю метод OnRender не успевает просчитывать все бары, из-за этого лагает. Если есть решение данного вопроса буду благодарен, ну или в каком направлении копать?
 
Сомневаюсь, что проблема в этом.
Но если так, то только изменение алгоритма расчета поможет, ну или увеличение мощности компа.
 
Назад
Верх Низ