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



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

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

Всем привет! Помогите пожалуйста решить проблему с позишн сайзингом.

Итак, имеем основной ордер (Назовем его А), который, в случае своего исполнения, открывает позицию и "порождает" 2 if-done ордера (Назовем их B1 и B2) связанных по принципу One Cancel Other, которые потом эту позицию закрывают.

Например:

А1 = 1.5000 = Открытие
B1 = 1.5100 = Профит
B2 = 1.4900 = Лось

Очевидно, что "пробег" от Открытия до Профита и от Открытия до Лося одинаков и состовляет 0.0100 (100 пунктов). А вот теперь сообственно проблема: Как в эти 100 пунктов "пробега" вложить 2% риска от депо, то есть:

Цитата:


Депозит 1000$, плавающее плечо, минимальный лот - 1$
По цене 1.5000 я купил X тугриков

По цене 1.5100 я продал тугрики и на выходе имею 1020$ или +2% от депо

или

По цене 1.4900 я продал тугрики и на выходе имею 980$ или -2% от депо


Всю эту фигню мне нужно пересчитывать открывая каждую новую позицию. Проблема в том что все это динамическое и "пробеги" между A1 и B1 или B2 меняются от сделки к сделке, основной ордер каждый раз по другой цене и так далее, риск тоже может быть динамическим и так далее. Пока что B1 и B2 находятся на симметричном расстоянии от A1.

Вообщем что бы через банальную пропорцию рассчитать сколько тугриков нужно купить/продать (и получить +2% или -2%), мне нужно знать сколько денег у меня осталось на депо. А как узнать я не знаю. Функция Equity(); работает как то криво, а как скормить формуле bo.Cash из CustomBacktesterObject я не знаю. Или, если можно как нибуть скормить массивы (в которые записаны значения ордеров) в тот же CustomBacktesterObject, то тут уже что то можно придумать.

Как мог - обьяснил. Кому не понятно, пожалуйста не пинайте, а "уточните все детали". Заранее благодарен за любую помощь, мысль, идею
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

Вопрос понятен.
Ответа я не знаю. Похоже в рунете ваще никто с CustomBacktester не работает. Sad

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


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

СообщениеДобавлено: Ср Окт 14, 2009 10:42 am Ответить с цитатой Вернуться к началу

ifrm писал(а):
Всем привет! Помогите пожалуйста решить проблему с позишн сайзингом.


Вроде понял, что ты хотел спросить.
Также я вроде понял, что тебя интересует ФОРЕКС.
Кастомный тестер тут не нужен.
Тут нужно знать формулу для вычисления лота.
для обратных котировок:
Код:
лот = депо * процент риска / 100 / величина стопа в пипсах


1. Настрой свои обратные тикеры так:
Image
2. запузырь куда-нить в папку Custom файлик со спредами http://www.sharemania.ru/0116782
3. Скачай себе и смотри через ами как работает код http://www.sharemania.ru/0119954

В последнем файле есть строка для сайза:
Код:
position_size =      SetPositionSize( percent_risk / 100 / my_loss,spsPercentOfEquity);

в этой строке есть переменная my_loss. То есть Ами всегда будет выбирать такой лот, который позволит тебе вписаться в процентный риск с любым стопом.

Удачи
Посмотреть профиль Отправить личное сообщение
ID
Советник


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

СообщениеДобавлено: Ср Окт 14, 2009 10:45 am Ответить с цитатой Вернуться к началу

Еще для форекса надо такие настройки АА:

Image
Посмотреть профиль Отправить личное сообщение
ID
Советник


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

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

000 писал(а):
Похоже в рунете ваще никто с CustomBacktester не работает. Sad


Я юзаю CustomBacktester, но единственно что мне от него надо - это Custom Metric . Как это забацать, даже я понял Very Happy Very Happy
Посмотреть профиль Отправить личное сообщение
ifrm



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

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

Премного благодарен ID за простое и понятное решение. Спасибо большое. Все заработало. Smile

Я тоже использую CustomBacktester и тоже CustomMetrics для создания своих критериев оптимизации например. Тоесть оптимизирую не просто, скажем Net % Profit, а, например, CAR*RAR Smile
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Чт Окт 15, 2009 9:51 pm Ответить с цитатой Вернуться к началу

О. А раз такие умные напишите мне такой код

Только бай. Пересечение двух мувингов. Выход - обратное пересечение.
Если предыдущая сделка убыточная, то сайз - 2 если прибыльная то 1.
Сделать через CustomBacktester.

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


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

СообщениеДобавлено: Пт Окт 16, 2009 4:14 am Ответить с цитатой Вернуться к началу

000 писал(а):
О. А раз такие умные напишите мне такой код

Только бай. Пересечение двух мувингов. Выход - обратное пересечение.
Если предыдущая сделка убыточная, то сайз - 2 если прибыльная то 1.
Сделать через CustomBacktester.


Это я еще и не умею )))))
В CustomBacktester я умею только делать свою метрику, и то потому что это где юыло расписано.
А ты не пробовал сделать свою эквитю через цикл, и смотреть где был лосс и профит?
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Пт Окт 16, 2009 8:08 am Ответить с цитатой Вернуться к началу

Через эквити я могу. Хочу через кустом тестер

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



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

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

000 писал(а):
О. А раз такие умные напишите мне такой код

Только бай. Пересечение двух мувингов. Выход - обратное пересечение.
Если предыдущая сделка убыточная, то сайз - 2 если прибыльная то 1.
Сделать через CustomBacktester.
Это просто любопытство? На мой взгляд, делая это через custombacktester, мы получим лишь сложный запутанный код, и никакого преимущества.

У объекта Trade мы не можем изменять свойства (или я не знаю как). Т.е. нельзя написать (надеюсь я правильно понял, что "-" в "сайз - 2" это тире, а не минус):
Код:
SetOption("UseCustomBacktestProc", True );

if (Status("action") == actionPortfolio) {
   bo = GetBacktesterObject();
   bo.Backtest(1);

   LastTradeProfit = 0;
   for (trade = bo.GetFirstTrade(); trade; trade = bo.GetNextTrade()) {
      if (LastTradeProfit < 0 ) { size = 2; }
      else { size = 1; }
      trade.Shares = size;
      LastTradeProfit = trade.GetProfit();
   }

   bo.ListTrades();
}


Buy  = Cross(C, MA(C, 10));
Sell = Cross(MA(C, 10), C);

Но можно написать при помощи проверки сигналов (код работает, но неправильно Sad, не знаю уж в чем ошибка):
Код:
SetOption("UseCustomBacktestProc", True );

if (Status("action") == actionPortfolio) {
   bo = GetBacktesterObject();
   bo.PreProcess();

   LastTradeProfit = 0;
   enterprice = 0;

   for (bar = 0; bar < BarCount; bar++) {
      for (sig = bo.GetFirstSignal(bar); sig; sig = bo.GetNextSignal(bar)) {
         if (sig.IsEntry()) {
            if (LastTradeProfit < 0 ) { size = 2; }
            else { size = 1; }
            go = round(sig.Price * 0.15);
            sig.PosSize = size * go;
            enterprice = sig.Price;
         }
         else if (sig.IsExit()) {
            if (sig.Type == 2) { LastTradeProfit = sig.Price - enterprice; }
            else if (sig.Type == 4) { LastTradeProfit = enterprice - sig.Price; }
         }
      }
      bo.ProcessTradeSignals(bar);
   }

   bo.PostProcess();
}

Buy  = Cross(C, MA(C, 10));
Sell = Cross(MA(C, 10), C);


И оставшийся вариант, это тоже самое, но вместо bo.ProcessTradeSignals(bar); можно вручную добавлять сделки через EnterTrade и ExitTrade. И это, в общем-то, ничего не меняет. И, походу, других вариантов нет.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

хм. Странно. Я почему то был уверен, что свойства объекта Trade можно менять...

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



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


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

File Attachment © by Meik Sievertsen