У вас не стоит Flash Player
Настройки
#31232 - Mon Sep 19 2011 12:11 PM И снова про управление размером позиции
antonsemenoff Offline
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]
Nektodron Offline

Carpal Tunnel

Registered: Thu Oct 23 2008
Записи: 5492
Если честно не очень понятно, зачем нужны коллекции.
В версии 1.1.20.0 появилось два блока расчета дохода.
Можете воспользоваться их кодом:
Code:

        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]
antonsemenoff Offline
newbie

Registered: Fri Jul 22 2011
Записи: 41
Nektodron, понятно, что Вам не понятно) Я же говорю, что уровень моего программирования далеко позади Вашего! Я попытался воспользоваться предоставленным Вами кодом, но безуспешно, ошибки, ошибки... Даже и не думаю нагружать Вас конкретно моими ошибками, не за чем это (не смотря на то, что я лицо крайне заинтересованное). Дайте, пожалуйста, простенький пример с расчетом позиции! Например, с пресловутым пересечением 2-х SMA. Заранее безмерно благодарен!

Наверх
#31241 - Mon Sep 19 2011 04:54 PM Re: И снова про управление размером позиции [Re: Nektodron]
antonsemenoff Offline
newbie

Registered: Fri Jul 22 2011
Записи: 41
Nektodron, к моему сожалению, ничего не выходит( Пытаюсь применить к своему коду, но то "profit отсутствует в контексте", то еще что-то... Не откажите, пожалуйста, в помощи!

Наверх
#31244 - Mon Sep 19 2011 05:25 PM Re: И снова про управление размером позиции [Re: antonsemenoff]
Nektodron Offline

Carpal Tunnel

Registered: Thu Oct 23 2008
Записи: 5492
я же не могу понять, куда вы "засовываете" приведенный код, выложите пример, тогда можно будет говорить об ошибках

Наверх
#31245 - Mon Sep 19 2011 05:38 PM Re: И снова про управление размером позиции [Re: Nektodron]
antonsemenoff Offline
newbie

Registered: Fri Jul 22 2011
Записи: 41
Ок. Например в этом варианте "засовывания" blush SharpDevelop выдает "Обнаружен недостижимый код (CS0162)196"
Пару раз (варианты не сохранены) все скомпилировалось, но либо сделок вообще не было, либо были размером 0 лотов...
Спасибо, что не оставляете наедине с проблемой!


Attachments
Проба расчета позиции.cs (142 downloads)


Наверх
#31246 - Mon Sep 19 2011 06:41 PM Re: И снова про управление размером позиции [Re: antonsemenoff]
Nektodron Offline

Carpal Tunnel

Registered: Thu Oct 23 2008
Записи: 5492
return profit;
nDepo = StartDepo + profit;

недостижимый код, потому что после возврата из функции никаких расчетов быть уже не может.

Наверное, все же, прежде чем заниматься программированием стоит освоить основы.

Наверх
#31276 - Tue Sep 20 2011 08:53 AM Re: И снова про управление размером позиции [Re: Nektodron]
antonsemenoff Offline
newbie

Registered: Fri Jul 22 2011
Записи: 41
Я сразу отметил, что, пожалуй, нет смысла разбирать мои ошибки... Nektodron, благодарю, что уделили внимание!
P.S. Если все же у Вас найдется возможность выложить простенький примерчик, освоение основ будет куда слаще)

Наверх
#31279 - Tue Sep 20 2011 12:36 PM Re: И снова про управление размером позиции [Re: Nektodron]
antonsemenoff Offline
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 (129 downloads)


Наверх
#31290 - Tue Sep 20 2011 04:35 PM Re: И снова про управление размером позиции [Re: antonsemenoff]
Nektodron Offline

Carpal Tunnel

Registered: Thu Oct 23 2008
Записи: 5492
у вас в коде нет расчета переменной nDepo

Наверх
#31291 - Tue Sep 20 2011 05:07 PM Re: И снова про управление размером позиции [Re: Nektodron]
antonsemenoff Offline
newbie

Registered: Fri Jul 22 2011
Записи: 41
Как нет?!
nDepo = StartDepo + profit;
Или нужно создавать коллекцию? В первом сообщении Вы указали на ненадобность ее создания...

Наверх
#31324 - Wed Sep 21 2011 10:58 AM Re: И снова про управление размером позиции [Re: antonsemenoff]
Nektodron Offline

Carpal Tunnel

Registered: Thu Oct 23 2008
Записи: 5492
Я вам уже писал, пройдите курс по основам программирования, зачем лезть в дело, о котором нет понятия? Ничего личного, но API для людей имеющих опыт в программировании, а не для только вставших на этот путь.
У вас эта строчка написана в другой функции, которая никогда не вызывается.

PS. Вышеприведённая функция была дана как пример, не стоило ее "тупо" копировать к себе файл. В данном случае нужно было "вырезать" этот кусок и вставить в торговый цикл.


Отредактировано Nektodron (Wed Sep 21 2011 11:24 AM)

Наверх
#31338 - Wed Sep 21 2011 03:59 PM Re: И снова про управление размером позиции [Re: Nektodron]
antonsemenoff Offline
newbie

Registered: Fri Jul 22 2011
Записи: 41
Nektodon, ничего личного. Я и сам прекрасно понимаю, нужно освоить программирование, что я и пытаюсь сделать. Только сразу параллельно со спецификой TSLab, понимаете? В любом случае, я искренне благодарен, что Вы не ответили молчанием и откликнулись на мою проблему! Сделаю все, чтобы в будущем задавать вопросы более высокого уровня)
P.S. Не всем трейдерам суждено стать крутыми программистами, точно так же, как программистам - крутыми трейдерами)

Наверх


Moderator:  ViL, sar