У вас не стоит Flash Player
Настройки
#80914 - Sun Jan 08 2017 04:44 PM Область видимости объекта
konstantinio Offline
newbie

Registered: Wed Aug 31 2016
Записи: 40
Всем салют! С прошедшими праздниками!
Ниже представлен скрипт который выдает ошибку типа:
Quote:
08.01.2017 16:32:17 138 System.NullReferenceException: Ссылка на объект не указывает на экземпляр объекта.
в TradeScript.SBRF_VTB_STATIC_SETKA.Execute(IContext ctx, ISecurity secSBRF, ISecurity secVTBR)
в TSLab.User.Script.Execute(IContext context, ISecurity Источник1, ISecurity ТоргуемИнструм)

Quote:

Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using TSLab.DataSource;
using TSLab.Script;
using TSLab.Script.Handlers;
using TSLab.Script.Helpers;
using TSLab.Script.Optimization;

namespace TradeScript
{
    public class SBRF_VTB_STATIC_SETKA : IExternalScript2
    {
        #region Параметры оптимизации

        public OptimProperty SlippageSBRF = new OptimProperty(0, 0, 0, 0);
        public OptimProperty SlippageVTB = new OptimProperty(0, 0, 0, 0);
        public OptimProperty SMASub = new OptimProperty(464, 500, 1500, 10);
        public OptimProperty SizeLevel = new OptimProperty(100, 50, 1000, 10);
        public OptimProperty SumLevel = new OptimProperty(5, 1, 5, 10);

        #endregion

        public void Execute(IContext ctx, ISecurity secSBRF, ISecurity secVTBR)
        {

            #region Расчет Индикаторов

            var sub = Series.Sub(secSBRF.ClosePrices, secVTBR.ClosePrices); //Вычитание значений закрытия инструментов
            var smaSub = ctx.GetData("SMASub", new string[] { SMASub.Value.ToString() }, () => Series.SMA(sub, SMASub));//Скользящая построенная по разнице 
            var extendable = Series.Sub(smaSub, sub); //Разница от скользящей и разницей цен


            #endregion

            for (int i = 0; i < ctx.BarsCount; i++)
            {
                ////Прямые позиции
                ////Прямые позиции
                var leVtbr = secVTBR.Positions.GetLastActiveForSignal("VTBR_LE", i);// Получаем позицию или null
                var seSbrf = secSBRF.Positions.GetLastActiveForSignal("SBRF_SE", i);// Получаем позицию или null
                if (leVtbr == null && seSbrf == null)
                {
                    if (extendable[i] < 100)
                    {
                        secSBRF.Positions.SellAtMarket(i + 1, 1, "SBRF_SE", "Продажа SBRF");// Входим в шорт
                        secVTBR.Positions.BuyAtMarket(i + 1, 2, "VTBR_LE", "Продажа VTB"); // Входим в лонг
                    }
                }
                else
                {

                    for (int j = 0; j < SumLevel; j++)
                    {
                        if (extendable[i] < SizeLevel && seSbrf.Shares <= j + 1)
                        {
                            leVtbr.ChangeAtMarket(i + 1, leVtbr.Shares + 2, "VTBR_LE2");// <<<<<<<<=======Ссылка не указывает на экземпляр объекта
                            seSbrf.ChangeAtMarket(i + 1, seSbrf.Shares - 1, "SBRF_SE2");// <<<<<<<<=======Ссылка не указывает на экземпляр объекта
                        }
                        if (extendable[i] > SizeLevel && seSbrf.Shares >= j + 1)
                        {
                            leVtbr.ChangeAtMarket(i + 1, leVtbr.Shares - 2, "VTBR_LX2");// <<<<<<<<=======Ссылка не указывает на экземпляр объекта
                            seSbrf.ChangeAtMarket(i + 1, seSbrf.Shares + 1, "SBRF_SX2");// <<<<<<<<=======Ссылка не указывает на экземпляр объекта
                        }
                    }



                    if (extendable[i] >= 0)
                    {
                        seSbrf.CloseAtMarket(i + 1, "SBRF_SX");
                    }
                }
            }

            #region Визуализация
            ...
            #endregion
        }
    }

}

Не могу понять почему не видит. Подскажите пожалуйста в какую сторону копать?


Отредактировано konstantinio (Mon Jan 09 2017 08:49 PM)

Наверх
#80915 - Sun Jan 08 2017 05:57 PM Re: Область видимости объекта [Re: konstantinio]
komissar Offline
journeyman

Registered: Fri Sep 28 2012
Записи: 88
И где а вас созданы обьекты VTBR_LE2 и SBRF_SE2?
_________________________
Физик-лирик

Наверх
#80916 - Sun Jan 08 2017 06:06 PM Re: Область видимости объекта [Re: komissar]
konstantinio Offline
newbie

Registered: Wed Aug 31 2016
Записи: 40
VTBR_LE2 и SBRF_SE2 - это название сигналов. Объекты тут:
Code:
var leVtbr = secVTBR.Positions.GetLastActiveForSignal("VTBR_LE", i);// Получаем позицию или null
var seSbrf = secSBRF.Positions.GetLastActiveForSignal("SBRF_SE", i);// Получаем позицию или null

Наверх
#80917 - Sun Jan 08 2017 06:07 PM Re: Область видимости объекта [Re: komissar]
komissar Offline
journeyman

Registered: Fri Sep 28 2012
Записи: 88
Прошу пардону. Херню сморозилс.
_________________________
Физик-лирик

Наверх
#80918 - Sun Jan 08 2017 06:15 PM Re: Область видимости объекта [Re: komissar]
komissar Offline
journeyman

Registered: Fri Sep 28 2012
Записи: 88
f (leVtbr == null && seSbrf == null) - А если один из обьектов не нулл, а другой нулл- то переход на елсе и одной позииции нет.
_________________________
Физик-лирик

Наверх
#80919 - Sun Jan 08 2017 06:28 PM Re: Область видимости объекта [Re: komissar]
komissar Offline
journeyman

Registered: Fri Sep 28 2012
Записи: 88
а еще мне кажется некорректное добавление позиции-здесь нужны новые обьеты.
_________________________
Физик-лирик

Наверх
#80920 - Sun Jan 08 2017 06:28 PM Re: Область видимости объекта [Re: komissar]
konstantinio Offline
newbie

Registered: Wed Aug 31 2016
Записи: 40
Не думаю что в этом дело. Тестирую на истории и то что был пропущен вход на истории этого не может быть. На всякий случай проверил так:
Code:
for (int j = 0; j < SumLevel; j++)
                    {
                        if (extendable[i] < SizeLevel && seSbrf.Shares <= j + 1)
                        {
                            if (leVtbr != null) leVtbr.ChangeAtMarket(i + 1, leVtbr.Shares + 2, "VTBR_LE2");// <<<<<<<<=======Ссылка не указывает на экземпляр объекта
                            if (seSbrf != null) seSbrf.ChangeAtMarket(i + 1, seSbrf.Shares - 1, "SBRF_SE2");// <<<<<<<<=======Ссылка не указывает на экземпляр объекта
                        }
                        if (extendable[i] > SizeLevel && seSbrf.Shares >= j + 1)
                        {
                            if (leVtbr != null) leVtbr.ChangeAtMarket(i + 1, leVtbr.Shares - 2, "VTBR_LX2");// <<<<<<<<=======Ссылка не указывает на экземпляр объекта
                            if (seSbrf != null) seSbrf.ChangeAtMarket(i + 1, seSbrf.Shares + 1, "SBRF_SX2");// <<<<<<<<=======Ссылка не указывает на экземпляр объекта
                        }
                    }

Результат тот же.

Наверх
#80921 - Sun Jan 08 2017 06:31 PM Re: Область видимости объекта [Re: konstantinio]
konstantinio Offline
newbie

Registered: Wed Aug 31 2016
Записи: 40
Новые позиции создавать в предыдущих версиях нужно было. В 2,0 можно менять размер одной позиции.


Отредактировано konstantinio (Sun Jan 08 2017 06:34 PM)

Наверх
#80922 - Sun Jan 08 2017 06:38 PM Re: Область видимости объекта [Re: konstantinio]
komissar Offline
journeyman

Registered: Fri Sep 28 2012
Записи: 88
тогда я пас. но ошибка именно здесь. попробуйте не менять позицию.
_________________________
Физик-лирик

Наверх
#80923 - Sun Jan 08 2017 06:42 PM Re: Область видимости объекта [Re: komissar]
komissar Offline
journeyman

Registered: Fri Sep 28 2012
Записи: 88
или сразу же после изменения ее проинциализировать.
_________________________
Физик-лирик

Наверх
#80924 - Sun Jan 08 2017 06:48 PM Re: Область видимости объекта [Re: komissar]
konstantinio Offline
newbie

Registered: Wed Aug 31 2016
Записи: 40
Я тестирую стратегию с донабором и сбросом позиции. К стати если не использовать цикл, а написать несколько раз то что делает цикл, то все работает. Но дело в том что цикл нужен.

Наверх
#80925 - Sun Jan 08 2017 06:56 PM Re: Область видимости объекта [Re: konstantinio]
komissar Offline
journeyman

Registered: Fri Sep 28 2012
Записи: 88
ТсЛаб не видит позицию. Добавте в цикле елсе
leVtbr = secVTBR.Positions.GetLastActiveForSignal("VTBR_LE", i);// Получаем позицию или null
seSbrf = secSBRF.Positions.GetLastActiveFor
_________________________
Физик-лирик

Наверх
#80926 - Sun Jan 08 2017 07:07 PM Re: Область видимости объекта [Re: komissar]
konstantinio Offline
newbie

Registered: Wed Aug 31 2016
Записи: 40
Пробовал уже. Тоже не дает результата. По идее объект должен быть виден так как он создается в родителе и используется во вложенной зоне видимости. Ни чего не понимаю. Родион недоучил. frown

Наверх
#80927 - Sun Jan 08 2017 07:20 PM Re: Область видимости объекта [Re: konstantinio]
komissar Offline
journeyman

Registered: Fri Sep 28 2012
Записи: 88
Тогда к нему. Создается - то в родителе, а меняется в цикле елсе. Мне кажется после каждого изменения нужна инициализация.
_________________________
Физик-лирик

Наверх
#80942 - Mon Jan 09 2017 08:56 PM Re: Область видимости объекта [Re: komissar]
konstantinio Offline
newbie

Registered: Wed Aug 31 2016
Записи: 40
С отладкой в visual Studio еще как на зло проблемы какие то начались. Не работают точки останова и все тут.
Пишет:
Quote:
В настоящий момент попадание в точку останова не произойдет. Нет загруженных символов для этого документа

Весь интернет прогуглил, все перепробовал - ничего толкового нет.

Наверх
#80943 - Tue Jan 10 2017 07:27 AM Re: Область видимости объекта [Re: konstantinio]
komissar Offline
journeyman

Registered: Fri Sep 28 2012
Записи: 88
Бывают такие заглюки. Оставляю в скрипте самый минимум и потихоньку добавляю. Как правило все вылазит от 'сам дурак' до версии NET и вирусов.
_________________________
Физик-лирик

Наверх
#80954 - Wed Jan 11 2017 06:57 AM Re: Область видимости объекта [Re: komissar]
konstantinio Offline
newbie

Registered: Wed Aug 31 2016
Записи: 40
Как говорится дело было не в бабине! Просто напутал количество лотов в наращивании и сбросе из за чего возникала такая ошибка.

Наверх
#80959 - Wed Jan 11 2017 11:16 AM Re: Область видимости объекта [Re: komissar]
komissar Offline
journeyman

Registered: Fri Sep 28 2012
Записи: 88
Originally Posted By: komissar
а еще мне кажется некорректное добавление позиции-здесь нужны новые обьеты.

Вот. Про что я вам и толдычил.
_________________________
Физик-лирик

Наверх


Moderator:  ViL, sar