Автор |
Сообщение |
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Ааа. Меню Symbol -> Information там найди Round lot size и поставь 1 |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Liker777
Зарегистрирован: 28.06.2012
Сообщения: 120
|
000 писал(а): |
Ааа. Меню Symbol -> Information там найди Round lot size и поставь 1 |
ААА точняк получается! Эта опция и в настройках тестера есть, спасибо, Олег! |
_________________ www.oleg-churyumov.blogspot.com |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
sLy
Зарегистрирован: 28.07.2012
Сообщения: 41
|
Всем добрый день,
Только собрался на эту тему постить, а уже все есть
Решаю задачу - как заставить бэктестер при каждом трейде устанавливать PosSize как некоторый процент от текущего значения equity на момент трейда.
Пока никак. Наблюдения следующие (субъективно).
В спецсимвол ~~~EQUITY значения попадают после проведения бэктеста, по этой причине на первом запуске при попытке обратиться к этому тикеру бэктестер не может корректно рассчитать позицию. При втором запуске бэктестер возьмет данные из уже сформированного на прошлом запуске тикера и результат тестирования будет странный. Еще более забавно действует оптимизатор - он просто выдает везде NA.
Можно вызывать функцию equity(), но во-первых это односимвольный бэктестер и не умеет учитывать posScore, MinHoldBars и др, а во-вторых запуск бэктестера из бектестера это несколько запутанное решение (кто точно знает какие конкретно настройки применяет функция - написано, что комиссии, стопы и часть массивов, а если часть этих настроек прописана внутри файла, тогда что?)
Также пробовал кастомный интерфейс бектестера CBI, но там недостаточно объектов и методов для решения задачи, сейчас он в основном заточен под добавление кастомных метрик в performance profile
В итоге решил обратиться с вопросом:
есть ли возможность обратиться каким-то способом к текущему на конкретной свече значению equity в рабочем цикле бэктестера |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Самый простой способ уже мелькал в этой теме
Код: |
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
|
Олег, привет,
Ниже по тексту комментарии курсивом
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
|
Это из 5.5 |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Liker777
Зарегистрирован: 28.06.2012
Сообщения: 120
|
Попробовал 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
|
Не понял? Какой такой Plot()?
custom backtest interface работает в только АА |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Liker777
Зарегистрирован: 28.06.2012
Сообщения: 120
|
000 писал(а): |
Не понял? Какой такой Plot()?
custom backtest interface работает в только АА |
То есть на Backteste я его не смогу использовать ?)) |
_________________ www.oleg-churyumov.blogspot.com |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
plot() ? Конечно нет. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Alpinist
Зарегистрирован: 12.10.2010
Сообщения: 27
|
Ковырял ту же проблему, выводы у меня такие: если тестить один тикер, то все ОК, вы к иквите обратитесь без проблем, если это портфельный тест, то обратиться не удастся, так как в первый проход АА собирает все сделки, и только на втором формирует ~~~equity. Обратиться к ней якобы можно воспользовавшись функциями продвинутого портфельного бэктестера. Но мне этого после 2-х дневных танцев так и не удалось.
Хотя в жизни это очень востребовано, например если мы хотим нормировать риск в каждой сделке (по ван Тарпу), то простым процентом от иквити мы не обойдемся, нам нужна собственно иквитя и зная где вход где стоп мы высчитаем сколько контрактов нам надо взять в данной сделке, чтобы риск всегда был равен к примеру 4%. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
Filipp-Alex
Зарегистрирован: 25.01.2009
Сообщения: 7
|
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); // Задаем размер позиции |
|
|
|
Посмотреть профиль Отправить личное сообщение |
|
|