Автор: Alias
BarsHeld сколько свечей находимся в позиции - Sat Oct 17 2015 08:23 PM
Подскжите, не могу разобраться.
Есть такое свойсво у позиции BarsHeld.
Вроде оно должно выдавать, сколько свечей мы находимся в позиции.
Но у меня что то не работает с ним.
Написал тестовый скрипт.
По тесту входим и должны выйти через, ну например 5 свечей после входа.
Если использую
то выход всегда осущесвляеться на следующей свече после входа, т.е не так как должно через 5 свечей.
а если использую
То работает.
Вот полный код тестового скрипта
Подскажите, для чего все же нужен BarsHeld или что я не так делаю?
Отладчик показывает, что BarsHeld содержит числа много больше 5, нескольо тысяч.
Есть такое свойсво у позиции 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, нескольо тысяч.