У вас не стоит Flash Player
Настройки
#73981 - Sat Oct 17 2015 08:23 PM BarsHeld сколько свечей находимся в позиции
Alias Offline
stranger

Registered: Thu Jun 25 2015
Записи: 24
Подскжите, не могу разобраться.
Есть такое свойсво у позиции BarsHeld.
Вроде оно должно выдавать, сколько свечей мы находимся в позиции.
Но у меня что то не работает с ним.
Написал тестовый скрипт.
По тесту входим и должны выйти через, ну например 5 свечей после входа.

Если использую
Code:
if (LastActivePosition.BarsHeld > 5)
{        
LastActivePosition.CloseAtMarket(bar + 1, "ExitAtTime");
}

то выход всегда осущесвляеться на следующей свече после входа, т.е не так как должно через 5 свечей.

а если использую
Code:
                    
if (LastActivePosition.EntryBarNum + 3 < bar)
{        
LastActivePosition.CloseAtMarket(bar + 1, "ExitAtTime");
}

То работает.

Вот полный код тестового скрипта

Code:

using System;
using System.Collections.Generic;
using TSLab.Script; 
using TSLab.Script.Handlers; 
using TSLab.Script.Helpers; 
using TSLab.Script.Optimization; 
using System.Linq;

namespace TSLabTestBarsHeld
{
    public class SecondTSLabStrategy : IExternalScript
    {
        public IPosition LastActivePosition = null; //Создаем переменную, которая будет хранить ссылку на последнюю активную позицию

        public virtual void Execute(IContext ctx, ISecurity symbol)
        {
            
            #region Главный торговый цикл

            for (int bar = 5; bar < ctx.BarsCount; bar++)
            {
                LastActivePosition = symbol.Positions.GetLastPositionActive(bar); // получить ссылку на последнию Активную позицию

                if (LastActivePosition != null) //сущестует ли активная позиция?
                {
                    //кодируем правила выхода

                    //if (LastActivePosition.EntryBarNum + 3 < bar)
                    if (LastActivePosition.BarsHeld > 5)
                    {        
                        LastActivePosition.CloseAtMarket(bar + 1, "ExitAtTime");
                    }
 
                }
                else //активной позиции нет
                {
                    symbol.Positions.BuyAtPrice(bar + 1, 1, symbol.ClosePrices[bar] - 40, "Покупка");  //Покупаем на сл.баре ниже цены закрытия на 40 пунктов
                }
            }
            #endregion


            #region прорисовка графиков

            var Blue = 0x0000ff;
            var LightGray = 0xc0c0c0;

            var pricePane = ctx.CreatePane(symbol.ToString(), 100, false);

            // Выводим график
            var lst = pricePane.AddList(symbol.ToString(), symbol, CandleStyles.BAR_CANDLE, Blue, PaneSides.RIGHT);

            //Расскрашиваем свечи в цвета
            for (var i = 0; i < ctx.BarsCount; i++)
            {
                //Расскрашиваем свечи в цвета, если в позиции
                var pos = symbol.Positions.GetActiveForBar(i);

                lst.SetColor(i, LightGray);

                if (pos.Any())
                    lst.SetColor(i, Blue);
                else
                    lst.SetColor(i, LightGray);
            }

            #endregion

        }
    }
}




Подскажите, для чего все же нужен BarsHeld или что я не так делаю?

Отладчик показывает, что BarsHeld содержит числа много больше 5, нескольо тысяч.


Отредактировано Alias (Sat Oct 17 2015 08:28 PM)

Наверх
#73990 - Sun Oct 18 2015 07:09 AM Re: BarsHeld сколько свечей находимся в позиции [Re: Alias]
ra81 Offline
Carpal Tunnel

Registered: Thu Sep 27 2012
Записи: 2860
для активной позы он показывает ерунду. считайте сами это несложно. Бар входа и текущий бар. Разность.
_________________________
__


Наверх
#73991 - Sun Oct 18 2015 10:11 AM Re: BarsHeld сколько свечей находимся в позиции [Re: ra81]
Alias Offline
stranger

Registered: Thu Jun 25 2015
Записи: 24
Originally Posted By: ra81
для активной позы он показывает ерунду. считайте сами это несложно. Бар входа и текущий бар. Разность.


Ясно, т.е. это не мой косяк.

А почему для активной ерунду показывает? это недоработка разработчиков TSlab или так и предусмотрено?

А для не активных позиции он правильно показывает?

Наверх


Moderator:  ViL, sar