Подскжите, не могу разобраться.
Есть такое свойсво у позиции BarsHeld.
Вроде оно должно выдавать, сколько свечей мы находимся в позиции.
Но у меня что то не работает с ним.
Написал тестовый скрипт.
По тесту входим и должны выйти через, ну например 5 свечей после входа.
Если использую
if (LastActivePosition.BarsHeld > 5)
{
LastActivePosition.CloseAtMarket(bar + 1, "ExitAtTime");
}
то выход всегда осущесвляеться на следующей свече после входа, т.е не так как должно через 5 свечей.
а если использую
if (LastActivePosition.EntryBarNum + 3 < bar)
{
LastActivePosition.CloseAtMarket(bar + 1, "ExitAtTime");
}
То работает.
Вот полный код тестового скрипта
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, нескольо тысяч.