Автор |
Сообщение |
ZDN
Зарегистрирован: 13.01.2011
Сообщения: 27
Откуда: Severodvinsk
|
Уважаемые знатоки Amibroker! Вот, уже который день не могу решить задачу с выставлением стопа в моей системе. Помогите подобрать код для тестера, я пока еще начинающий знаток ами.
По системе есть 2 стопа (рассматривается лонг), один ставится в момент входа на минимуме предыдущей свечи (свеча №1), где был сигнал на вход, а после закрытия свечи, на которой произошел вход в рынок (свеча №2), вышеуказанный стоп нужно снять и выставить скользящий стоп (среднее значение минимума предыдущей свечи (свеча №1), где был сигнал на вход + минимум свечи, на которой был вход(свеча №2), т.е. простая двухдневная скользящая). Данный скользящий стоп должен двигаться по рынку пока его не пересечёт цена сверху вниз (минимум последующей свечи, на рисунке – это свеча №7).
Заранее всем огромное спасибо. Прошу прощения если неловко написал условие задачи, старался, как мог.
Файл с рисунком прилагаю.
Совсем забыл... вход осуществляется при пересечении двух скользящих, выход только по одному из стопов. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Все очень просто. Первый стоп ставим функцией ApplyStop(), а второй обычным sell
Код: |
ApplyStop(stopTypeLoss, stopModePoint, BuyPrice - L, ExitAtStop = 1);
Sell = L < IIf(Buy, L, (Ref(L, -1) + Ref(L, -2))/2);
SellPrice = IIf(Buy, L, (Ref(L, -1) + Ref(L, -2))/2);
|
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
ZDN
Зарегистрирован: 13.01.2011
Сообщения: 27
Откуда: Severodvinsk
|
000 писал(а): |
Все очень просто. Первый стоп ставим функцией ApplyStop(), а второй обычным sell
Код: |
ApplyStop(stopTypeLoss, stopModePoint, BuyPrice - L, ExitAtStop = 1);
Sell = L < IIf(Buy, L, (Ref(L, -1) + Ref(L, -2))/2);
SellPrice = IIf(Buy, L, (Ref(L, -1) + Ref(L, -2))/2);
|
|
Спасибо Вам, буду разбираться... |
|
|
Посмотреть профиль Отправить личное сообщение |
|
ZDN
Зарегистрирован: 13.01.2011
Сообщения: 27
Откуда: Severodvinsk
|
Код:
ApplyStop(stopTypeLoss, stopModePoint, BuyPrice - L, ExitAtStop = 1);
Sell = L < IIf(Buy, L, (Ref(L, -1) + Ref(L, -2))/2);
SellPrice = IIf(Buy, L, (Ref(L, -1) + Ref(L, -2))/2);
Данный код работает как надо, но в ходе тестирования столкнулся с такой вот проблемкой: если минимум последующего бара после входа будет ниже чем ранее заданный скользящий стоп и первоначальный стоп(ApplyStop(stopTypeLoss, stopModePoint, BuyPrice - L, ExitAtStop = 1)), то выход происходит по цене ApplyStop(…), а не по скользящему стопу.
Пытался решить проблемку сам, но, видно, опыта маловато еще. Прошу помощи…
(картинку тоже прилагаю)
Есть еще один вопросик – почему в условии L < IIf(Buy, L, ((Ref(L, -1) + Ref(L, -2)) /2) - P), после Buy стоит L, ведь получается, что Buy – это у нас открытая покупка (Buy=1) и соответственно левая часть неравенства должна сравниваться с L… (хотя всё работает) В чем здесь у меня ошибка в понимании?
|
|
|
Посмотреть профиль Отправить личное сообщение |
|
Teema
Зарегистрирован: 01.04.2009
Сообщения: 184
|
кратко
Sell = L < IIf(Buy, L, (Ref(L, -1) + Ref(L, -2))/2);
т.е. если L<L то продажа. |
|
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Teema
Зарегистрирован: 01.04.2009
Сообщения: 184
|
И еще IIF(buy,.....
это IIF(Buy==1,... |
|
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Teema
Зарегистрирован: 01.04.2009
Сообщения: 184
|
Teema писал(а): |
кратко
Sell = L < IIf(Buy, L, (Ref(L, -1) + Ref(L, -2))/2);
т.е. если L<L то продажа. |
Так, понял. на этот случай APPLY.
BuyPrice-L Это минимум предыдущей свечи? В APPLY? |
|
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Teema
Зарегистрирован: 01.04.2009
Сообщения: 184
|
А как ты отделяешь вход от сигнала на вход? И стрелочка по какому принципу рисуется? |
|
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
ZDN
Зарегистрирован: 13.01.2011
Сообщения: 27
Откуда: Severodvinsk
|
Teema писал(а): |
А как ты отделяешь вход от сигнала на вход? И стрелочка по какому принципу рисуется? |
у меня сигнал поступает при выполнении условия и сразу на той же свече рассчитывается значение для входа - величина ценника. По моей системе, сам вход осуществляется уже на следующей свечке. Но, так как я еще зеленый в Ami, у меня стрелки входа на графике показаны чуть раньше и в отчете тестера стоит не тот бар, где я вхожу, а тот, где сигнал. Так вот у меня получилось, но всё работает по отчету, так как мне надо… вот только бы со стопом еще всё утрясти. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
Teema
Зарегистрирован: 01.04.2009
Сообщения: 184
|
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
ZDN
Зарегистрирован: 13.01.2011
Сообщения: 27
Откуда: Severodvinsk
|
Teema писал(а): |
те входишь на открытии? |
при достижении расчитанного ценника (уровня) |
|
|
Посмотреть профиль Отправить личное сообщение |
|
Teema
Зарегистрирован: 01.04.2009
Сообщения: 184
|
Давай поштучно разберемся. Потом и админ подтянется
Поступает сигнал на покупку. На следующем баре ты входишь если H>расчетный уровень? |
|
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
ZDN
Зарегистрирован: 13.01.2011
Сообщения: 27
Откуда: Severodvinsk
|
Teema писал(а): |
Давай поштучно разберемся. Потом и админ подтянется
Поступает сигнал на покупку. На следующем баре ты входишь если H>расчетный уровень? |
на следующем баре вхожу если H>уровня, ну и логично, что L<расчетного уровня. если всё ок... то дальше всё как я описал выше, т.е. дальше работает только стоп.
код такой на вход: buy = signal1 > signal2 AND ref(h, 1) > uroven AND ref(l, 1) < uroven ; buypriсe = uroven; проскальзывание не учитываю пока.
так то у мя проблем с определением цены в тестере нет, только вот надо будет как то перенести указатель стрелки входа для полного порядка на свечку вперед, где я покупаю. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
Teema
Зарегистрирован: 01.04.2009
Сообщения: 184
|
А я о чем? Ref(H,1)>uroven
Это заглядывание вперед. Это значит я покупаю сейчас, если хай будущего бара больше уровня. Если включить BarReplay увидишь. Просто надо все условия правильно записывать если хочешь реальный результат получить.
Ref(H,0)>uroven или просто Н>u...
buy = signal1 > signal2 AND H > uroven ; buypriсe = max(O,uroven);
Так попробуй.
А L может потом стать < но потом ты по uroven не войдешь! |
|
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
ZDN
Зарегистрирован: 13.01.2011
Сообщения: 27
Откуда: Severodvinsk
|
Teema
спасибо за помощь, обязательно попробую... тогда получается, что мне нужно еще записать первое условие так: ref(signal1,-1)>ref(signal2,-1), да?
ведь у меня первое условие появляется баром раньше, а потом уже идет проверка на H и L на баре, где уже сам вход в рынок. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
|