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



Зарегистрирован: 09.06.2008
Сообщения: 65
Откуда: Екатеринбург

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

Пробую реализовать манимэнеджмент, скажем если предыдущая сделка закрылась по стопу - уменьшить позу в 2 раза.
я так понимаю для этого существует PositionSize.
пишу

SetOption("InitialEquity", 300000 );
RoundLotSize = 1;
PosMaxQty = 8;
SetOption("MaxOpenPositions", PosMaxQty );
initialPositionSize = -100/posmaxqty;
PositionSize=initialPositionSize;

торгует 1м лотом (газ, цена примерно 35000). если в коде хочу увеличить количество лотов - не выходит. делаю так

...
Equity(1);
IIf(Sell AND NOT (Sell==2), PositionSize = initialPositionSize*3, PositionSize = initialPositionSize*2);
IIf(Cover AND NOT (Cover==2), PositionSize = initialPositionSize*3, PositionSize = initialPositionSize*2);

т.е. если не закрылись по стопу - сделать positionSize = 3 если по стопу - то 2. А оно все шпарит по 2.

Пробую так
SetPositionSize( 2, spsShares );
SetPositionSize( 1, IIf(Sell AND (Sell==2),spsShares, spsNoChange ) );
SetPositionSize( 1, IIf(Cover AND (Cover==2),spsShares, spsNoChange ) );

срабатывает если стоп произошел на том же баре что и открытие следующей позы. а мне надо установить "дефолтное" значение размера для последующих сделок на всех остальных барах.
как это сделать?
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Пн Июн 23, 2008 10:38 pm Ответить с цитатой Вернуться к началу

Типа так.
Код:

Buy = Ref(Cross(C, MA(C, 20)), -1);
Sell = 0;
ApplyStop(0, 1, 5, 1, 0);
ApplyStop(1, 1, 5, 1, 0);
Equity(1); // формируем массивы остановок

SetPositionSize(IIf(ValueWhen(Sell>0, Sell)==2, 1, 2), 4);

Проверил. Вроде работает.

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



Зарегистрирован: 09.06.2008
Сообщения: 65
Откуда: Екатеринбург

СообщениеДобавлено: Вт Июн 24, 2008 7:34 am Ответить с цитатой Вернуться к началу

000 писал(а):
Типа так.
Код:

Buy = Ref(Cross(C, MA(C, 20)), -1);
Sell = 0;
ApplyStop(0, 1, 5, 1, 0);
ApplyStop(1, 1, 5, 1, 0);
Equity(1); // формируем массивы остановок

SetPositionSize(IIf(ValueWhen(Sell>0, Sell)==2, 1, 2), 4);

Проверил. Вроде работает.


что то все равно не так как надо.
вот код

StartSize=4;
RoundLotSize = 1;
SetPositionSize(startSize,spsShares);
Buy = Ref(Cross(C, MA(C, 20)), -1);
Short= Ref(Cross(MA(C, 20),C), -1);
Cover=Buy;
Sell=Short
sl = Optimize("stoploss", 70, 10, 350, 10);
ApplyStop(stopTypeLoss,stopModePoint,sl,1,0);
Equity(1);
Coeff=IIf((ValueWhen(Sell>0, Sell)==2 OR ValueWhen(Cover>0, Cover)==2), 2, 1);
SetPositionSize(StartSize/Coeff,spsShares);

вот результаты
Trade Shares
Long (max loss) 4
Short 2
Long (max loss) 2
Short 2
Long 2
Short 4
Long (max loss) 4
Long (max loss) 2
Short 2
Long (max loss) 2
Short 2
Long 2
Open Short 4

после первого срабатывания стопа кол-во лотов уменьшается, все ок.
а вот дальше оно держится 2 до непонятного мне места.
по идее должно быть так - первоначально 4 лота. после стопа - делим на 2 итого 2лота. опять стоп - делим еще на 2 - итого 1лот. еще стоп - делим на 2 получим 0.5, округляя получим 0 - сделки пропускаются до конца дня.
или так: 4 лота - стоп - стало 2 лота - стоп стало 1 лот, профит - стало 2 лота -профит стало 4 лота.
или на худой конец так: 4 лота - стоп - стало 2 лота - стоп стало 1 лот, профит - стало как было в начале - 4 лота.
ну понятно, что возможны вариации, но этой логики хватит чтоб реализовать что угодно.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Вт Июн 24, 2008 11:14 pm Ответить с цитатой Вернуться к началу

Это надо цикл писать.
Однако совершенно точно известно, что изменение сайза в зависимостиот результата предыдущей сделки приносит пользу только на системах с выраженной серийностью.
А наличие серийности в системе говорит о том, что она не доделана, т.е. есть возможность добавить фильтр который улучшит систему и без применения такого ММ.

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


Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"

СообщениеДобавлено: Ср Июн 25, 2008 3:08 pm Ответить с цитатой Вернуться к началу

000 писал(а):
Это надо цикл писать.
Однако совершенно точно известно, что изменение сайза в зависимостиот результата предыдущей сделки приносит пользу только на системах с выраженной серийностью.
А наличие серийности в системе говорит о том, что она не доделана, т.е. есть возможность добавить фильтр который улучшит систему и без применения такого ММ.


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

_________________
Юра
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Сергей



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

СообщениеДобавлено: Ср Июн 25, 2008 5:55 pm Ответить с цитатой Вернуться к началу

commenced писал(а):
000 писал(а):
Это надо цикл писать.
Однако совершенно точно известно, что изменение сайза в зависимостиот результата предыдущей сделки приносит пользу только на системах с выраженной серийностью.
А наличие серийности в системе говорит о том, что она не доделана, т.е. есть возможность добавить фильтр который улучшит систему и без применения такого ММ.


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

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


Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"

СообщениеДобавлено: Ср Июн 25, 2008 6:20 pm Ответить с цитатой Вернуться к началу

Сергей писал(а):
commenced писал(а):
000 писал(а):
Это надо цикл писать.
Однако совершенно точно известно, что изменение сайза в зависимостиот результата предыдущей сделки приносит пользу только на системах с выраженной серийностью.
А наличие серийности в системе говорит о том, что она не доделана, т.е. есть возможность добавить фильтр который улучшит систему и без применения такого ММ.


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

Вы учитываете комиссию если уходите в ночь в бумагах?


На фьючах нет комиссии.

_________________
Юра
Посмотреть профиль Отправить личное сообщение Отправить e-mail
000
Site Admin


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

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

Цитата:

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

Просадка получается на участке где выигали меньше чем проигнали и это совсем не обязательно последовательность только проигышных сделок. Серийность это четкая закономерность. Например если после выигрышной сделки с вероятностью больше 0,5 следует проигрышная, то это серийность.
Использовать анализ эквити очент просто.
Buy = ...
Sell = ...
Eq = Equity(1);
MEq = MA(Eq, 20);
Buy = Buy AND Eq > MEq; // исполняем только те сделки,
// когда предварительная эквити выше скользящей по ней.
Sell = Sell;

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


Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"

СообщениеДобавлено: Ср Июн 25, 2008 9:06 pm Ответить с цитатой Вернуться к началу

000 писал(а):
Цитата:

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

Просадка получается на участке где выигали меньше чем проигнали и это совсем не обязательно последовательность только проигышных сделок. Серийность это четкая закономерность. Например если после выигрышной сделки с вероятностью больше 0,5 следует проигрышная, то это серийность.
Использовать анализ эквити очент просто.
Buy = ...
Sell = ...
Eq = Equity(1);
MEq = MA(Eq, 20);
Buy = Buy AND Eq > MEq; // исполняем только те сделки,
// когда предварительная эквити выше скользящей по ней.
Sell = Sell;


Спасибо.

_________________
Юра
Посмотреть профиль Отправить личное сообщение Отправить e-mail
ID
Советник


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

СообщениеДобавлено: Чт Июл 09, 2009 5:51 am Ответить с цитатой Вернуться к началу

Здорова, всем

Есть такой вопрос:

Код (внизу) в АА работает корректно.
Но при выводе на экран (последняя строка) дает какую-то мурню.
В чем может быть трабла?
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Чт Июл 09, 2009 7:24 am Ответить с цитатой Вернуться к началу

Привет. Ты бы сказал, что хотел и что не так рисует.

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


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

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

Думал, что ты с одного взгляда поймешь Smile

Код прописывает сайз позиции.
В целях проверки кода я хотел его вывести на экран. В итоге: тестер работает корректно, но вот код дает мурню. На одной и той же сделке: тестер дает правильный сайз 57000, а код выводит на экран: 62500
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

WriteVal() выводит либо последнее значение массива, либо значение на выбранном в данный момент баре. Т.е. Если ничего не выбрано и на последнем баре Buy, то выведет Stop_Size_Long, если бай на предпоследнем баре или ранбше, то Stop_Size_Short. В случае если бар выбран, то смотря в каком месте.
Надеюсь это объяснение поможет. Если нет, то напиши что надо.

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


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

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

Олег, какой еще stop_size_long?

WriteVal() должен вывести мне массив my_positionsize.
См. картинку...
В тестере лот корректный, а WriteVal() дает какую-то -2.
Я хочу увидеть корректный лот через WriteVal()
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

Цитата:

Олег, какой еще stop_size_long?

Ну это я так написал чтобы тебе было понятнее.
А вот теперь, после нормального объяснения и мне наконец пнятно в чем косяк. Правильно заданный вопрос - половина ответа Smile
Первое. Незя присваивать массиву значение SetPositionSize()
т.е такая запись не корректна
qqq = SetPositionSize();
Второе. SetPositionSize() автоматически должна определть массив positionsize (в хелпере написано) и вот его то и надо выводить.
Точно не уверен, но возможно потребуется сперва написать Equity() потому, что сайз вычисляется только при работе тестера.
Третье. Если это сайз по портфелю (несколько тикеров), то вообще ничего не выйдет потому, что индикатор не станет обращаться к другим символам. Ну правдо у тебя вроде один тикер.
Четвертое. Проще всего будет определить другую переменную в которую записать сайз совсем без функции SetPositionSize и её вывести через WriteValue().

Еще попробую сказать по другому. Функция SetPositionSize() предназначена ТОЛЬКО для тестера и её использование в индикаторе неправильно.
Если надо в индикаторе, то пиши типа
Код:

SetPositionSize(блабла); // надо чтобы эквити правильно считалось
Equity();
qqq = percent_of_risk/100/IIf(блабла);
GfxTextOutput(.....);

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


 Перейти:   



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


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

File Attachment © by Meik Sievertsen