Автор |
Сообщение |
pylyp
Зарегистрирован: 21.09.2012
Сообщения: 80
|
Приветствую.
Тестирую одну систему.
Код: |
//недельный график MACD
TimeFrameSet(inWeekly);
HistW=MACD(26,50)-Signal(26,50,20);
MACDup=HistW>Ref(HistW,-1);
MACDdown=HistW<Ref(HistW,-1);
barcolor=IIf(MACDup,colorGreen,IIf(MACDdown,colorRed,colorBlue));
TimeFrameRestore();
//собственная разработка, рассчитывающая разницу между средними
FA=Optimize("fa",5,5,50,5);
SA=Optimize("sa",25,25,100,5);
period=Optimize("period",30,10,50,5);
f=EMA(C,FA);
s=EMA(C,sa);
Var=f-s;
HistUp=Var>Ref(Var,-3);
HistDown=Var<Ref(Var,-3);
barcolor=IIf(HistUp,colorGreen,IIf(HistDown,colorRed,colorBlue));
Plot(Var,"Hist",barcolor,styleHistogram);
TrailStopAmmount=C<Ref(C,-3);
//buy-sell
Buy= TimeFrameExpand(histW,inWeekly)>TimeFrameExpand(Ref(histW,-1),inWeekly) AND Var>Ref(Var,-3);
Sell=Cross(EMA(C,period),C);
ApplyStop(stopTypeTrailing,stopModePoint, TrailStopAmmount,False);
|
Все получилось замечательно.
Но добавил в это счастье код для размера позиции:
Код: |
Capital=10000;
Risk=0.01*Capital;
PositionSize=(Risk/TrailStopAmmount)*BuyPrice; |
И система начала пропускать некоторые сделки. Вопрос почему?
В settings размер счета стоит 10 000. Соотношение риск/сделка не превышает размер equity. То есть по идеи сделка должна сработать. Но почему-то покупать не хочет.... Благодарю за ответ. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
Mechanic
Зарегистрирован: 10.06.2008
Сообщения: 359
|
pylyp писал(а): |
TrailStopAmmount=C<Ref(C,-3); |
Результатом этого выражения будет либо TRUE (1), либо FALSE (0). Очевидно, что это логическая ошибка. Работе тестера она не мешает (хотя тест бессмысленным получается), но если результатом будет 0, то в выражении
Код: |
PositionSize=(Risk/TrailStopAmmount)*BuyPrice; |
будет деление на 0.
Плюс к этому в настойках тестера, на вкладке Portfolio, задаются ограничения на ликвидность и на количество открытых позиций - из-за этих настроек тоже могут быть пропуски сделок. |
|
|
Посмотреть профиль Отправить личное сообщение ICQ Number |
|
pylyp
Зарегистрирован: 21.09.2012
Сообщения: 80
|
Portfolio проверил. Было 4 (видно по умолчанию). Поставил мах -1 000.
Не помогло. Скорее всего проблема не в этом.
Что касается
Код: |
TrailStopAmmount=C<Ref(C,-3); |
так это же условие Стопп Лосса. Оно по умолчанию при открытии сделки должно быть больше цены входа. Или я не прав? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
Mechanic
Зарегистрирован: 10.06.2008
Сообщения: 359
|
Какое же это условие? Условие выхода у вас - пересечение ценой мувинга либо трейлинг-стоп, а TrailStopAmmount - величина трейлинг-стопа, которую вы считаете неправильно. У вас вместо требуемой величины трала в пунктах вычисляется булево значение - TRUE/FALSE. Ошибка именно в этом.
А про ограничение ликвидности я так, до кучи написал. По умолчанию там не более 10% объёма бара выставлено. |
|
|
Посмотреть профиль Отправить личное сообщение ICQ Number |
|
pylyp
Зарегистрирован: 21.09.2012
Сообщения: 80
|
Почесал репу. Комментарий в точку. Спасибо за посвященное время. исправил код на:
Код: |
TrailStopAmmount=C-Ref(C,-3); |
Теперь транзакций не пропускает.
Последний вопрос, чтобы окончательно развеять все неясности. Если будет вот так:
Код: |
TrailStopAmmount=C-Ref(C,-3);
ApplyStop(stopTypeTrailing,stopModePoint, TrailStopAmmount,False);
|
Это значит, что система при покупке будет отнимать от последнего close close с трех дней назад? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Да. Только вот не уверен как поведет себя стоп если получиться отрицательное значение.... |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
pylyp
Зарегистрирован: 21.09.2012
Сообщения: 80
|
По идеи оно должно сразу закрыться...
А вот тут такое дело, что оно молчит, пока тупо не закроется по sell'u....
Блин... |
|
|
Посмотреть профиль Отправить личное сообщение |
|
pylyp
Зарегистрирован: 21.09.2012
Сообщения: 80
|
Короче, чтобы не усложнять вписал код:
Код: |
TrailStopAmmount=Ref(HHV(H,3),-1)-Ref(LLV(L,3),-1); |
|
|
|
Посмотреть профиль Отправить личное сообщение |
|
Mechanic
Зарегистрирован: 10.06.2008
Сообщения: 359
|
Да просто возьмите разницу цен по модулю:
TrailStopAmmount=abs(C-Ref(C,-3));
Если же сделка должна открываться только при C < Ref(C,-3), то добавьте это условие в Buy:
Buy = ... and C < Ref(C, -3); |
|
|
Посмотреть профиль Отправить личное сообщение ICQ Number |
|
pylyp
Зарегистрирован: 21.09.2012
Сообщения: 80
|
Спасибо. Но по ходу HHV i LLV даже лучше работают чем по сравнению закрытий. Но все равно спасибо за совет. На будущее в других системах буду помнить. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
|