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



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

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

ВНИМАНИЕ!
смотрите коды В КОНЦЕ темы, прикрепленные.
все промежуточные коды с ошибкой!

УРА!
я написал программный стоп-лосс:
Код:

Buy = Cross(C,MA(C,20));
BuyPrice = C;

BuyLevel = ValueWhen(Buy, BuyPrice, 1);
StopSize = 500; // величина Стоп-лосса в пунктах

SellCondition1 = C<(BuyLevel - StopSize);

Sell = Cross(MA(C,20), C) OR SellCondition1;
SellPrice = C;

Buy = ExRem(Buy, Sell);
Sell= ExRem(Sell, Buy);

Plot(C, "", colorBlack, styleCandle);
Plot((BuyLevel-StopSize), "stop", colorRed);



вроде все правильно.
это стоп-лосс для покупки. для шорта несложно аналогичный сделать.
пользуйтесь на здоровье!

(гордый собой пошел теперь писать программный трейлинг-стоп)


Последний раз редактировалось: Novi4ok (Вс Июн 21, 2009 3:15 pm), всего редактировалось 1 раз
Посмотреть профиль Отправить личное сообщение
Novi4ok



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

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

итак, я написал трейлинг-стоп
без всяких циклов, прошу заметить!
Код:

Buy = Cross(C,MA(C,20));
BuyPrice = C;

BuyLevel = ValueWhen(Buy, BuyPrice, 1);
BuyBarsAgo = BarsSince(Buy)+1;

TrailingStopSize = 1000;
TrailingStopLevel = HHV(H, BuyBarsAgo)-TrailingStopSize;

SellCondition1 = C<TrailingStopLevel;


Sell = Cross(MA(C,20), C) OR SellCondition1;
SellPrice = C;

 
Buy = ExRem(Buy, Sell);
Sell= ExRem(Sell, Buy);

Plot(C, "", colorBlack, styleCandle);
Plot((TrailingStopLevel), "trailing-stop", colorRed);
Посмотреть профиль Отправить личное сообщение
Novi4ok



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

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

проверил в амиброкере - работает аналогично встроенному стопу и трейлинг-стопу, если указывать в пунктах.

ТОЛЬКО Я ДО СИХ ПОР НЕ МОГУ ПОНЯТЬ
как он обрабатывает
сигналы ExRem и в то же время корректно обращается к ValueWhen и barsSince.

на мой взгляд здесь должна возникнуть рекурсия, ведь через ExRem сигнал Buy зависит от Sell, а через ValueWhen и BarsSince сигнал Sell зависит от сигнала Buy.

но опять же, повторяюсь, при тестах ВСЕ РАБОТАЕТ!!!! прямо как в амиброкере.!!!!

я в шоке.
Посмотреть профиль Отправить личное сообщение
Novi4ok



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

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

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



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

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

НАШЕЛ!
в условии трейлинг-стопа должно быть
<= вместо <.
вот верный код:
Код:

Buy = Cross(C,MA(C,20)); // условие системы на покупку
BuyPrice = C;

BuyLevel = ValueWhen(Buy, BuyPrice, 1); // по какой цене купили
BuyBarsAgo = BarsSince(Buy)+1; // сколько баров назад купили

TrailingStopSize = 1000; // размер трейлинг-стопа
TrailingStopLevel = HHV(Ref(H,0), BuyBarsAgo)-TrailingStopSize; // его уровень

SellCondition1 = C<=TrailingStopLevel; // условие продажи по трейлингу

Sell = Cross(MA(C,20), C) OR SellCondition1; // продаем по системе или по трейлингу
SellPrice = C;

 
Buy = ExRem(Buy, Sell); // убираем лишние сигналы
Sell= ExRem(Sell, Buy);

Plot(C, "", colorBlack, styleCandle);
Plot((TrailingStopLevel), "trailing-stop", colorRed); //рисуем
Посмотреть профиль Отправить личное сообщение
commenced
Советник


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

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

Не советую использовать ваши стопы, они работают благодаря cross т.к. это давольно жесткое условие и стоп скорее всего успевает исполниться до появления между стопом и покупкой еще одного условия покупки, если в системе будет успевать проходить несколько условий Buy то стоп будер расчитываться от последней точки выполнения условия. Sad

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



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

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

Cross - это условие системы.

а условие стопа тут стандартное - если цена ушла за такой-то уровень.
ну тоже в какой-то мере кросс.
но так все стопы и все трейлинг-стопы рассчитываются.

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


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

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

Novi4ok писал(а):
Cross - это условие системы.

а условие стопа тут стандартное - если цена ушла за такой-то уровень.
ну тоже в какой-то мере кросс.
но так все стопы и все трейлинг-стопы рассчитываются.

а какие иные стопы можно предложить?


Ты не понял, замени cross на > и увидиш почему стопы пишут циклом.

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



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

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

хм... да заменил,
результат моих стопов и встроенных теперь отличается.
Confused
ща попробую переделать, есть идейка "разнести" по времени условия системы и стопа, чтобы Exrem вставить пораньше.
Посмотреть профиль Отправить личное сообщение
Novi4ok



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

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

получился такой код:

блин, сайт перевирает код, счас прицеплю.

вроде все работает,
счас потестю на большой выборке с разными системами.
Посмотреть профиль Отправить личное сообщение
Novi4ok



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

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

хммм... как будто бы опять что-то не то, а что именно, непонятно.

получается, если условие системы на Sell сделать 0, т.е. выход только по стопам, то программа совершает первую покупку и на этом останавливается.
Sad
это неправильно.
Посмотреть профиль Отправить личное сообщение
Novi4ok



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

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

короче, вот в чем проблема:

если у нас был сигнал на продажу, а потом один сигнал на покупку,
то этот сигнал на покупку истинный;
если у нас не было сигнала на продажу, но сигнал на покупку первый за всю историю баров, то такой сигнал на покупку тоже истинный;

если у нас второй сигнал на покупку, а на продажу не было, то это ложный сигнал и его нужно отменить.

вот, как теперь это запрограммировать? Shocked
Посмотреть профиль Отправить личное сообщение
Novi4ok



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

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

хм.
почему-то когда пытаюсь сосчитать количество баров, прошедших с последней продажи
s = BarsSince(Sell)
то всегда выдает Null,
хотя
b = BarsSince(Buy) корректно работает
Посмотреть профиль Отправить личное сообщение
Novi4ok



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

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

понятно почему.
потому что когда я приравниваю Sell = 0;
то он мне весь массив заполняет нулями.
ужас.
а мне нужно, чтобы предыдущие совершенные сделки в массиве сохранялись.
Посмотреть профиль Отправить личное сообщение
commenced
Советник


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

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

Novi4ok писал(а):
короче, вот в чем проблема:

если у нас был сигнал на продажу, а потом один сигнал на покупку,
то этот сигнал на покупку истинный;
если у нас не было сигнала на продажу, но сигнал на покупку первый за всю историю баров, то такой сигнал на покупку тоже истинный;

если у нас второй сигнал на покупку, а на продажу не было, то это ложный сигнал и его нужно отменить.

вот, как теперь это запрограммировать? Shocked


Для этого и нужен цикл.

_________________
Юра
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



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


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

File Attachment © by Meik Sievertsen