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



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

СообщениеДобавлено: Чт Май 30, 2019 1:02 pm Ответить с цитатой Вернуться к началу

Олег и всем кто тут привет)

Есть простая старая заготовка:

Код:

SetBacktestMode( backtestRegularRawMulti );

pds=111;
DonchianUpper =HHV(Ref(H,-1),pds);
DonchianLower = LLV(Ref(L,-1),pds);
DonchianMiddle = (DonchianUpper+DonchianLower)/2;
 
Buy=Cross(High,DonchianUpper);
Short=Cross(DonchianLower,Low);
Sell=DonchianMiddle > Low;
Cover=DonchianMiddle < High;



BuyPrice=max(DonchianUpper, O);SellPrice=min(DonchianMiddle,O);ShortPrice=min(DonchianLower, O);CoverPrice=max(DonchianMiddle,O);
 
Buy = ExRem(Buy,Sell);Sell = ExRem(Sell,Buy);Short=ExRem(Short,Cover);Cover=ExRem(Cover,Short);

SetPositionSize(1, 4);


Задача стоит простая. После лонг или шорт докупить еще 1 лот, если цена пошла против нашей позы на 200 пп, например (график РИ 6 минутка).
Потом по сигналу выхода закрыть все полностью.

Полазив на форуме, нашел, что подойдет использование SetBacktestMode. Но примеры на сайте ами находятся в мембер зоне. Не пойму как дописать условие на лонг и шорт? Добавлял вторые Buy Short, но получается какой-то бред.

и я так понимаю exrem надо убирать?
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Чт Май 30, 2019 1:31 pm Ответить с цитатой Вернуться к началу

1. Оставляешь как есть
2. Вычисляешь когда система в позиции (функцией flip)
3. Запоминаешь цену открытия позиции (ValueWhen(Buy)...)
4. Если цена упала ниже цены входа и система в позиции то добавляем Buy = ...

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



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

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

000 писал(а):
1. Оставляешь как есть
2. Вычисляешь когда система в позиции (функцией flip)
3. Запоминаешь цену открытия позиции (ValueWhen(Buy)...)
4. Если цена упала ниже цены входа и система в позиции то добавляем Buy = ...


Как запомнить правильно цену открытия? Тут ведь немного нестандартное определение цены входа в сделку.
По логике сделал, но конечно не работает)
Код:

SetBacktestMode( backtestRegularRawMulti );

pds=111;
DonchianUpper =HHV(Ref(H,-1),pds);
DonchianLower = LLV(Ref(L,-1),pds);
DonchianMiddle = (DonchianUpper+DonchianLower)/2;
 
Buy=Cross(High,DonchianUpper);
Short=Cross(DonchianLower,Low);
Sell=DonchianMiddle > Low;
Cover=DonchianMiddle < High;

InTrade = Flip( Buy, Short );
bp=ValueWhen(Buy,C);//buy price
sp=ValueWhen(Short,C);//short price
Buy=InTrade AND Low<bp-100;
Short=InTrade AND High>sp+100;

BuyPrice=max(DonchianUpper, O);SellPrice=min(DonchianMiddle,O);ShortPrice=min(DonchianLower, O);CoverPrice=max(DonchianMiddle,O);
 
Buy = ExRem(Buy,Sell);Sell = ExRem(Sell,Buy);Short=ExRem(Short,Cover);Cover=ExRem(Cover,Short);

SetPositionSize(1, 4);
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Чт Май 30, 2019 2:35 pm Ответить с цитатой Вернуться к началу

Сделай сперва только для лонга.
Как то так
Код:

SetBacktestMode( backtestRegularRawMulti );

pds=111;
DonchianUpper =HHV(Ref(H,-1),pds);
DonchianLower = LLV(Ref(L,-1),pds);
DonchianMiddle = (DonchianUpper+DonchianLower)/2;
 
Buy=Cross(High,DonchianUpper);
Sell=DonchianMiddle > Low;




BuyPrice=max(DonchianUpper, O);
SellPrice=min(DonchianMiddle,O);
 
Buy = ExRem(Buy,Sell); Sell = ExRem(Sell,Buy);

SetPositionSize(1, 4);

inLong = Flip(Buy, Sell);
ep = ValueWhen(Buy, BuyPrice);
Buy = Buy OR (L < ep-200 AND inLong);

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



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

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

Спасибо Олег. Интересно работает код) Он каждую сделку в 1 лот ведет отдельно)

Поковыряюсь сейчас. Мне нужно что бы было не больше 2 докупок.
я так понимаю, что с помощью setpositionsize просто не сделать, надо считать докупки?
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Чт Май 30, 2019 3:33 pm Ответить с цитатой Вернуться к началу

Вторую сделку обзови buy2.
Buy2 = ExRem(Buy2, Sell);
Buy = Buy OR Buy2;

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



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

СообщениеДобавлено: Чт Май 30, 2019 3:55 pm Ответить с цитатой Вернуться к началу

Я понял, сделал вот так:
Код:

SetBacktestMode( backtestRegularRawMulti );

pds=111;
DonchianUpper =HHV(Ref(H,-1),pds);
DonchianLower = LLV(Ref(L,-1),pds);
DonchianMiddle = (DonchianUpper+DonchianLower)/2;
 
Buy=Cross(High,DonchianUpper);
Sell=DonchianMiddle > Low;




BuyPrice=max(DonchianUpper, O);
SellPrice=min(DonchianMiddle,O);
 
Buy = ExRem(Buy,Sell); Sell = ExRem(Sell,Buy);

SetPositionSize(1, 4);

inLong = Flip(Buy, Sell);
ep = ValueWhen(Buy, BuyPrice);
Buy2=L < ep-200 AND inLong;

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


Но вот с ценами докупок не понятно. Уж они точно не с разницей в 200 пп идут. Сделал что бы не Low проверялся а Close и все равно цены неправильные а кое-где докупка идет по большей цене...
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Чт Май 30, 2019 4:31 pm Ответить с цитатой Вернуться к началу

Ну правильно. А кто будет задавать правильную цену покупки для сделки добавления? У тебя тестер пытается купить второй раз по
BuyPrice=max(DonchianUpper, O);
...
Надо как то
BuyPrice1=max(DonchianUpper, O);
ep = ValueWhen(Buy, BuyPrice);
BuyPrice2 = ep-200;
BuyPrice = IIf(Buy2, BuyPrice2, BuyPrice1);

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



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

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

Супер. Олег, спасибо))

вечером попытаюсь добавить вторую доливку на -300 пп. По аналогии)

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


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

СообщениеДобавлено: Чт Май 30, 2019 5:15 pm Ответить с цитатой Вернуться к началу

В роботе надо по другому, но можно.

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



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

СообщениеДобавлено: Пт Май 31, 2019 10:50 am Ответить с цитатой Вернуться к началу

Олег, изучаю эффективность метода, на примере только лонга с одной доливкой. Ну перед тем как усложнять алгоритм. Вот такой код пока: И есть проблема

Код:

SetBacktestMode( backtestRegularRawMulti );

pds=111;
DonchianUpper =HHV(Ref(H,-1),pds);
DonchianLower = LLV(Ref(L,-1),pds);
DonchianMiddle = (DonchianUpper+DonchianLower)/2;
 
Buy1=Cross(High,DonchianUpper);
Sell=DonchianMiddle > Low;

BuyPrice1=max(DonchianUpper, O);
SellPrice=min(DonchianMiddle,O);
 
inLong = Flip(Buy1, Sell);
ep = ValueWhen(Buy1, BuyPrice1);
Buy2=L < ep-200 AND inLong;
BuyPrice2 = ep-200;
BuyPrice = IIf(Buy2, BuyPrice2, BuyPrice1);


Buy1 = ExRem(Buy1,Sell);
Buy2 = ExRem(Buy2, Sell);

Buy = Buy1 OR Buy2;
Sell = ExRem(Sell,Buy);
SetPositionSize(1, 4);



Проходят глючные доливки(

И еще такой момент, если Exrem перемещать по коду то меняется результаты тестирования. Где и в какой последовательности их правильно оставить?
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Пт Май 31, 2019 1:44 pm Ответить с цитатой Вернуться к началу

Правильно ставить ExRem-ы вот так. Почему есть "глючные" сделки я не знаю. Выводи на график сигналы, линии покупки ep. и т.п и смотри...
Код:

SetBacktestMode( backtestRegularRawMulti );

pds=111;
DonchianUpper =HHV(Ref(H,-1),pds);
DonchianLower = LLV(Ref(L,-1),pds);
DonchianMiddle = (DonchianUpper+DonchianLower)/2;
 
Buy1=Cross(High,DonchianUpper);
Sell=DonchianMiddle > Low;
Buy1 = ExRem(Buy1,Sell);

BuyPrice1=max(DonchianUpper, O);
SellPrice=min(DonchianMiddle,O);
 
inLong = Flip(Buy1, Sell);
ep = ValueWhen(Buy1, BuyPrice1);
Buy2=L < ep-200 AND inLong;
BuyPrice2 = ep-200;
BuyPrice = IIf(Buy2, BuyPrice2, BuyPrice1);

Buy2 = ExRem(Buy2, Sell);

Buy = Buy1 OR Buy2;
Sell = ExRem(Sell,Buy);
SetPositionSize(1, 4);

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



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

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

Олег, есть какая-то неточность в коде. Я сейчас проверил последний код. На первый взгляд глючные сделки ушли. (хотя если перейти на 30 минут то они появятся, но сейчас не об этом)

На скрине на графике выведена дефолтная система с сигналами. В тестере результат работы системы с доливкой.

в 19-42 1 марта покупка идет по 128540. Но прогонка дает нам на 200 пп ниже цену. Там должна быть через 3 бара докупка,но ее в тестере не видно. Тестер как будто соединил в данном случае 2 сделки. От первой взял время, а от второй цену.
Посмотреть профиль Отправить личное сообщение
Orange2000



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

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

потом несколько сделок нормально с отображением доливок и вот тоже самое...
пометил красным, где сработала докупка (но её в тестере нет) и он просто цену Buy1 поменял на цену Buy2.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

Скорее всего какая то путанца с сигналами Buy1 и Buy2. Выведи их на график PlotShape() и поизучай... Еще можно вывести на график BuyPrice.

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



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


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

File Attachment © by Meik Sievertsen