Список форумов AmiSite.ru AmiSite.ru
Форум по Ами
 FAQ  •  Поиск  •  Пользователи  •  Группы   •  Регистрация  •  Профиль  •  Войти и проверить личные сообщения  •  Вход
 Как реализовать fixed fractional money management ? Следующая тема
Предыдущая тема
Начать новую тему  Ответить на тему
Автор Сообщение
Romant



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

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

Приветствую,

Каким образом в AmiBroker реализуется fixed fractional ? То есть, рисковать не более, чем N% эквити, в рамках одной сделки.

Спасибо.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Ср Дек 07, 2011 12:32 am Ответить с цитатой Вернуться к началу

Так же как и везде. Считаешь стоп. Исходя из размеров стопа узнаешь какой процент капитала использовать в сделке. Далее есть функция
SetPositionSize( size, method )
Метод берешь spsPercentOfEquity (процент от доступного капитала), а сайз вычислил ранее.

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



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

СообщениеДобавлено: Ср Дек 07, 2011 1:29 am Ответить с цитатой Вернуться к началу

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

СообщениеДобавлено: Ср Дек 07, 2011 1:48 am Ответить с цитатой Вернуться к началу

Ну это уже вообще простая арифметика
fStop/Close - какую часть капитала потеряем если везьмем на все.
fStop/Close/fRiskPct/100 - какой частью капитала надо войти чтобы потери были fRiskPct %
собственно все. Equity() тут не надо....

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



Зарегистрирован: 29.04.2010
Сообщения: 729
Откуда: Moscow

СообщениеДобавлено: Ср Дек 07, 2011 8:36 am Ответить с цитатой Вернуться к началу

То, что Вы описали, называется 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

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

Чтобы не было путаницы, опишу логику требуемого MM словами: войти таким количеством контрактов, чтобы, если позиция будет ликвидирована по стопу известного размера (в деньгах), эквити потеряла не более N% (скажем, 2%).

Значение эквити тут необходимо.
Посмотреть профиль Отправить личное сообщение
spitfire



Зарегистрирован: 29.04.2010
Сообщения: 729
Откуда: Moscow

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

Дя? Размер эквити тут не нужен. Еще раз посмотри формулы которые тебе выше написали и подумай над ними. Хочу оч обратить внимание что мы в коде используем вход процентом капитала, а не числом лотов. Число лотов можно уже рассчитать в роботе, пихая в него текущее число бабла, курс доллара, еще что потребуется.
Посмотреть профиль Отправить личное сообщение ICQ Number
Romant



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

СообщениеДобавлено: Ср Дек 07, 2011 1:23 pm Ответить с цитатой Вернуться к началу

spitfire писал(а):
Дя? Размер эквити тут не нужен. Еще раз посмотри формулы которые тебе выше написали и подумай над ними. Хочу оч обратить внимание что мы в коде используем вход процентом капитала, а не числом лотов. Число лотов можно уже рассчитать в роботе, пихая в него текущее число бабла, курс доллара, еще что потребуется.


Я имел в виду не то, что формулы неверны (они верны), а то, что мне по-прежнему интересно, как в AmiBroker получить доступ к значениям эквити на момент открытия сделки.

Как это сделать через custom backtester я знаю, но мне не хочется громоздить его по любому поводу.

Не могли бы Вы пояснить, можно ли пользоваться функцией Equity() для того, чтобы реализовать описанный MM, и если да - то как ?
Посмотреть профиль Отправить личное сообщение
spitfire



Зарегистрирован: 29.04.2010
Сообщения: 729
Откуда: Moscow

СообщениеДобавлено: Ср Дек 07, 2011 1:34 pm Ответить с цитатой Вернуться к началу

Я когда то пытался выудить значение Эквити без кастом бектестера (хотя бы потому что с кастомным бт не дружу Smile ) - как бы не извращался, ничего не получилось. Из-за этого некоторые ММ, которые не получилось привести к процентам от капитала (типа варианта Р. Джонса), пришлось забить Sad
Если узнаешь как выудить - дай знать Smile
Посмотреть профиль Отправить личное сообщение ICQ Number
Romant



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

СообщениеДобавлено: Ср Дек 07, 2011 1:35 pm Ответить с цитатой Вернуться к началу

spitfire писал(а):
Я когда то пытался выудить значение Эквити без кастом бектестера (хотя бы потому что с кастомным бт не дружу Smile ) - как бы не извращался, ничего не получилось. Из-за этого некоторые ММ, которые не получилось привести к процентам от капитала (типа варианта Р. Джонса), пришлось забить Sad
Если узнаешь как выудить - дай знать Smile


А функция Equity() тогда вообще зачем и кому она нужна ??
Посмотреть профиль Отправить личное сообщение
spitfire



Зарегистрирован: 29.04.2010
Сообщения: 729
Откуда: Moscow

СообщениеДобавлено: Ср Дек 07, 2011 1:39 pm Ответить с цитатой Вернуться к началу

Ксать сейчас посчитал варианты ММ, которые удалось/не удалось сделать. Счет 11/2 в пользу удавшихся. Так что точно в большинстве случаев можно обойтись без кастомного бектестера.
Посмотреть профиль Отправить личное сообщение ICQ Number
Romant



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

СообщениеДобавлено: Ср Дек 07, 2011 1:39 pm Ответить с цитатой Вернуться к началу

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

СообщениеДобавлено: Ср Дек 07, 2011 2:08 pm Ответить с цитатой Вернуться к началу

Небольшая поправка, tradeRisk задается уже в процентах. То бишь если ты хочешь риск на сделку 2%, то tradeRisk = 2 Smile
Далее, stopValue у меня это цена выхода, а не разница между стопом и ценами.
То бишь с твоими данными получим:
%кап = 2*500/(500-450) = 20. Или от эквити мы покупает контрактов на 1000*0.2 = 2000 или 4 контракта.
Посмотреть профиль Отправить личное сообщение ICQ Number
Romant



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

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

Да, так всё верно.

Всё-таки, AmiBroker сделан инопланетянином ...

А какие ещё методы MM реализуются через процент эквити ?
Посмотреть профиль Отправить личное сообщение
spitfire



Зарегистрирован: 29.04.2010
Сообщения: 729
Откуда: Moscow

СообщениеДобавлено: Ср Дек 07, 2011 2:15 pm Ответить с цитатой Вернуться к началу

Всякие. Доливки, мартингейлы, келли
Посмотреть профиль Отправить личное сообщение ICQ Number
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



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


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

File Attachment © by Meik Sievertsen