Автор: konstantinio
Ошибка при оптимизации - Sun Nov 06 2016 09:08 PM
Накидал простой скрипт. Вход по пересечению скользящих. Работает нормально, но когда запускаю оптимизацию то выскакивают ошибки и процесс оптимизации останавливается. Понимаю что ошибка из за несоответствия значений в списке. Но из за чего это происходит догнать не могу. Может кто поймет?
Ошибка такая:
06.11.2016 21:03:44 138 System.ArgumentOutOfRangeException: Заданный аргумент находится вне диапазона допустимых значений.
Имя параметра: period
в TSLab.Script.Helpers.Series.SMA(IList`1 candles, Int32 period)
в TradeScripts.DoubleSma.Execute(IContext ctx, ISecurity sec) в c:\Users\Константин\Documents\Visual Studio 2010\Projects\ClassLibrary1\Двойная скользящая\DoubleSma.cs:строка 26
в TSLab.User.Script.Execute(IContext context, ISecurity Источник1) в c:\Users\Константин\AppData\Local\TSLab\TSLab 2.0\temp\code186.cs:строка 32
Скрипт:
26 строка это расчет первой скользящей
Ошибка такая:
Quote:
06.11.2016 21:03:44 138 System.ArgumentOutOfRangeException: Заданный аргумент находится вне диапазона допустимых значений.
Имя параметра: period
в TSLab.Script.Helpers.Series.SMA(IList`1 candles, Int32 period)
в TradeScripts.DoubleSma.Execute(IContext ctx, ISecurity sec) в c:\Users\Константин\Documents\Visual Studio 2010\Projects\ClassLibrary1\Двойная скользящая\DoubleSma.cs:строка 26
в TSLab.User.Script.Execute(IContext context, ISecurity Источник1) в c:\Users\Константин\AppData\Local\TSLab\TSLab 2.0\temp\code186.cs:строка 32
Скрипт:
Code:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using TradeScripts; using TSLab.Script; using TSLab.Script.Handlers; using TSLab.Script.Helpers; using TSLab.Script.Optimization; namespace TradeScripts { public class DoubleSma : IExternalScript { #region Параметры оптимизации public OptimProperty SmaFast = new OptimProperty(16, 8, 512, 8); public OptimProperty SmaSlow = new OptimProperty(32, 8, 512, 8); #endregion public void Execute(IContext ctx, ISecurity sec) { //Расчет Индикаторов var smafast = Series.SMA(sec.ClosePrices, SmaFast); var smaslow = Series.SMA(sec.ClosePrices, SmaSlow); var start = Math.Max(SmaFast, SmaSlow); for (int i = start + 1; i < ctx.BarsCount; i++) { var le = sec.Positions.GetLastActiveForSignal("LE", i); var se = sec.Positions.GetLastActiveForSignal("SE", i); //Позиции для лонга if (le == null) { if (smafast[i - 1] < smaslow[i - 1] && smafast[i] > smaslow[i]) sec.Positions.BuyAtMarket(i + 1, 2, "LE"); } else { if (smafast[i - 1] > smaslow[i - 1] && smafast[i] < smaslow[i]) le.CloseAtMarket(i + 1, "LX"); } //Позиции для шорта if (se == null) { if (smafast[i - 1] > smaslow[i - 1] && smafast[i] < smaslow[i]) sec.Positions.SellAtMarket(i + 1, 2, "SE"); } else { if (smafast[i - 1] < smaslow[i - 1] && smafast[i] > smaslow[i]) se.CloseAtMarket(i + 1, "SX"); } } #region Визуализация var pane = Helper.PaneChart(ctx, sec, 100, false); Helper.Chart(pane, sec, Helper.blossom.Blak); Helper.Led(pane, "smaslow", smaslow, Helper.blossom.Red, 2); Helper.Led(pane, "smafast", smafast, Helper.blossom.Blue, 2); #endregion } } }
26 строка это расчет первой скользящей