Список форумов AmiSite.ru AmiSite.ru
Форум по Ами
 FAQ  •  Поиск  •  Пользователи  •  Группы   •  Регистрация  •  Профиль  •  Войти и проверить личные сообщения  •  Вход
 Определение position size на основе ~~~Equity Следующая тема
Предыдущая тема
Начать новую тему  Ответить на тему
Автор Сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Вт Окт 09, 2012 12:48 pm Ответить с цитатой Вернуться к началу

Ааа. Меню Symbol -> Information там найди Round lot size и поставь 1

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Liker777



Зарегистрирован: 28.06.2012
Сообщения: 120

СообщениеДобавлено: Вт Окт 09, 2012 12:50 pm Ответить с цитатой Вернуться к началу

000 писал(а):
Ааа. Меню Symbol -> Information там найди Round lot size и поставь 1

ААА точняк получается! Эта опция и в настройках тестера есть, спасибо, Олег!

_________________
www.oleg-churyumov.blogspot.com
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
sLy



Зарегистрирован: 28.07.2012
Сообщения: 41

СообщениеДобавлено: Вт Окт 16, 2012 9:10 pm Ответить с цитатой Вернуться к началу

Всем добрый день,

Только собрался на эту тему постить, а уже все есть Smile

Решаю задачу - как заставить бэктестер при каждом трейде устанавливать PosSize как некоторый процент от текущего значения equity на момент трейда.

Пока никак. Наблюдения следующие (субъективно).

В спецсимвол ~~~EQUITY значения попадают после проведения бэктеста, по этой причине на первом запуске при попытке обратиться к этому тикеру бэктестер не может корректно рассчитать позицию. При втором запуске бэктестер возьмет данные из уже сформированного на прошлом запуске тикера и результат тестирования будет странный. Еще более забавно действует оптимизатор - он просто выдает везде NA.

Можно вызывать функцию equity(), но во-первых это односимвольный бэктестер и не умеет учитывать posScore, MinHoldBars и др, а во-вторых запуск бэктестера из бектестера это несколько запутанное решение (кто точно знает какие конкретно настройки применяет функция - написано, что комиссии, стопы и часть массивов, а если часть этих настроек прописана внутри файла, тогда что?)

Также пробовал кастомный интерфейс бектестера CBI, но там недостаточно объектов и методов для решения задачи, сейчас он в основном заточен под добавление кастомных метрик в performance profile

В итоге решил обратиться с вопросом:

есть ли возможность обратиться каким-то способом к текущему на конкретной свече значению equity в рабочем цикле бэктестера
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Вт Окт 16, 2012 10:52 pm Ответить с цитатой Вернуться к началу

Самый простой способ уже мелькал в этой теме
Код:
SetPositionSize(myPositionSize, spsPercentOfEquity);

Если уж лезть в CBI, то читаем в начаеле описания
Цитата:

position sizing based on portfolio-level equity

Ага. Вероятно все таки есть возможность. Смотрим дальше.
Цитата:

Backtester object
....
Properties:

double Cash

available funds (cash) in your portfolio


double Equity

current portfolio-level Equity (read-only property)

array EquityArray

portfolio-level Equity array (read-only property)

Note: Since version 5.50 backtester object now has EquityArray property that returns entire equity array (not just current value). Please note that values are filled during backtest and only after backtest is complete, all values are valid. If you call it in the middle, it will contain only "upto given point" data. Avoid abusing this function and it is costly in terms of RAM/CPU.e). You may use bo.EquityArray instead of Foreign("~~~Equity", "C" ) in custom backtester code.

double InitialEquity

funds that are available at the beginning of the backtest


double MarginLoan

loan amount (only if you are using margin account) (read-only property)

Все есть...

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
sLy



Зарегистрирован: 28.07.2012
Сообщения: 41

СообщениеДобавлено: Ср Окт 17, 2012 11:29 pm Ответить с цитатой Вернуться к началу

Олег, привет,

Ниже по тексту комментарии курсивом

000 писал(а):
Самый простой способ уже мелькал в этой теме
Код:
SetPositionSize(myPositionSize, spsPercentOfEquity);


Согласен, но это не очень подходит. Дело вот в чем. Надо на каждом трейде понимать какое перед входом в позицию эквити с целью расчета размера которым входить. Для этого надо как-то обратиться в расчетной формуле к этому значению эквити на момент начала трейда.

Кстати, хотел по этой функции тоже уточнить. Она умеет устанавливать процент от эквити, которым входит в позицию каждый отдельный тикер в портфеле. Вопрос - есть способ неравномерно для разных тикеров устанавливать размер позиции? Скажем, есть 2 тикера в портфеле, одному отдавать 10% эквити, другому 15% эквити? При этом не хотел бы на каждый тикер прописывать в коде условия "если тикер=такой-то, то possize=такой-то", при замене инструментов придется тикеры переписывать


Если уж лезть в CBI, то читаем в начаеле описания
Цитата:

position sizing based on portfolio-level equity

Ага. Вероятно все таки есть возможность. Смотрим дальше.
Цитата:

Backtester object
....
Properties:

double Cash

available funds (cash) in your portfolio


double Equity

current portfolio-level Equity (read-only property)

array EquityArray

portfolio-level Equity array (read-only property)

Note: Since version 5.50 backtester object now has EquityArray property that returns entire equity array (not just current value). Please note that values are filled during backtest and only after backtest is complete, all values are valid. If you call it in the middle, it will contain only "upto given point" data. Avoid abusing this function and it is costly in terms of RAM/CPU.e). You may use bo.EquityArray instead of Foreign("~~~Equity", "C" ) in custom backtester code.

double InitialEquity

funds that are available at the beginning of the backtest


double MarginLoan

loan amount (only if you are using margin account) (read-only property)

Все есть...

О! А вот это интересная тема! У меня 5.30, такого там не видел. А из какого это документа, не удалось такое с ходу на amibroker.com и в User Guide найти...
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Ср Окт 17, 2012 11:43 pm Ответить с цитатой Вернуться к началу

Это из 5.5

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Liker777



Зарегистрирован: 28.06.2012
Сообщения: 120

СообщениеДобавлено: Пт Окт 26, 2012 9:26 am Ответить с цитатой Вернуться к началу

Попробовал custom backtest interface - ничего не рисует..
if( Status("action")== actionPortfolio )
{
SetOption("UseCustomBacktestProc", True );
bo = GetBacktesterObject();
bo.BackTest();
Plot(bo.Equity, "Equity" , colorBlue , styleLine);
}

_________________
www.oleg-churyumov.blogspot.com
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Пт Окт 26, 2012 12:03 pm Ответить с цитатой Вернуться к началу

Не понял? Какой такой Plot()?
custom backtest interface работает в только АА

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Liker777



Зарегистрирован: 28.06.2012
Сообщения: 120

СообщениеДобавлено: Пт Окт 26, 2012 1:17 pm Ответить с цитатой Вернуться к началу

000 писал(а):
Не понял? Какой такой Plot()?
custom backtest interface работает в только АА

То есть на Backteste я его не смогу использовать ?))

_________________
www.oleg-churyumov.blogspot.com
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Пт Окт 26, 2012 6:07 pm Ответить с цитатой Вернуться к началу

plot() ? Конечно нет.

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Alpinist



Зарегистрирован: 12.10.2010
Сообщения: 27

СообщениеДобавлено: Ср Май 29, 2013 8:02 pm Ответить с цитатой Вернуться к началу

Ковырял ту же проблему, выводы у меня такие: если тестить один тикер, то все ОК, вы к иквите обратитесь без проблем, если это портфельный тест, то обратиться не удастся, так как в первый проход АА собирает все сделки, и только на втором формирует ~~~equity. Обратиться к ней якобы можно воспользовавшись функциями продвинутого портфельного бэктестера. Но мне этого после 2-х дневных танцев так и не удалось.

Хотя в жизни это очень востребовано, например если мы хотим нормировать риск в каждой сделке (по ван Тарпу), то простым процентом от иквити мы не обойдемся, нам нужна собственно иквитя и зная где вход где стоп мы высчитаем сколько контрактов нам надо взять в данной сделке, чтобы риск всегда был равен к примеру 4%.
Посмотреть профиль Отправить личное сообщение
Filipp-Alex



Зарегистрирован: 25.01.2009
Сообщения: 7

СообщениеДобавлено: Пт Июн 28, 2013 8:04 pm Ответить с цитатой Вернуться к началу

Alpinist писал(а):
Хотя в жизни это очень востребовано, например если мы хотим нормировать риск в каждой сделке (по ван Тарпу), то простым процентом от иквити мы не обойдемся, нам нужна собственно иквитя и зная где вход где стоп мы высчитаем сколько контрактов нам надо взять в данной сделке, чтобы риск всегда был равен к примеру 4%.


Вот такой вариант вымудрил. Вроде считает правильно:

Код:
Periods = Optimize("Periods",10,5,21,1);
Width = Optimize("Width1",2.05,1,2.5, 0.05);

BBandTopp=BBandTop(C, Periods, Width);
BBandBott=BBandBot(C, Periods, Width);
MABB=MA(C,Periods);

Buy=C>BBandTopp;
Sell=C<BBandBott;

PercRisk = 0.03; // Процент риска от капитала
EQ=Equity(1); // Капитал
Risk=PercRisk*Ref(EQ,-1); // 3 процента от Капитала на предыдущем баре
Delta=BBandTopp-BBandBott; // Риск на одну акцию в рублях
Perc=(Risk/Delta*BuyPrice)/Ref(EQ,-1)*100; // Процент от капитала, на который открываем позицию
SetPositionSize(Perc, spsPercentOfEquity); // Задаем размер позиции
Посмотреть профиль Отправить личное сообщение
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



Следующая тема
Предыдущая тема
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете вкладывать файлы
Вы не можете скачивать файлы


Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme :: Часовой пояс: GMT + 3

File Attachment © by Meik Sievertsen