#31232 - Mon Sep 19 2011 12:11 PM
И снова про управление размером позиции
|
newbie
Registered: Fri Jul 22 2011
Записи: 41
|
Уважаемые разработчики и пользователи, доброго времени суток! Я не первый, кого интересует возможность динамического управления позицией. Насколько я понял, в режиме 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))
СКАЖИТЕ ПОЖАЛУЙСТА, имеет ли эта идея право на жизнь, или она ошибочна в корне? Уверен, что у меня есть какие-то ошибки здесь. Пробовал много разных вариантов, но не компилировалось(((
ЗАРАНЕЕ ОЧЕНЬ БЛАГОДАРЕН!!!
|
Наверх
|
|
|
|
#31234 - Mon Sep 19 2011 01:52 PM
Re: И снова про управление размером позиции
[Re: antonsemenoff]
|
Carpal Tunnel
Registered: Thu Oct 23 2008
Записи: 5492
|
Если честно не очень понятно, зачем нужны коллекции. В версии 1.1.20.0 появилось два блока расчета дохода. Можете воспользоваться их кодом:
public double Execute(ISecurity source, int barNum)
{
double profit = 0;
foreach (var pos in source.Positions)
{
if(pos.EntryBarNum <= barNum)
{
profit += pos.IsActive || pos.ExitBarNum > barNum ? pos.OpenProfit(barNum) : pos.Profit();
}
}
return profit;
}
Эта функция рассчитывает доход по бумаге для бара по номеру. Она будет работать как в режиме лаборатории, так и в режиме реальных торгов. Чтобы узнать текущий депозит, нужно прибавить доход к стартовому депозиту (в режиме лаборатории)
|
Наверх
|
|
|
|
#31237 - Mon Sep 19 2011 02:42 PM
Re: И снова про управление размером позиции
[Re: Nektodron]
|
newbie
Registered: Fri Jul 22 2011
Записи: 41
|
Nektodron, понятно, что Вам не понятно) Я же говорю, что уровень моего программирования далеко позади Вашего! Я попытался воспользоваться предоставленным Вами кодом, но безуспешно, ошибки, ошибки... Даже и не думаю нагружать Вас конкретно моими ошибками, не за чем это (не смотря на то, что я лицо крайне заинтересованное). Дайте, пожалуйста, простенький пример с расчетом позиции! Например, с пресловутым пересечением 2-х SMA. Заранее безмерно благодарен!
|
Наверх
|
|
|
|
#31241 - Mon Sep 19 2011 04:54 PM
Re: И снова про управление размером позиции
[Re: Nektodron]
|
newbie
Registered: Fri Jul 22 2011
Записи: 41
|
Nektodron, к моему сожалению, ничего не выходит( Пытаюсь применить к своему коду, но то "profit отсутствует в контексте", то еще что-то... Не откажите, пожалуйста, в помощи!
|
Наверх
|
|
|
|
#31245 - Mon Sep 19 2011 05:38 PM
Re: И снова про управление размером позиции
[Re: Nektodron]
|
newbie
Registered: Fri Jul 22 2011
Записи: 41
|
Ок. Например в этом варианте "засовывания"  SharpDevelop выдает "Обнаружен недостижимый код (CS0162)196" Пару раз (варианты не сохранены) все скомпилировалось, но либо сделок вообще не было, либо были размером 0 лотов... Спасибо, что не оставляете наедине с проблемой!
Attachments
Проба расчета позиции.cs (141 downloads)
|
Наверх
|
|
|
|
#31276 - Tue Sep 20 2011 08:53 AM
Re: И снова про управление размером позиции
[Re: Nektodron]
|
newbie
Registered: Fri Jul 22 2011
Записи: 41
|
Я сразу отметил, что, пожалуй, нет смысла разбирать мои ошибки... Nektodron, благодарю, что уделили внимание! P.S. Если все же у Вас найдется возможность выложить простенький примерчик, освоение основ будет куда слаще)
|
Наверх
|
|
|
|
#31279 - Tue Sep 20 2011 12:36 PM
Re: И снова про управление размером позиции
[Re: Nektodron]
|
newbie
Registered: Fri Jul 22 2011
Записи: 41
|
Очень извиняюсь, что опять со своими проблемами, но все же... Все скомпилировалось, сделки в лаборатории проводятся, но размером 0((( Очевидно, что депозиту присваивается ноль, но где здесь проблема?!
Вот многострадальная часть кода, которая расположена в начале, после объявления переменных.
public double Execute(ISecurity source, int barNum) { double profit = 0; foreach (var pos in source.Positions) { if(pos.EntryBarNum <= barNum) { profit += pos.IsActive || pos.ExitBarNum > barNum ? pos.OpenProfit(barNum) : pos.Profit(); nDepo = StartDepo + profit; } } return nDepo; }
А вот весь код.
Я понимаю, что здесь мелочь какая-то, но из-за ее поисков деморализация полная уже...
Attachments
снова расчет позиции.cs (128 downloads)
|
Наверх
|
|
|
|
#31291 - Tue Sep 20 2011 05:07 PM
Re: И снова про управление размером позиции
[Re: Nektodron]
|
newbie
Registered: Fri Jul 22 2011
Записи: 41
|
Как нет?! nDepo = StartDepo + profit; Или нужно создавать коллекцию? В первом сообщении Вы указали на ненадобность ее создания...
|
Наверх
|
|
|
|
#31338 - Wed Sep 21 2011 03:59 PM
Re: И снова про управление размером позиции
[Re: Nektodron]
|
newbie
Registered: Fri Jul 22 2011
Записи: 41
|
Nektodon, ничего личного. Я и сам прекрасно понимаю, нужно освоить программирование, что я и пытаюсь сделать. Только сразу параллельно со спецификой TSLab, понимаете? В любом случае, я искренне благодарен, что Вы не ответили молчанием и откликнулись на мою проблему! Сделаю все, чтобы в будущем задавать вопросы более высокого уровня) P.S. Не всем трейдерам суждено стать крутыми программистами, точно так же, как программистам - крутыми трейдерами)
|
Наверх
|
|
|
|
|
|