У вас не стоит Flash Player
Настройки
#80262 - Sun Nov 06 2016 09:08 PM Ошибка при оптимизации
konstantinio Offline
newbie

Registered: Wed Aug 31 2016
Записи: 41
Накидал простой скрипт. Вход по пересечению скользящих. Работает нормально, но когда запускаю оптимизацию то выскакивают ошибки и процесс оптимизации останавливается. Понимаю что ошибка из за несоответствия значений в списке. Но из за чего это происходит догнать не могу. Может кто поймет?
Ошибка такая:
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 строка это расчет первой скользящей

Наверх
#80264 - Mon Nov 07 2016 07:13 PM Re: Ошибка при оптимизации [Re: konstantinio]
konstantinio Offline
newbie

Registered: Wed Aug 31 2016
Записи: 41
Разобрался. Период в оптимизации 0 лучше не ставить.

Наверх


Moderator:  ViL, sar