#17395 - Fri Nov 26 2010 01:33 AM
Индекс за пределами диапазона
|
addict
Registered: Fri Nov 12 2010
Записи: 585
Loc: Москва
|
01:07:22.94 System.ArgumentOutOfRangeException: Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен превышать размер коллекции. Имя параметра: index в System.ThrowHelper.ThrowArgumentOutOfRangeException() в System.SZArrayHelper.get_Item[T](Int32 index) в TSLab.User.Script.<>c__DisplayClass9.<Execute>b__7() в 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)
До сегодняшнего дня использовал только часовые данные, скачанные с Финама. Сегодня решил попробовать пятиминутки, и вот такое сообщение выпадает в программе при попытке выполнить скрипт. Если честно, то я не понимаю, что мне этим хочет сказать программа). Сразу оговорюсь, что данные скачивал с теми же параметрами, что и часовые, и как рекомендовано в другой ветке форума (где я и хотел открыть новоую тему, но там нет такой кнопки), с той лишь разницей, что изменил таймфрейм на 5мин. Вопрос: что означает это сообщение и как с этим бороться?
|
Наверх
|
|
|
|
#17547 - Mon Nov 29 2010 06:55 PM
Re: Индекс за пределами диапазона
[Re: Nektodron]
|
addict
Registered: Fri Nov 12 2010
Записи: 585
Loc: Москва
|
|
Наверх
|
|
|
|
#17552 - Mon Nov 29 2010 09:57 PM
Re: Индекс за пределами диапазона
[Re: Door]
|
old hand
Registered: Tue Jan 05 2010
Записи: 1098
Loc: Набережные Челн...
|
|
Наверх
|
|
|
|
#17561 - Tue Nov 30 2010 12:17 AM
Re: Индекс за пределами диапазона
[Re: Vladimir /]
|
addict
Registered: Fri Nov 12 2010
Записи: 585
Loc: Москва
|
|
Наверх
|
|
|
|
#18427 - Mon Dec 13 2010 08:29 PM
Re: Индекс за пределами диапазона
[Re: ViL]
|
old hand
Registered: Thu Apr 22 2010
Записи: 1089
|
Если в блоке используется и [i-5] и [i-1], то начинать с 5. У меня в формуле i-3, ставлю начинать с 1, всё равно работает .
|
Наверх
|
|
|
|
#18434 - Mon Dec 13 2010 10:50 PM
Re: Индекс за пределами диапазона
[Re: Nektodron]
|
old hand
Registered: Thu Apr 22 2010
Записи: 1089
|
Если формула используется для расчетов выхода из позиции, то считается она соответственно только при наличии позиции, поэтому и ошибок нет, т.к. позиции редко на 5м баре открываются. Да, тоже так подумал, так как формула начинает пахать только после разгона.
Отредактировано SPLsd (Mon Dec 13 2010 10:50 PM)
|
Наверх
|
|
|
|
#31887 - Wed Oct 05 2011 03:43 PM
Re: Индекс за пределами диапазона
[Re: SPLsd]
|
newbie
Registered: Thu May 27 2010
Записи: 33
|
Камрады!!! Спасайте! Такая же фигня и этим "Индекс за пределами диапазона", всё ясно со значением с которого нужно начинать, но у меня ошибка возникает при добавлении второго блока логическая формула (вынесении условия в отдельный блок), поясню: если все условия затолкать в один блок разделив символом "&&" то типа всё работает, но для дебагинга (срабатывает вход, хотя фактически, визуально наблюдаем, что это доп.условие не выполнено) я решил вынести open[i+1]<close[i+1] в отдельный блок, и вот на него и ругается прога... задрался уже, матерю TSL на чем свет стоит...
Attachments
tsl.png (4944 downloads)
Отредактировано Klever (Wed Oct 05 2011 03:46 PM)
|
Наверх
|
|
|
|
#31927 - Thu Oct 06 2011 09:32 AM
Re: Индекс за пределами диапазона
[Re: ViL]
|
newbie
Registered: Thu May 27 2010
Записи: 33
|
Пасиба огроменное! Сделал то что хотел, тока вот число прибыльных сделок упало до 48% с 98% (при удержании один бар), разрушил грааль своими руками, не сохранив предыдущую версию
|
Наверх
|
|
|
|
#31928 - Thu Oct 06 2011 09:55 AM
Re: Индекс за пределами диапазона
[Re: Klever]
|
newbie
Registered: Thu May 27 2010
Записи: 33
|
Мда, жырный глюк TSL однако... видимо и правда заглядывание в будущее судя по точке входа на закрытии [i]-го бара и выполнении условия [i+1]-го, правда 98% угаданых вернуть не смог, не всё смог воспроизвести, а вот 73% получилось, то то я думаю эквити такая красивая :)))
|
Наверх
|
|
|
|
#32992 - Mon Nov 07 2011 11:39 AM
Re: Индекс за пределами диапазона
[Re: Nektodron]
|
stranger
Registered: Mon Nov 07 2011
Записи: 5
|
У меня в формулах не используется [i-1], тем не менее появляется сообщение:
11:36:50.86 System.ArgumentOutOfRangeException: Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен превышать размер коллекции. Имя параметра: index в System.ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument argument, ExceptionResource resource) в System.ThrowHelper.ThrowArgumentOutOfRangeException() в System.SZArrayHelper.get_Item[T](Int32 index) в TSLab.User.Script.Execute(IContext context, ISecurity var1, ISecurity var3)
В чем может быть дело?
P.S.: При этом ошибка то возникает, то нет.
Отредактировано agor (Mon Nov 07 2011 01:13 PM)
|
Наверх
|
|
|
|
#44652 - Wed Jul 25 2012 08:25 PM
Re: Индекс за пределами диапазона
[Re: ViL]
|
stranger
Registered: Thu Jun 14 2012
Записи: 20
|
Похожая проблема Скрипт работает потом зависает Перед запуском скрипта 20:23:29.50 120 System.NullReferenceException: В экземпляре объекта не задана ссылка на объект. в TSLab.Samples.Class_Rt.Execute(IContext ctx, ISecurity source1) в TSLab.User.Script.Execute(IContext context, ISecurity Source1)
После остановки скрипта 20:25:20.08 100 Скрипт: 'Option01' System.ArgumentOutOfRangeException: Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен превышать размер коллекции. Имя параметра: index в System.ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument argument, ExceptionResource resource) в System.ThrowHelper.ThrowArgumentOutOfRangeException() в System.Collections.Generic.List`1.get_Item(Int32 index) в TSLab.Samples.Class_Rt.Execute(IContext ctx, ISecurity source1) в TSLab.User.Script.Execute(IContext context, ISecurity Source1)
|
Наверх
|
|
|
|
#44659 - Thu Jul 26 2012 08:22 AM
Re: Индекс за пределами диапазона
[Re: ViL]
|
stranger
Registered: Thu Jun 14 2012
Записи: 20
|
Используется один инструмент, на реальном рынке.
Было ... ISecurityRt secRt = sec as ISecurityRt; if (!secRt.Positions.IsRealtime) return;
Поменял на
/// Торговля. if (!sec.Positions.IsRealtime) return; {
int i = sec.Bars.Count - 1; if (i < 0) return; IList<IQueueData> buyQueue = sec.GetBuyQueue(i);//получаем биржевой стакан IList<IQueueData> sellQueue = sec.GetSellQueue(i);//получаем биржевой стакан ISecurityRt secRt = sec as ISecurityRt; if (secRt == null) return; ... } Перестало выдавать ошибку. В чем причина не понял...
Но ошибка про индекс осталась
08:57:52.29 100 Скрипт: 'Option01' System.ArgumentOutOfRangeException: Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен превышать размер коллекции. Имя параметра: index в System.ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument argument, ExceptionResource resource) в System.ThrowHelper.ThrowArgumentOutOfRangeException() в System.Collections.Generic.List`1.get_Item(Int32 index) в TSLab.Samples.Class_Rt.Execute(IContext ctx, ISecurity sec) в TSLab.User.Script.Execute(IContext context, ISecurity sec)
Индекс используется только один раз вверху по тексту... Возможно что-то не правильно здесь
//пробегаемся по всем исполненным лимитникам-нам foreach (IOrder order in secRt.Orders) if (order.OrderType == TSLab.DataSource.OrderType.Limit) { //ордер не исполнился ожидаем исполнения if (!order.IsExecuted) return; } хотя закоментировав строку ошибка осталась...
Ошибка нашлась double baseActive = Math.Round((buyQueue[0].Price + sellQueue[0].Price) / 2);
при использовании buyQueue[0].Price или sellQueue[0].Price возникает ошибка с индексом
Как ее решить?
Отредактировано WinEasily (Thu Jul 26 2012 10:45 AM)
|
Наверх
|
|
|
|
#44671 - Thu Jul 26 2012 12:04 PM
Re: Индекс за пределами диапазона
[Re: WinEasily]
|
stranger
Registered: Thu Jun 14 2012
Записи: 20
|
При работе со стаканом возникает ошибка указанная в предыдущем посте
т.е. использование sec.GetBuyQueue(0)[0].Price и sec.GetSellQueue(0)[0].Price вызывает ошибку индекса использование их аналога ошибки не вызывает secRt.FinInfo.Bid.Value и secRt.FinInfo.Ask.Value
просьба к разработчикам разъяснить возможно я неверно работаю со стаканом?
Отредактировано WinEasily (Thu Jul 26 2012 12:23 PM)
|
Наверх
|
|
|
|
#44675 - Thu Jul 26 2012 12:28 PM
Re: Индекс за пределами диапазона
[Re: WinEasily]
|
member
Registered: Fri Apr 22 2011
Записи: 137
|
т.е. использование sec.GetBuyQueue(0)[0].Price и sec.GetSellQueue(0)[0].Price вызывает ошибку индекса Ну размер возвращаемых массивов надо все же проверять, стакан может быть и пустым: IList<IQueueData> buyQueue = sec.GetBuyQueue(i); if (buyQueue != null && buyQueue.Count > 0) { buyQueue[0].Price .... }
|
Наверх
|
|
|
|
#44685 - Thu Jul 26 2012 02:04 PM
Re: Индекс за пределами диапазона
[Re: Gji]
|
stranger
Registered: Thu Jun 14 2012
Записи: 20
|
Да отлично все работает замечательно.
Но осталась третья проблема. Скрипт зависает после нескольких шагов. Ошибок явных нет. Которые были все решены. куда копать?
|
Наверх
|
|
|
|
#44687 - Thu Jul 26 2012 02:17 PM
Re: Индекс за пределами диапазона
[Re: WinEasily]
|
member
Registered: Fri Apr 22 2011
Записи: 137
|
По отрывкам кода предположить, что-либо затрудняюсь. Либо приведите весь код, либо сами, например, логируя работу скрипта изучайте проблему
|
Наверх
|
|
|
|
#44713 - Thu Jul 26 2012 05:45 PM
Re: Индекс за пределами диапазона
[Re: Gji]
|
stranger
Registered: Thu Jun 14 2012
Записи: 20
|
Скрипт проработал 1 час 16 минут и завис. Интервал обсчета 2 сек. Скрипт выполнился 2280 раз и после этого завис. Это дело в скрипте или что-то еще не пойму?
|
Наверх
|
|
|
|
#44717 - Thu Jul 26 2012 06:15 PM
Re: Индекс за пределами диапазона
[Re: WinEasily]
|
stranger
Registered: Thu Jun 14 2012
Записи: 20
|
Вот кусок лога в момент зависания
18:10:16.07[11]DEBUG:New RealtimePositionList was created for RTS-9.12 18:10:16.07[11]INFO :RTS-9.12:FORTS Фьючерсы: Orders has been updated for Option01. 0 active orders, 0 total 18:10:16.07[11]INFO :RTS-9.12:FORTS Фьючерсы: Orders has been updated for Option01. 0 active orders, 0 total 18:10:16.07[11]INFO :100:Info:Script:(Script:Option01):Скрипт: 'Option01' Скрипт выполнен успешно за 3мс. (14436 баров, время 26.07.2012 18:10:16) 18:10:16.07[11]INFO :Скрипт выполнен успешно за 3мс. (14436 баров, время 26.07.2012 18:10:16) 18:10:16.07[11]INFO :RTS-9.12:FORTS Фьючерсы: Orders has been updated for Option01. 0 active orders, 0 total 18:10:18.07[9]DEBUG:New RealtimePositionList was created for RTS-9.12 18:10:18.07[9]INFO :RTS-9.12:FORTS Фьючерсы: Orders has been updated for Option01. 0 active orders, 0 total 18:10:18.07[9]INFO :RTS-9.12:FORTS Фьючерсы: Orders has been updated for Option01. 0 active orders, 0 total 18:10:18.07[9]INFO :100:Info:Script:(Script:Option01):Скрипт: 'Option01' Скрипт выполнен успешно за 4мс. (14437 баров, время 26.07.2012 18:10:18) 18:10:18.07[9]INFO :Скрипт выполнен успешно за 4мс. (14437 баров, время 26.07.2012 18:10:18) 18:10:18.18[9]INFO :RTS-9.12:FORTS Фьючерсы: Orders has been updated for Option01. 0 active orders, 0 total 18:11:54.52[9]WARN :Can't map source 'sec' for script 'Option01'! 18:11:54.52[9]DEBUG:Скрипт: 'Option01' run=True:True dateFrom='26.07.2012 0:00:00' dateTo='27.07.2012 0:00:04' mx=0 Interval=2S RecalcInterval=INTERVAL LimitType=LimitInLots Limit=0 Slip=0 Slip%=0 OpenPositionNoSlippage=False TakeProfitNoSlippage=False InvalidStopsByMarket=True ByMarketAsLimt=True AutoEntryBars=0 AutoCloseBars=0 18:11:54.52[9]DEBUG:State 15. Detach update to 'RTS-9.12:FORTS Фьючерсы' 18:11:54.52[9]DEBUG:State 16. Initialization is started. 18:11:54.57[1]INFO :100:Info:Script:(Script:Option01):Скрипт: 'Option01' остановлен 18:11:54.57[1]INFO :остановлен 18:11:55.74[9]DEBUG:State 16, Adding 0 trades to RTS-9.12:FORTS Фьючерсы. startTime=07/26/2012 18:11:58 endTime=07/27/2012 00:00:04 18:11:55.74[9]DEBUG:State 16, UpdateData finished to RTS-9.12:FORTS Фьючерсы. bars=14486 18:11:56.19[9]DEBUG:New RealtimePositionList was created for RTS-9.12 18:11:56.19[9]INFO :RTS-9.12:FORTS Фьючерсы: Orders has been updated for Option01. 0 active orders, 0 total 18:11:56.19[9]DEBUG:State 16. Initialization is stopped. 18:11:56.19[9]INFO :RTS-9.12:FORTS Фьючерсы: Orders has been updated for Option01. 0 active orders, 0 total 18:11:56.19[9]INFO :100:Info:Script:(Script:Option01):Скрипт: 'Option01' Скрипт выполнен успешно за 8мс. (14486 баров, время 26.07.2012 18:11:56) 18:11:56.19[9]INFO :Скрипт выполнен успешно за 8мс. (14486 баров, время 26.07.2012 18:11:56) 18:11:56.19[9]INFO :RTS-9.12:FORTS Фьючерсы: Orders has been updated for Option01. 0 active orders, 0 total 18:12:15.98[9]DEBUG:Disconnect by user
Прошу помощи разработчиков...
|
Наверх
|
|
|
|
#44720 - Thu Jul 26 2012 06:47 PM
Re: Индекс за пределами диапазона
[Re: WinEasily]
|
stranger
Registered: Thu Jun 14 2012
Записи: 20
|
Произошло следующее. Выполнялся скрипт. Во время выполнения в оболочке TSLab внизу время остановилось и вместе с ним завис скрипт. После перезапуска скрипт зависает при первом прогоне ...
Attachments
tslab.rar (106 downloads)
Отредактировано WinEasily (Thu Jul 26 2012 06:49 PM)
|
Наверх
|
|
|
|
#44721 - Thu Jul 26 2012 07:03 PM
Re: Индекс за пределами диапазона
[Re: WinEasily]
|
old hand
Registered: Tue Jan 17 2012
Записи: 1110
|
Просьба выслать лог и линк на форум на http://support.tslab.ru/
Отредактировано ViL (Fri May 17 2013 02:08 AM)
|
Наверх
|
|
|
|
#44758 - Fri Jul 27 2012 08:37 AM
Re: Индекс за пределами диапазона
[Re: SupportTSLab]
|
stranger
Registered: Thu Jun 14 2012
Записи: 20
|
С зависанием разобрался. TSLab виснет при отключении дисплея (энергопотребление). Спасибо за помощь Gji.
Но есть вопрос. Ночью произошло отключение от брокера. 00:29:56.79 4 Ошибка при подключении к провайдеру данных 'Solid' 00:29:56.79 2 Вы отсоединились от провайдера данных 'Solid' 00:29:56.79 3 Соединение с провайдером данных 'Solid' потеряно 00:29:56.76 2 Вы отсоединились от провайдера данных 'Solid' 23:50:04.87 100 Скрипт: 'Option01' Скрипт выполнен успешно за 2мс. (22633 баров, время 26.07.2012 23:49:58)
Получается что каждое утро мне надо перезапускать скрипт? Или можно настроить его как-то что бы он работал постоянно?
|
Наверх
|
|
|
|
#44760 - Fri Jul 27 2012 09:05 AM
Re: Индекс за пределами диапазона
[Re: WinEasily]
|
old hand
Registered: Tue Jan 17 2012
Записи: 1110
|
В Менеджере провайдера данных настройте Расписание. Сервера на ночь отключаются как правило.
|
Наверх
|
|
|
|
#44886 - Tue Jul 31 2012 07:35 AM
Re: Индекс за пределами диапазона
[Re: ViL]
|
stranger
Registered: Thu Jun 14 2012
Записи: 20
|
Несколько инструментов используете? Попробуйте снять флаг Пересчет по каждому инструменту. Если среди инструментов есть индекс, обычно это помогает. Как бороться с зависаниями скрипта? Ошибки не выдаются. Любая серьезная модификация приводит к проблеме зависания. Начал использовать несколько инструментов, флаг снял, но зависания продолжаются. Как добиться надежности и стабильности, ведь любая ошибка (в том числе и зависания) приносит реальные, а не виртуальные убытки?
|
Наверх
|
|
|
|
#44887 - Tue Jul 31 2012 09:17 AM
Re: Индекс за пределами диапазона
[Re: WinEasily]
|
old hand
Registered: Tue Jan 17 2012
Записи: 1110
|
Какая у Вас машина? Опишите конфигурацию.
|
Наверх
|
|
|
|
#45066 - Mon Aug 06 2012 04:52 PM
Re: Индекс за пределами диапазона
[Re: SupportTSLab]
|
stranger
Registered: Thu Jun 14 2012
Записи: 20
|
Скорее всего вы правы это что-то с компьютером. Есть еще один вопрос пытаюсь использовать Стоимость шага цены для фьючерсов и опционов. но secRt.FinInfo.StepPrice.HasValue выдает False можно как либо еще получить Стоимость шага...
|
Наверх
|
|
|
|
#82257 - Tue Aug 15 2017 12:03 PM
Re: Индекс за пределами диапазона
[Re: Klever]
|
stranger
Registered: Fri Aug 04 2017
Записи: 1
|
Добрый день, появляется аналогичная ошибка System.ArgumentOutOfRangeException: Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен превышать размер коллекции. Имя параметра: index в System.ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument argument, ExceptionResource resource) в System.Collections.Generic.List`1.get_Item(Int32 index) в FirstStr_1.FirstStr_1.Execute(IContext ctx, ISecurity source) в c:\Users\Creep\Documents\SharpDevelop Projects\WealthLab\kl\Si-TS.cs:строка 50
Вот сам код со строкой 50: namespace FirstStr_1 { public class FirstStr_1 : IExternalScript { public IPosition LastActivePosition=null; public OptimProperty _QBar = new OptimProperty(100, 70, 150, 5); public OptimProperty _Period = new OptimProperty(100, 50, 200, 5); public virtual void Execute(IContext ctx, ISecurity source) { int FirstValidValue=10; int EnterKontrakt=1; int QBar=_QBar; double SL=0.2; int Period=_Period; bool signalBuy; bool signalShort; FirstValidValue=Math.Max(FirstValidValue,Period); IList<double> SMAFilter=ctx.GetData("SMAFilter", new[] {Period.ToString()}, delegate {return Series.SMA(source.ClosePrices, Period); }); IList<double> RaznSMA=new List<double>(source.Bars.Count); for(int bar = 150; bar < source.Bars.Count; bar++) { double nRaznSMA=source.ClosePrices[0]-source.ClosePrices[0]; nRaznSMA=SMAFilter[bar]-SMAFilter[bar-1]; RaznSMA.Add(nRaznSMA); } IList<double> SummSMA=new List<double>(source.Bars.Count); for(int bar = 150; bar < source.Bars.Count; bar++) { double nSummSMA =source.ClosePrices[0]-source.ClosePrices[0]; nSummSMA=RaznSMA[bar]+RaznSMA[bar-1];//эта строка 50 SummSMA.Add(nSummSMA); }
Подскажите, пожалуйста, что делать?
Отредактировано Konstantin_A (Tue Aug 15 2017 06:04 PM)
|
Наверх
|
|
|
|
|
|