Автор |
Сообщение |
_ok
Зарегистрирован: 12.04.2010
Сообщения: 29
|
Я хочу протестировать систему на портфеле бумаг. И использую такой ММ. В каждой сделке я рискую не более 0,5% от депозита, т.е. столько я потеряю при срабатывании стопа. Стоп пусть будет равен 2 АТР.
Для одной бумаги я использовал такой код:
CapitalPart = Equity(1) * 0.005; // доля капитала
Size = CapitalPart / (2 * ATR(15)); //количество контрактов
PositionSize = C * Size; // объем открытой позиции исходя из возможного риска
Если протестить такой код в портфельном бэктестере, на портфеле, то, при открытии каждой сделки будет использовать индивидуальная эквити каждого инструмента, а не эквити всего портфеля.
Подскажите, как можно решить этот вопрос и рассчитывать риск от эквити всего портфеля. Попытался взять Foreign("~~~EQUITY", "C"), вообще лажа какая то получилась
Может это можно решить совсем другим способ, не тем, каким я пытаюсь сгондобить.
|
_________________ Олег. Будем знакомы. |
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Тут надо использовать Advanced Porfolio Backtester Interface см. хелпер.
Это не слишком просто.... |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Nero Wolfe
Зарегистрирован: 17.03.2010
Сообщения: 174
|
Подскажите, вот такая конструкция имеет право на жизнь?
Код: |
Buy = ...;
Sell = ...;
e = Equity(1);
PositionSize = IIF(e < HIGHEST(e), 3, 6);
Buy = Buy;
Sell = Sell; |
т.е. если система в ДД, то торгуем уменьшенным сайзом и так пока не выйдет из ДД. |
_________________ Если вас грызет совесть, выбейте ей зубы, и пусть она вас нежно обсасывает. |
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Конечно.
Можешь даже после PositionSize = IIF(e < HIGHEST(e), 3, 6);
не переписывать
Buy = Buy;
Sell = Sell; |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Nero Wolfe
Зарегистрирован: 17.03.2010
Сообщения: 174
|
У меня почему то не работает просто PositionSize, работает вот так
Код: |
e = Equity(1);
PosSize = IIf(e < Highest(e), 3, 6);
SetPositionSize( PosSize, spsShares ); |
но больше 3 контрактов поза не открывается... |
_________________ Если вас грызет совесть, выбейте ей зубы, и пусть она вас нежно обсасывает. |
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Угу. Правильно будет так
Код: |
PosSize = IIf(e < Ref(Highest(e), -1), 3, 6);
|
или
Код: |
PosSize = IIf(e <= Highest(e), 3, 6);
|
И лучше использовать SetPositionSize() |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Nero Wolfe
Зарегистрирован: 17.03.2010
Сообщения: 174
|
И так тоже делал
Код: |
e = Equity(1);
PosSize = IIf(e < Ref(Highest(e), -1), 3, 6);
SetPositionSize( PosSize, spsShares );
|
все равно система начинает торговать с 1 контракта (больше денег не хватает), а потом постепенно доходит до 3 и все, выше уже не поднимает кол-во контрактов, хотя денег вполне достаточно. |
_________________ Если вас грызет совесть, выбейте ей зубы, и пусть она вас нежно обсасывает. |
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Ааа. Ясн. Знаешь почему так получается? Во время сделки почти всегда эквити поднимается выше того значения которое будет у эквити в момент закрытия сделки. А когда сделка закрыта эквити не меняется. Таким макаром получается, что вход в сделку в тот момент когда эквити не меняется, а максимального значения она достигает в тот момент когда сделка уже открыта. Попробуй сделать вместо Ref(, -1) Ref(, -100) |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
|