У вас не стоит Flash Player
Настройки
#8107 - Sat Jul 10 2010 11:49 AM Доходность фактора риска
777 Offline
Carpal Tunnel

Registered: Thu Apr 01 2010
Записи: 2564
Loc: г. Дзержинский
Добрый день подскажите пожалуйста, компиляция проходит успешно, но в ТСлабе получаю ошибку:
Click to reveal..
System.ArgumentOutOfRangeException: Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен превышать размер коллекции.
Имя параметра: index
в System.ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument argument, ExceptionResource resource)
в System.ThrowHelper.ThrowArgumentOutOfRangeException()
в System.Collections.Generic.List`1.get_Item(Int32 index)
в ДФР.DFR.Execute(ISecurity source) в c:\Users\НР\Documents\SharpDevelop Projects\DFR\DFR.cs:строка 24
в TSLab.User.Script.<>c__DisplayClass3.<Execute>b__2() в c:\Users\НР\AppData\Local\TSLab\TSLab\temp\code15.cs:строка 51
в TSLab.DataSource.ObjectsCacheBase`3.Get(TKey name, CacheObjectMaker`1 maker)
в TSLab.ScriptEngine.BaseTemplateContext.GetData(String handlerName, String[] parameters, CacheObjectMaker`1 maker)
в TSLab.User.Script.Execute(IContext context, ISecurity var0) в c:\Users\НР\AppData\Local\TSLab\TSLab\temp\code15.cs:строка 48



Код, того, что компилирую:

Click to reveal..
Code:
using System.Collections.Generic;
using TSLab.Script;
using TSLab.Script.Handlers;
using TSLab.DataSource;
using TSLab.Script.Helpers;

namespace ДФР
{
	public class DFR : IBar2DoubleHandler, IContextUses
	{
		[HandlerParameter]
		public int Period { get; set; }
		
		public IList<double> Execute(ISecurity source)
		{
		    var high = Context.GetData("Highest", new[] { Period.ToString() },
		                               () => Series.Highest(source.HighPrices, Period));
		    var low = Context.GetData("Lowest", new[] { Period.ToString() },
		                               () => Series.Lowest(source.LowPrices, Period));
		    var closes = source.ClosePrices;
		    IList<double> list = new List<double>(closes.Count);

		    for (int i = 0; i < closes.Count; i++)
		    { var K = System.Math.Log(closes[i]/closes[i-1]);
		        list.Add(K);
		    }
        
		    return list;
		}
		
		public IContext Context { get; set; }
	}}


При этом нет ошибок, если все то же самое сделать через блок формула :



Я так понимаю, что ошибка указывает на проблему [i-1], но как тогда ее учитывать в коде C#?
Если счетчик начинать с I=1, тогда ошибку выдает другую, а график рисует со смещением относительно построения "Формула"(синий - API, красный формула), но смещение, то мне не нужно:



Помогите пожалуйста разобраться.





Attachments
ДФР.jpg (1114 downloads)
ДФР тот и другой + ошибка.jpg (977 downloads)



Отредактировано 777 (Sat Jul 10 2010 12:05 PM)
_________________________
«Существует 3 типа лжи: ложь, наглая ложь и статистика»
Дизраэли.

Наверх
#8108 - Sat Jul 10 2010 12:26 PM Re: Доходность фактора риска [Re: 777]
Nektodron Offline

Carpal Tunnel

Registered: Thu Oct 23 2008
Записи: 5492
closes[i]/closes[i-1]

а цикл с 0 начинается
0-1 = -1, такого индекса нет

Наверх
#8110 - Sat Jul 10 2010 12:36 PM Re: Доходность фактора риска [Re: Nektodron]
777 Offline
Carpal Tunnel

Registered: Thu Apr 01 2010
Записи: 2564
Loc: г. Дзержинский
Ну правильно, я же написал, что если цикл начинаю с 1, тогда мало того, что получаю смещение, так еще и ошибку №2.
_________________________
«Существует 3 типа лжи: ложь, наглая ложь и статистика»
Дизраэли.

Наверх
#8114 - Sat Jul 10 2010 01:56 PM Re: Доходность фактора риска [Re: 777]
Nektodron Offline

Carpal Tunnel

Registered: Thu Oct 23 2008
Записи: 5492
где же 1, когда в приведенном коде с 0.
А чтоб не было смещения перед циклом нужно добавить
list.Add(0);
или вообще массив для результата использовать

Наверх
#8115 - Sat Jul 10 2010 02:25 PM Re: Доходность фактора риска [Re: Nektodron]
777 Offline
Carpal Tunnel

Registered: Thu Apr 01 2010
Записи: 2564
Loc: г. Дзержинский
Спасибо Нектодрон! Все получилось.
_________________________
«Существует 3 типа лжи: ложь, наглая ложь и статистика»
Дизраэли.

Наверх
#8117 - Sat Jul 10 2010 04:58 PM Re: Доходность фактора риска [Re: 777]
usas Offline
Pooh-Bah

Registered: Sun Feb 21 2010
Записи: 2331
Loc: Ухта
777-й, а откуда у Вас столько индикаторов во вкладке "пользовательские" (на скрине увидел).
А у меня нет..:-(((

Наверх
#8119 - Sat Jul 10 2010 07:38 PM Re: Доходность фактора риска [Re: usas]
777 Offline
Carpal Tunnel

Registered: Thu Apr 01 2010
Записи: 2564
Loc: г. Дзержинский
Originally Posted By: usas
777-й, а откуда у Вас столько индикаторов во вкладке "пользовательские" (на скрине увидел).
А у меня нет..:-(((

Есть такая программа SharpDevelop, помогает делать ... wink
_________________________
«Существует 3 типа лжи: ложь, наглая ложь и статистика»
Дизраэли.

Наверх
#8122 - Sat Jul 10 2010 09:56 PM Re: Доходность фактора риска [Re: 777]
usas Offline
Pooh-Bah

Registered: Sun Feb 21 2010
Записи: 2331
Loc: Ухта
А под буквами АМА - это не адаптивная скользящая средняя?

Наверх
#8124 - Sun Jul 11 2010 01:09 AM Re: Доходность фактора риска [Re: usas]
777 Offline
Carpal Tunnel

Registered: Thu Apr 01 2010
Записи: 2564
Loc: г. Дзержинский
Originally Posted By: usas
777-й, а откуда ......

Можно Царь, просто Царь....всея земли... grin
Могу поделиться .... Все в вопросы в личку smile


Отредактировано 777 (Sun Jul 11 2010 01:26 AM)
_________________________
«Существует 3 типа лжи: ложь, наглая ложь и статистика»
Дизраэли.

Наверх
#8133 - Sun Jul 11 2010 01:39 PM Re: Доходность фактора риска [Re: 777]
usas Offline
Pooh-Bah

Registered: Sun Feb 21 2010
Записи: 2331
Loc: Ухта
Да чего скромничать, кидай царский прайс на всеобщее обозрение..:_))

Наверх
#8718 - Wed Jul 21 2010 09:14 AM Re: Доходность фактора риска [Re: Nektodron]
777 Offline
Carpal Tunnel

Registered: Thu Apr 01 2010
Записи: 2564
Loc: г. Дзержинский
Nektodron, подскажите пожалуйста, компилирую индикатор. Смысл индикатора: он должен цепляться к какому либо блоку и имея close, выщитывать определенную величину, но при компиляции выдает ошибку: 'TSLab.Script.Handlers.dar' не реализует член интерфейса 'TSLab.Script.Handlers.IContextUses.Context' (CS0535). Вот код того, что компилирую:
Click to reveal..
Code:
using System;
using System.Collections.Generic;
using TSLab.Script;
using TSLab.Script.Handlers;
using TSLab.DataSource;
using TSLab.Script.Helpers;

namespace TSLab.Script.Handlers
{
    //[HandlerCategory("Indicators")]
    public class dar : IBar2DoubleHandler, IContextUses
    {
    	[HandlerParameter]
		public int Day { get; set; }
       
        public IList<double> Execute(IList<double> source,ISecurity source)
        {
            var DaR = new double[source.Count];
            var closes = source.ClosePrices;
            IList<double> list = new List<double>(closes.Count);
            for(int i = Day; i < source.Count; i++)
            {
            	DaR[i] = closes[i]*(source[i]*Day);
            }
            return DaR;
        }
    }
} 

Подскажите пожалуйста, что я делаю не так?
_________________________
«Существует 3 типа лжи: ложь, наглая ложь и статистика»
Дизраэли.

Наверх
#8726 - Wed Jul 21 2010 10:06 AM Re: Доходность фактора риска [Re: 777]
Nektodron Offline

Carpal Tunnel

Registered: Thu Oct 23 2008
Записи: 5492
интерфейс IContextUses уберите в заголовке класса

Наверх
#8728 - Wed Jul 21 2010 10:12 AM Re: Доходность фактора риска [Re: Nektodron]
777 Offline
Carpal Tunnel

Registered: Thu Apr 01 2010
Записи: 2564
Loc: г. Дзержинский
Теперь не реализует член интерфейса 'TSLab.Script.Handlers.IBar2DoubleHandler.Execute(TSLab.Script.ISecurity)' (CS0535).
_________________________
«Существует 3 типа лжи: ложь, наглая ложь и статистика»
Дизраэли.

Наверх
#8749 - Wed Jul 21 2010 02:19 PM Re: Доходность фактора риска [Re: 777]
Nektodron Offline

Carpal Tunnel

Registered: Thu Oct 23 2008
Записи: 5492
public IList<double> Execute(ISecurity source)

такой метод должен быть в вашем случае

Наверх
#8763 - Wed Jul 21 2010 05:37 PM Re: Доходность фактора риска [Re: Nektodron]
777 Offline
Carpal Tunnel

Registered: Thu Apr 01 2010
Записи: 2564
Loc: г. Дзержинский
Nektodron, у меня все компилируется, но эффект не тот, что ожидался, посмотрите пожалуйста код. Я просто не понимаю какой-то мелочи, может поможете. Сейчас, индикатор подцепляется только к источнику, а мне нужно, что бы он подцеплялся к источнику и к еще одному блоку(любому, где брал бы значение var r). Помогите пожалуйста!
Click to reveal..
Code:
 using System;
using System.Collections.Generic;
using TSLab.Script;
using TSLab.Script.Handlers;
using TSLab.DataSource;
using TSLab.Script.Helpers;

namespace DaR
{
    //[HandlerCategory("Indicators")]
    public class dar : IBar2DoubleHandler, IContextUses
    {
    	[HandlerParameter]
		public int Day { get; set; }
       
        public IList<double> Execute(ISecurity source)

        {
        	int count = source.Bars.Count;
            var r = new double[count];
            var closes = source.ClosePrices;
            IList<double> list = new List<double>(closes.Count);
            for(int i = Day; i < closes.Count; i++)
            {
            	var	DaR = closes[i]*r[i]*Day;
            	 
                   list.Add(DaR);
		    }
        
		    return list;
		}
		
		public IContext Context { get; set; }
	}}
    




Merci d'avace!


Отредактировано 777 (Wed Jul 21 2010 05:38 PM)
_________________________
«Существует 3 типа лжи: ложь, наглая ложь и статистика»
Дизраэли.

Наверх
#8766 - Wed Jul 21 2010 06:48 PM Re: Доходность фактора риска [Re: 777]
777 Offline
Carpal Tunnel

Registered: Thu Apr 01 2010
Записи: 2564
Loc: г. Дзержинский
Пошел пиво пить! Нифега в документации не понятно. Честное слово!

Пиво выпил, сразу все нашел, вот так заработало: IDoubleAccumHandler,IContextUses
Правда с расчетами что-то не то...Надо наверное еще пива!

_________________________________
Помогло! Работает! Спасибо Нектодрон!


Отредактировано 777 (Wed Jul 21 2010 11:38 PM)
_________________________
«Существует 3 типа лжи: ложь, наглая ложь и статистика»
Дизраэли.

Наверх
#8868 - Fri Jul 23 2010 05:04 PM Re: Доходность фактора риска [Re: 777]
777 Offline
Carpal Tunnel

Registered: Thu Apr 01 2010
Записи: 2564
Loc: г. Дзержинский
Нектодрон, подскажите пожалуйста для свечи [i-4]
нужно использовать:
Code:
list.Add(0);
for (int i = 4; 

???
Работает, но у меня смещение на графике, не поможите?
Еще скажите пожалуйста, я правильно сформировал логику, в одном случае fr принимает значение high в другом low ???
Вот полный код:
Click to reveal..
Code:
 using System.Collections.Generic;
using TSLab.Script;
using TSLab.Script.Handlers;
using TSLab.DataSource;
using TSLab.Script.Helpers;

namespace FractalSimple
{
	public class Fractal_Simple : IBar2DoubleHandler, IContextUses
	{
		[HandlerParameter]
		public int Period { get; set; }
		
		public IList<double> Execute(ISecurity source)
		{
		     var high = Context.GetData("Highest", new[] { Period.ToString() },
		                               () => Series.Highest(source.HighPrices, Period));
		    var low = Context.GetData("Lowest", new[] { Period.ToString() },
		                               () => Series.Lowest(source.LowPrices, Period));
		    var closes = source.ClosePrices;
		    double fr=0;
		    
		    IList<double> list = new List<double>(closes.Count);
		    list.Add(0);
		    
		    for (int i = 4; i < closes.Count; i++)
		    {
		    	if((high[i-2] >= high[i-4]) && (high[i-2] >= high[i-3]) && (high[i-2] >= high[i-1]) && (high[i-2] > high[i]))
		    	{
		    	 fr = high[i] ;
		    		
		    	}
		    	if((low[i-2] < low[i-4]) && (low[i-2] < low[i-3]) && (low[i-2] <= low[i-1]) && (low[i-2] < low[i]))

		    	{
		    	   	fr = low[i];
		    	}
		    	
		        list.Add(fr);
		    }
		    return list;
		}
		
		public IContext Context { get; set; }
	}
}


Смещение
С

Заранее огромное спасибо!!!


Attachments
смещение фрактал.jpg (831 downloads)



Отредактировано 777 (Fri Jul 23 2010 05:05 PM)
_________________________
«Существует 3 типа лжи: ложь, наглая ложь и статистика»
Дизраэли.

Наверх
#8900 - Mon Jul 26 2010 10:32 AM Re: Доходность фактора риска [Re: 777]
Nektodron Offline

Carpal Tunnel

Registered: Thu Oct 23 2008
Записи: 5492
Ну для это нужно 4 раза добавить строку
list.Add(0);

а еще лучше перестать использовать список и перейти на массив:
var list = new double[closes.Count];

...
list[i] = fr;

Наверх
#8905 - Mon Jul 26 2010 11:28 AM Re: Доходность фактора риска [Re: Nektodron]
777 Offline
Carpal Tunnel

Registered: Thu Apr 01 2010
Записи: 2564
Loc: г. Дзержинский
СПАСИБО!!!! smile
_________________________
«Существует 3 типа лжи: ложь, наглая ложь и статистика»
Дизраэли.

Наверх


Moderator:  ViL, sar