Уважаемые разработчики и пользователи, доброго времени суток!
Я не первый, кого интересует возможность динамического управления позицией. Насколько я понял, в режиме RealTime она реализована, однако на стадии тест-я и опт-и не менее актуальна. Уровень мой как программиста начальный, поэтому и обращаюсь за помощью. Возможно, общими усилиями мы решим эту проблему наконец-то...
Вообще, задание размера позиции относительно ATR у меня получилось, но не динамическое, но уже что-то. Я задал значение начального капитала (например double StartDepo = 100000). Это же значение задается в окне свойств в TSLab. Далее перед открытием позиции:
nShares = (int) ((StartDepo*Risk)/(nATR[bar-1]*Koef))
И далее:
Buy/SellAtMarket (bar, nShares, "LN/SN")
Итак, идея следующая. Интуитивно кажется (очень хочется верить), что с помощью могучего C# это возможно.
Практически в начале кода после объявления переменных создается коллекция (или несколько коллекций), которые считают для каждого бара текущее значение депозита в зависимости от результата сделки. В общем виде как-то так:
//Первая коллекция содержит значения профита для каждого бара
public IList<double> GenProfit (ISecurity source)
{
double vProfit; //Значение прибыли для текущего бара
IList<double> nProfit = new List<double> (source.Bars.Count)
for (int bar = 0, bar < source.Bars.Count, bar++)
{
if (bSell) //Есть сигнал к закрытию длинной позиции
{
vProfit = LongPos.ExitPrice - LongPos.EntryPrice;
}
if (bCover) //Есть сигнал к закрытию короткой позиции
{
vProfit = - ShortPos.ExitPrice + ShortPos.EntryPrice;
}
//Добавление в последовательность
nProfit.Add(vProfit)
}
return nProfit;
}
//Вторая коллекция содержит значения размера депозита для каждого бара
public IList<double> GenDepo (ISecurity source)
{
double vDepo = StartDepo; //Значение депо для текущего бара
IList<double> nDepo = new List<double> (source.Bars.Count)
for (int bar = 0, bar < source.Bars.Count, bar++)
{
if (bSell | bCover) //Есть сигнал к закрытию длинной или короткой позиции
{
vDepo += nProfit[bar];
}
//Добавление в последовательность
nDepo.Add(vDepo)
}
return nDepo;
}
И уже далее в основном цикле прохода по барам
nShares = (int) ((nDepo[bar-1]*Risk)/(nATR[bar-1]*Koef))

СКАЖИТЕ ПОЖАЛУЙСТА, имеет ли эта идея право на жизнь, или она ошибочна в корне? Уверен, что у меня есть какие-то ошибки здесь. Пробовал много разных вариантов, но не компилировалось(((

ЗАРАНЕЕ ОЧЕНЬ БЛАГОДАРЕН!!!