Автор |
Сообщение |
Romant
Зарегистрирован: 02.02.2011
Сообщения: 10
|
Приветствую,
Каким образом в AmiBroker реализуется fixed fractional ? То есть, рисковать не более, чем N% эквити, в рамках одной сделки.
Спасибо. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Так же как и везде. Считаешь стоп. Исходя из размеров стопа узнаешь какой процент капитала использовать в сделке. Далее есть функция
SetPositionSize( size, method )
Метод берешь spsPercentOfEquity (процент от доступного капитала), а сайз вычислил ранее. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Romant
Зарегистрирован: 02.02.2011
Сообщения: 10
|
000 писал(а): |
Так же как и везде. Считаешь стоп. Исходя из размеров стопа узнаешь какой процент капитала использовать в сделке. Далее есть функция
SetPositionSize( size, method )
Метод берешь spsPercentOfEquity (процент от доступного капитала), а сайз вычислил ранее. |
Механику я понимаю, но мой код работает неверно.
Вот это в принципе верно ?
//
// Заполнили массивы сигналов и цен
//
fRiskPct = 2; // Рискуем 2% капитала
fStop = 100; // Стоп в 100 пунктов
arrMoneyToRisk = Equity() * fRiskPct / 100;
arrNumContracts = arrMoneyToRisk / fStop;
SetPositionSize(arrNumContracts, spsShares); |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Ну это уже вообще простая арифметика
fStop/Close - какую часть капитала потеряем если везьмем на все.
fStop/Close/fRiskPct/100 - какой частью капитала надо войти чтобы потери были fRiskPct %
собственно все. Equity() тут не надо.... |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
spitfire
Зарегистрирован: 29.04.2010
Сообщения: 729
Откуда: Moscow
|
То, что Вы описали, называется Fix Risk MM, а не Fix Frac, это немного разные вещи.
У меня этот ММ реализован в таком виде (код для цикла):
Код: |
tradeCurrLots[bar] = tradeRisk*tradePrice[bar]/abs(tradePrice[bar]-stopValue[bar]); // смотрим на величину стопа на входном баре
if(tradeCurrLots[bar] > tradeMaxLots)
tradeCurrLots[bar] = tradeMaxLots;
if(tradeCurrLots[bar] < 0)
tradeCurrLots[bar] = 0;
poz = - tradeCurrLots[bar]; // отрицательные величины означают проценты. Получаем величину от -1000 до 0.
PositionSize[bar] = poz; // надо заметить что размер позиции ограничен 10% от объема на баре.
|
Собсно его можно легко перенести на код без цикла, заменив PositionSize на SetPositionSize. |
|
|
Посмотреть профиль Отправить личное сообщение ICQ Number |
|
Romant
Зарегистрирован: 02.02.2011
Сообщения: 10
|
Чтобы не было путаницы, опишу логику требуемого MM словами: войти таким количеством контрактов, чтобы, если позиция будет ликвидирована по стопу известного размера (в деньгах), эквити потеряла не более N% (скажем, 2%).
Значение эквити тут необходимо. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
spitfire
Зарегистрирован: 29.04.2010
Сообщения: 729
Откуда: Moscow
|
Дя? Размер эквити тут не нужен. Еще раз посмотри формулы которые тебе выше написали и подумай над ними. Хочу оч обратить внимание что мы в коде используем вход процентом капитала, а не числом лотов. Число лотов можно уже рассчитать в роботе, пихая в него текущее число бабла, курс доллара, еще что потребуется. |
|
|
Посмотреть профиль Отправить личное сообщение ICQ Number |
|
Romant
Зарегистрирован: 02.02.2011
Сообщения: 10
|
spitfire писал(а): |
Дя? Размер эквити тут не нужен. Еще раз посмотри формулы которые тебе выше написали и подумай над ними. Хочу оч обратить внимание что мы в коде используем вход процентом капитала, а не числом лотов. Число лотов можно уже рассчитать в роботе, пихая в него текущее число бабла, курс доллара, еще что потребуется. |
Я имел в виду не то, что формулы неверны (они верны), а то, что мне по-прежнему интересно, как в AmiBroker получить доступ к значениям эквити на момент открытия сделки.
Как это сделать через custom backtester я знаю, но мне не хочется громоздить его по любому поводу.
Не могли бы Вы пояснить, можно ли пользоваться функцией Equity() для того, чтобы реализовать описанный MM, и если да - то как ? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
spitfire
Зарегистрирован: 29.04.2010
Сообщения: 729
Откуда: Moscow
|
Я когда то пытался выудить значение Эквити без кастом бектестера (хотя бы потому что с кастомным бт не дружу ) - как бы не извращался, ничего не получилось. Из-за этого некоторые ММ, которые не получилось привести к процентам от капитала (типа варианта Р. Джонса), пришлось забить
Если узнаешь как выудить - дай знать |
|
|
Посмотреть профиль Отправить личное сообщение ICQ Number |
|
Romant
Зарегистрирован: 02.02.2011
Сообщения: 10
|
spitfire писал(а): |
Я когда то пытался выудить значение Эквити без кастом бектестера (хотя бы потому что с кастомным бт не дружу ) - как бы не извращался, ничего не получилось. Из-за этого некоторые ММ, которые не получилось привести к процентам от капитала (типа варианта Р. Джонса), пришлось забить
Если узнаешь как выудить - дай знать |
А функция Equity() тогда вообще зачем и кому она нужна ?? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
spitfire
Зарегистрирован: 29.04.2010
Сообщения: 729
Откуда: Moscow
|
Ксать сейчас посчитал варианты ММ, которые удалось/не удалось сделать. Счет 11/2 в пользу удавшихся. Так что точно в большинстве случаев можно обойтись без кастомного бектестера. |
|
|
Посмотреть профиль Отправить личное сообщение ICQ Number |
|
Romant
Зарегистрирован: 02.02.2011
Сообщения: 10
|
spitfire писал(а): |
Дя? Размер эквити тут не нужен. Еще раз посмотри формулы которые тебе выше написали и подумай над ними. Хочу оч обратить внимание что мы в коде используем вход процентом капитала, а не числом лотов. Число лотов можно уже рассчитать в роботе, пихая в него текущее число бабла, курс доллара, еще что потребуется. |
Кстати про формулы.
Рассмотрим пример:
Equity = 10000
Risk = 2%
Цена входа = 500
Стоп = 50
Расчёт позы с использованием Equity:
10000 * 2% = 200 - это максимальная сумма потери эквити в сделки;
200 / 50 = 4 - это количество контрактов для сделки.
Теперь по Вашим формулам:
0.02 * 500 / 450 = 0.0222222222%
То есть открыться нужно на 222.22222 денег, то есть тоже четырьмя контрактами.
Однако, 200 сильно не равно 222.2222 ... или я что-то не так считаю ? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
spitfire
Зарегистрирован: 29.04.2010
Сообщения: 729
Откуда: Moscow
|
Небольшая поправка, tradeRisk задается уже в процентах. То бишь если ты хочешь риск на сделку 2%, то tradeRisk = 2
Далее, stopValue у меня это цена выхода, а не разница между стопом и ценами.
То бишь с твоими данными получим:
%кап = 2*500/(500-450) = 20. Или от эквити мы покупает контрактов на 1000*0.2 = 2000 или 4 контракта. |
|
|
Посмотреть профиль Отправить личное сообщение ICQ Number |
|
Romant
Зарегистрирован: 02.02.2011
Сообщения: 10
|
Да, так всё верно.
Всё-таки, AmiBroker сделан инопланетянином ...
А какие ещё методы MM реализуются через процент эквити ? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
spitfire
Зарегистрирован: 29.04.2010
Сообщения: 729
Откуда: Moscow
|
Всякие. Доливки, мартингейлы, келли |
|
|
Посмотреть профиль Отправить личное сообщение ICQ Number |
|
|