Автор |
Сообщение |
pitero
Зарегистрирован: 09.06.2008
Сообщения: 65
Откуда: Екатеринбург
|
Пишу систему ММ.
Управляю кол-вом лотов от ширины стопа и проч.
Иногда бывает Lots=0; робот заявы не ставит, все ок, на графике стрелки рисуются, пишется что 0 лотов, сделка пропущена ММ, все ок.
А вот equity рисуется неправильно. Ощущение что она считается по максимальному кол-ву лотов, а не по тем лотам что у меня. в итоге я не могу юзать equity для установки кол-ва лотов (я как то писал про чехарду с количеством лотов - дык вот оно)
поставил максимальное кол-во лотов =1 в начале файла (все равно потом переопределяю количество в середине) - стало ближе к истине, но все рано несходится - "0-ые" сделки меняют эквити.
что делать ума не приложу. А так все красиво начиналось...
примерный код:
SetOption("MaxOpenPositions", 1 );
Buy = Cross(EMA(C,20),EMA(C,5));
Short = Cross(EMA(C,5),EMA(C,20));
Sell=Short;
Cover=Buy;
Equity(1);
SetOption("MaxOpenPositions", 100 );
RoundLotSize = 1;
Lots=IIf(BarIndex() < 500,1,0); // после 500 баров графика лот=0
ExitLots=IIf(BarsSince(Buy)<BarsSince(Short),ValueWhen(Buy,Lots),ValueWhen(Short,Lots));
// при закрытии позиции берем кол-во лотов открытия
Lots=IIf(Sell OR Cover,ExitLots,Lots);
SetPositionSize(Lots , spsShares );
Equity(1);
если протестить и потом нажать "индивидуал эквити" - хорошо видно что 0-ые сделки после 500го бара меняют эквити |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
А если просто
SetOption("MaxOpenPositions", 1 );
Buy = Cross(EMA(C,20),EMA(C,5));
Short = Cross(EMA(C,5),EMA(C,20));
Sell=Short;
Cover=Buy;
Equity(1);
SetOption("MaxOpenPositions", 100 );
Lots = IIF(BarIndex() < 500, 1, 0);
SetPositionSize(Lots , 4);
Equity(1); |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
pitero
Зарегистрирован: 09.06.2008
Сообщения: 65
Откуда: Екатеринбург
|
000 писал(а): |
А если просто
|
То есть глючит SetOption("AccountMargin",5);
убрал ее - эффект пропал.
хм. значит только в настройках тестера можно юзать маржу?
спасибо, как то даже не подумал на эту функцию. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
SetOption действительно глючит. Об этом уже писали.
Хотя я имел ввиду не только это.
Нет необходимости указывать размер SetPositionSize при закрытии сделки. Команды Sell и Cover полностью закрывают ранее открытую позицию не зависимо от заданного сайза. Размер SetPositionSize имеет значение только при открытии позиции или использовании sigScaleIn / sigScaleOut |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
pitero
Зарегистрирован: 09.06.2008
Сообщения: 65
Откуда: Екатеринбург
|
000 писал(а): |
SetOption действительно глючит. Об этом уже писали.
Хотя я имел ввиду не только это.
Нет необходимости указывать размер SetPositionSize при закрытии сделки. Команды Sell и Cover полностью закрывают ранее открытую позицию не зависимо от заданного сайза. Размер SetPositionSize имеет значение только при открытии позиции или использовании sigScaleIn / sigScaleOut |
Вот занялся sigScaleIn SigScaleOut - может пояснишь - так и не понял что это за жуткие цифири и как их юзать. Понял только что сделка в тестере все равно будет одна, просто считаться по средним ценам, это ладно.
Вообще есть желание объединить 2 и более систем в одну, т.е. сигналы на вход-выход у них разные, а таймфрэйм-тикер один. В одном индикаторе подружить никак не выходит, потому что наличие одного сигнала отменяет противоположный. А хочется потестировать именно обе системы (разное запаздывание сигналов присутствует, бывает из-за этого даже лонг/шорт или логн/селл одновременно по разным системам) вот и хочется написать мультипликатор, чтоб пропивоположные сделки сокращал, и увеличивал/сокращал позицию по нескольким сигналам.
Для простоты 2 системы, для каждой выделяется 50% депо.
Может ты писал что-то подобное? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
ID
Советник
Зарегистрирован: 07.01.2008
Сообщения: 370
|
Написал код, который по замыслу должен определять размер сайза исходя из волатильности. Трабл в том, что самая сделка выбирает сайз корректно, а вторая и последующие нет. Погляди те плз: из за чего это могет быть: |
Последний раз редактировалось: ID (Чт Дек 25, 2008 8:02 am), всего редактировалось 1 раз |
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Хотел проверить код и написать ответ, а у тебя в сообщении HTML не отключен и код покоцало.... |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
BabyBear
Советник
Зарегистрирован: 10.12.2008
Сообщения: 53
|
Очень может быть, что SetPositionSize нельзя использовать в цикле |
|
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail |
|
ID
Советник
Зарегистрирован: 07.01.2008
Сообщения: 370
|
000 писал(а): |
Хотел проверить код и написать ответ, а у тебя в сообщении HTML не отключен и код покоцало.... |
Олег, посмотри еще разок плз, я там прицепил файл |
|
|
Посмотреть профиль Отправить личное сообщение |
|
ID
Советник
Зарегистрирован: 07.01.2008
Сообщения: 370
|
BabyBear писал(а): |
Очень может быть, что SetPositionSize нельзя использовать в цикле |
Накатаю письмо поддержке, резалт сообщю |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Скорее всего в цикле вместо SetPositionSize() надо использовать positionsize[i] учитывая что
величины ниже -2000 обозначают в бумагах/контрактах,
величины между -2000 и -1000 обозначают % открытых позиций
величины между -1000 и 0 обозначают % эквити портфеля
величины выше 0 обозначают объем в деньгах
Вечером посмотрю код и отвечу подробно. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
ID писал(а): |
000 писал(а): |
Хотел проверить код и написать ответ, а у тебя в сообщении HTML не отключен и код покоцало.... |
Олег, посмотри еще разок плз, я там прицепил файл |
Не буду переписывать код. Словами прокоментирую.
1. Не понравилось, что ты 2 раза переключаешься на дневки. Читать код так конечно удобнее, а вот для его скорости скорее всего это плохо. Лучше переключись один раз, все, что надо посчитай и двигайся дальше.
2. Похоже есть непонимание как работает SetPositionSize(). Попробую объяснить. Во первых это массив (типа некая линия на графике). В момент когда поступает сигнал на открытие сделки Buy или Short Ами смотрит чему равна эта линя в этом месте и открывает позу такого размера (если есть такая возможность типа налиячия денег и т.п.) Когда поступает сигнал на закрыте сделки Sell или Cover Ами никуда не смотрит и закрывает сделку целиком, не зависимо от установленного сайза.
Таким образом в данном случае SetPositionSize() вообще не надо пихать в цикл, да и цикл там не нужен. Задать выход на третьем после входа баре проще при помощи ApplyStop() stopTypeNBar - стоп через N баров.
Вообще то хотел поэкспериментировать как себя в цикле ведет positionsize[i], но весь вечер протрахался с базой форума... |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
ID
Советник
Зарегистрирован: 07.01.2008
Сообщения: 370
|
На первое: тут ты прав, ну не че: опыт приходит со временем, я раньше такие коды писал... сейчас вспоминаю - мама не горюй.
На второе: Для меня принципиально важно научиться юзать цикл и setpositionsize. Ладно напишу код потом сюда кину - поглядим |
|
|
Посмотреть профиль Отправить личное сообщение |
|
BabyBear
Советник
Зарегистрирован: 10.12.2008
Сообщения: 53
|
ID писал(а): |
На второе: Для меня принципиально важно научиться юзать цикл и setpositionsize. |
Это не правильная цель.
Правильнее, наверно, так "мне важно научитья менять размер позиции при работе с циклами" |
|
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail |
|
|