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



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

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

Что бы не создавать новую тему (и не раздражать модератора), спрошу здесь... Проблема вот в чем.

В Бэктестере пытаюсь создать свой особенный трэйлинг стоп.

Сигналы на вход моей системой даются очень часто - допустим каждый пятый бар отмечается стрелкой Buy. Вход в позицию идет по первому сигналу, а далее должен работать код расчета цены трейлинга, для выхода. Код этот должен опираться на цену входа в позицию (первого входа - настоящего).

Как "сказать" AFL-коду, что на данном баре система уже находится в позиции и текущий сигнал Buy - пустой, его следует игнорировать?

Заранее спасибо. Извините, если вопрос очень глупый....


P.S. Размер позиции ограничен командой SetPositionSize(100, spsShares ); поэтому лишних входов нет. Есть ложные пересчеты трейлинга на некоторых лишних Buy-сигналах.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Чт Мар 04, 2010 1:27 am Ответить с цитатой Вернуться к началу

Не стану расжевывать. В общих чертах. Если система не портфельная (торгует одну бумагу), то поможет только цткл. Причем в этом же цикле надо делать и "особенный трэйлинг"
Можно было бы фильтрануть лишние баи функцией Equity? получается вот что. Есть куча входов, но некоторые из них лишние. А которые лишние определяется выходом по трейлингу, а трейлинг зависит от входов. Замкнутый круг.
Поэтому только циклом от бара к бару....

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



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

СообщениеДобавлено: Чт Мар 04, 2010 12:45 pm Ответить с цитатой Вернуться к началу

000 писал(а):

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


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


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

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

Вот для этого и ввели в ами возможность писать циклы. Функции работающие с массивами легче в записи и работают гораздо быстрее, но, к сожалнию, при их использовании есть ограничения.

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



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

СообщениеДобавлено: Пт Мар 05, 2010 1:09 am Ответить с цитатой Вернуться к началу

У меня дурацкая идея... Скажите, что в ней неправильного.

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

может можно считать трэйл с условием типа

Предварител.Трэйл = HighestSince( Buy==1, High, 1 )-размерТрэйла; расчитываем с момента последнего Бая (мб ложного)

If (Предварител.Трэйл=>ПроверенныйТрэйл) ПроверенныйТрэйл=Предварител.Трэйл ;

//так мы принимаем новый Трэйл только если он выше старого. трэлинг по прежнему будет расчитываться и от ложных Баев, но они все равно будут двигать трэйл только вверх.

P.S. поздно уже проверять идею... пора спать
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Пт Мар 05, 2010 1:35 am Ответить с цитатой Вернуться к началу

Да вроде так можно. Только это простой трейлинг. Такой ApplyStop делает. Что огород городить...
Ведь нужен реальный вход именно потому, что трейлинг считаем от реального входа. А выше или ниже предварительный это пофиг.

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



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

СообщениеДобавлено: Пт Мар 05, 2010 2:42 pm Ответить с цитатой Вернуться к началу

000 писал(а):
Да вроде так можно. Только это простой трейлинг. Такой ApplyStop делает. Что огород городить...
Ведь нужен реальный вход именно потому, что трейлинг считаем от реального входа.


Сначала - зачем это нужно. Что бы сделать трейлинговый тэйк-профит. Я в вопросах везде пишу про трэйлинг-стоп только что бы экономить время. А мне надо тэйк-профит, скользящий впереди цены позиции (с замедлением) по изощренной формуле. Думаю, такой стоп не только мне будет нужен...

Как я понял, встроенный ApplyStop трейлит только цены ниже цены позиции - только стоп-лоссы. Если вошел в Лонг за 110, то можно стартовать стоп-трэйлинг "с 90 - вверх", а со "150 - вниз" никак нельзя.

Теперь про расчет... Предложенная мной выше идея - не работает. По ней непонятно как установить значение самого первого ПроверенногоТрейлинга, с которым будут сравниваться все последующие... Вобщем тот же затык: истинность-ложность Баев нельзя определить только исходя из них самих. Прямо теорема Геделя....

Есть другая идея. Прошу обьяснить ее ошибки - они наверняка есть, я очень плохо представляю принципы AFL и не вполне уверен в некоторых вещах...

У меня такая система, что если дает Sell - он точно исполниться и позиция закроется. И первый Бай после последнего Sell-а будет истинным. Значит можно понять - новый Бай ложен, если между предыдущим Баем и новым не было ни одного Sell-а. надеюсь это сделать сравнивая время Buy и Sell.

Значит надо выяснить время бара, на котором был пред-последний Бай и время бара где был последний Sell. И сравнить - какое больше, тогда поймем - что случилось позже.

"Время Buy(-1) > Время Sell(last)" да или нет.

Если да, значит у нас во времени (на графике) была такая последовательность

Buy(-3) Sell(-1) Buy(-2) Sell(last) Buy(-1) Buy(last)

значит Buy(last) - ложный. Позиция открыта по Buy(-1) и до сих пор она не закрыта Sell(last) -ом. Значит Buy(last) мы отбрасываем. Если через минуту (или 100 минут) приходит новый Buy(last), а позиция по прежнему незакрыта, у нас на графике будет последовательность

... Sell(last) Buy(-2) Buy(-1) Buy(last) которая определится тем-же условием

"Время Buy(-1) > Время Sell(last)" да или нет. И мы снова отбросим очередной ложный Buy(last)

И это же условие определит, что Buy(last) не-ложный и открывает позицию, в случае, если на графике была поледовательности приказов

...Buy(-2) Sell(-1) Buy(-1) Sell(last) Buy(last)

В итоге, мы в бэкстестере без всяких циклов и прогонов по сотням баров сможем определять вход в позицию. Со всеми вытекающими.

Чего я никак не могу понять - как в Бэкстере записать сравнение
"Время Buy(-1) > Время Sell(last)" да или нет.

Потому что не знаю, как узнать время последнего Buy, предпоследнего, последнего Sell... Для этого TimeNum() видимо не работает.... Подскажите пожалуйста - как можно сделать. Заранее спасибо.

P.S. Все происходит внутри одного дня. При переносе на другой день будут свои дополения.

P.S. Я хоть правильно думаю, что к предпоследнему Buy надо обращаться синтаксисом Buy[-1] ?
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Пт Мар 05, 2010 3:00 pm Ответить с цитатой Вернуться к началу

Цитата:

Чего я никак не могу понять - как в Бэкстере записать сравнение
"Время Buy(-1) > Время Sell(last)" да или нет.

Вот ничего этого, и того, что было выше не надо. Если есть однозначный Sell, то "лишние" Buy легко удаляются функцией ExRem(). Фигня в том, что, как я понял, иногда поза будет закрываться по трейлингу, а он в свою очередь зависит от Buy...
По AFL действительно каша. Попробуй почитай это. http://www.amisite.ru/begin/afl.htm

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



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

СообщениеДобавлено: Пт Мар 05, 2010 4:38 pm Ответить с цитатой Вернуться к началу

[quote="000"]
Цитата:

Вот ничего этого, и того, что было выше не надо. Если есть однозначный Sell, то "лишние" Buy легко удаляются функцией ExRem(). Фигня в том, что, как я понял, иногда поза будет закрываться по трейлингу, а он в свою очередь зависит от Buy...


Поза будет закрываться ТОЛЬКО по трейлингу и в конце дня по времени, типа:

Enday = TimeNum()>183800;
Sell = Endday;

Но, трейлинг то у нас свой, расчетный. Так же как и Buy. И условие сработки трйлинга можно прописать переменной.

Будет ли работать ExRem() смысл которой я очень плохо понимаю, если Sell будет иметь вид

Enday = TimeNum()>183800;
TrailingSrabotal = ...... ;
Sell = Endday OR TrailingSrabotal;

???
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Пт Мар 05, 2010 6:35 pm Ответить с цитатой Вернуться к началу

Если по своему расчетному трейлингу, то ничего не выйдет.
Для того, чтобы удалить лишние сигналы Buy надо иметь ВСЕ сигналы Sell, а Sell зависит от истинных Buy.
Только циклом. Перебор баров от первого к последнему.
А что мешает сделать это циклом ?

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



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

СообщениеДобавлено: Сб Мар 06, 2010 12:41 am Ответить с цитатой Вернуться к началу

Вы кругом правы, Олег, а я кругом не прав...

Почему я не хочу циклом... Во-первых - не умею, во вторых думаю это будет в разы медленнее, при оптимизации. У меня Walk-forward (с пере-оптимизацией на каждом шаге) сейчас занимает часы, а с трейлингом через цикл... боюсь суток не хватит....

Вы написали о моей ночной идее "Да вроде так можно. Только это простой трейлинг. Такой ApplyStop делает." Я весь вчер сегодня бился с ней, и получил страный недо-результат.... посмотрите пожалуйста код, он чисто для индикатора пока.


Buy = Cross( Close, MA(Close, 5) );
endday = TimeNum() >162800;
Sell = endday;

otstup = 1.45; \\ отступ для трейлинга. Пока простой, но может быть как угодно сложный, выше цены или ниже.

rawTrail=HighestSince( Buy==1, High, 1 )-otstup; // расчет предварительного трейлинга, от ближайшего ложного бая.

trail = IIf(rawTrail<Ref( rawTrail, -1 ) , Ref( rawTrail, -1 ), rawTrail ); \\ если новый Предвар.Трейл меньше чем был он же на прошлом баре, то принимаем его значение именно с прошлого бара. Так обеспечивается условие "сдвигать стоп только вверх".

rawTrail =trail; \\ в массив предвар.Трейлинга записываем проверенное значение (которое не меньше значения с прошлого бара).

Plot(trail,"trail",colorPink, styleLine) ; \\рисуем проверенный трейл
Plot(Ref(rawTrail, -1 ),"rawTrail, -1",colorYellow, styleLine) ;
\\желтой линией рисуем Предвар.Трейлинг с прошлого бара - именно с ним ведется сравнение.


Этот код, как мне казалось, должен был рисовать линию-уровень трейлинга только горизонтально или вверх. Независимо от ложного или истинного Бая велся бы расчет.

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

P.S. понимаю, что уже надоел Вам, но может не только мне ваши советы будут полезны... Заранее большое спасибо за всё.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Сб Мар 06, 2010 10:38 pm Ответить с цитатой Вернуться к началу

Код:

trail = IIf(rawTrail<Ref( rawTrail, -1 ) , Ref( rawTrail, -1 ), rawTrail );

Такая конструкция работать не будет. Но сейчас не об этом. Налицо странная идея. Если trail будет все время повышаться, то он вырастет очень сильно и будет всегда выше графика (если только график не все время растет)
Ты не вполне понимаешь работу AFL. Считаешь, что он просматривает котировки слева направо. Это не верно. AFL смотрит сразу ВЕСЬ массив.
Если уж все таки сильно надо чтобы он все время повышался, то пиши так
Код:

trail = Highest(rawTrail);

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



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

СообщениеДобавлено: Вс Мар 07, 2010 12:21 am Ответить с цитатой Вернуться к началу

000 писал(а):

Ты не вполне понимаешь работу AFL. Считаешь, что он просматривает котировки слева направо. Это не верно. AFL смотрит сразу ВЕСЬ массив.

Если trail будет все время повышаться, то он вырастет очень сильно и будет всегда выше графика (если только график не все время растет)

Мда... если он не слева-направо... Спасибо за терпение и обьяснения.

Наверное, создам ветку в торговых системах с вопросом по такому тэйк-профиту... Может у кого-нибудь будут интересные идеи.
Посмотреть профиль Отправить личное сообщение
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



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


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

File Attachment © by Meik Sievertsen