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



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

СообщениеДобавлено: Вт Окт 18, 2016 7:48 pm Ответить с цитатой Вернуться к началу

Есть такая крутая система:
Код:

//------------------------------------------------------
//
//  Formula Name:    Donchian Channel trading System
//  Author/Uploader: Trading Tuitions
//  E-mail:          support@tradingtuitions.com
//  Website:         www.tradingtuitions.com
//------------------------------------------------------
 
_SECTION_BEGIN("Donchian Channel trading System");
 
SetChartOptions(0,chartShowArrows|chartShowDates);
_N(Title = StrFormat("{{NAME}} - {{INTERVAL}} {{DATE}} Open %g, Hi %g, Lo %g, Close %g (%.1f%%) {{VALUES}}", O, H, L, C ));
 
//Initial Parameters
SetTradeDelays( 0,0,0, 0 );
SetOption( "InitialEquity", 200000);
SetOption("FuturesMode" ,True);
SetOption("MinShares",1);
SetOption("CommissionMode",2);
SetOption("CommissionAmount",100);
SetOption("AccountMargin",10);
SetOption("RefreshWhenCompleted",True);
SetPositionSize(150,spsShares);
SetOption( "AllowPositionShrinking", True );
 
Plot( Close, "Price", colorWhite, styleCandle );
 
pds=Param("DonchianPeriods",5,5,100,5);
DonchianUpper =HHV(Ref(H,-1),pds);
DonchianLower = LLV(Ref(L,-1),pds);
DonchianMiddle = (DonchianUpper+DonchianLower)/2;
 
printf("\nDonchianUpper : " + DonchianUpper ); 
printf("\nDonchianLower : " + DonchianLower ); 
printf("\nDonchianMiddle : " + DonchianMiddle ); 
 
Plot(DonchianUpper,"DU",colorBlue,styleLine);
Plot(DonchianMiddle,"DM",colorGreen,styleLine);
Plot(DonchianLower,"DL",colorRed,styleLine);
 
ATRMultiplier=Param("ATRMultiplier",5,1,5,1);
ATRPeriods=Param("ATRPeriods",25,5,25,1);
 
Buy=Cross(High,DonchianUpper);
Short=Cross(DonchianLower,Low);
Sell=Cross(DonchianMiddle,Low);
Cover=Cross(High,DonchianMiddle);
 
BuyPrice=DonchianUpper;
SellPrice=DonchianMiddle;
ShortPrice=DonchianLower;
CoverPrice=DonchianMiddle;
 
Buy = ExRem(Buy,Sell);
Sell = ExRem(Sell,Buy);
Short=ExRem(Short,Cover);
Cover=ExRem(Cover,Short);
 
ApplyStop(stopTypeTrailing, stopModePoint, ATRMultiplier*ATR(ATRPeriods), True, True );
 
printf("\nBuy : " + Buy ); 
printf("\nSell : " + Sell ); 
printf("\nShort : " + Short ); 
printf("\nCover : " + Cover ); 
 
/* Plot Buy and Sell Signal Arrows */
PlotShapes(IIf(Buy, shapeSquare, shapeNone),colorGreen, 0, L, Offset=-25);
PlotShapes(IIf(Buy, shapeSquare, shapeNone),colorLime, 0,L, Offset=-35);
PlotShapes(IIf(Buy, shapeUpArrow, shapeNone),colorWhite, 0,L, Offset=-30);
PlotShapes(IIf(Short, shapeSquare, shapeNone),colorRed, 0, H, Offset=25);
PlotShapes(IIf(Short, shapeSquare, shapeNone),colorOrange, 0,H, Offset=35);
PlotShapes(IIf(Short, shapeDownArrow, shapeNone),colorWhite, 0,H, Offset=-30);
PlotShapes(IIf(Sell, shapeStar, shapeNone),colorGold, 0, L, Offset=-15);
PlotShapes(IIf(Cover, shapeStar, shapeNone),colorGold, 0,L, Offset=-15);
 
 
_SECTION_END();


дает хорошие результаты. Но на реале получаем худшие входы чем указано Price строчках. Плюс у меня часто сделка не закрывалась (sell и cover), хотя по тестам должна закрыться. В общем какой-то глючный код системы если честно)
ВОт источник:
http://tradingtuitions.com/afl-of-the-week-donchian-channel-trend-following-system/

Как её поправить что бы было максимально приближено к реальности?

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


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

СообщениеДобавлено: Ср Окт 19, 2016 11:51 am Ответить с цитатой Вернуться к началу

В коде написано все грамотно. Вход при пробое уровня. Разумеется в реале такую цену никак не поймать. Наиболее точно можно получить эту цену если заранее ставить ордер на пробой.
А как ты торговал эту систему? Там выход либо по сигналу либо по трейлингу.

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



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

СообщениеДобавлено: Ср Окт 19, 2016 12:41 pm Ответить с цитатой Вернуться к началу

000 писал(а):
В коде написано все грамотно. Вход при пробое уровня. Разумеется в реале такую цену никак не поймать. Наиболее точно можно получить эту цену если заранее ставить ордер на пробой.
А как ты торговал эту систему? Там выход либо по сигналу либо по трейлингу.


Привет Олег!
Трейлинг я убрал. Без него результаты даже лучше.
Параметр взял 5. 30 минутка РТС. Запихал в робота Ами-Альфадирект.

Согласен, что код четкий и понятный. Согласен что на проскальзывании будут другие входы. Но дело в том что часто было такое:
Система входит в лонг. Робот тоже. Потом происходит пересечение цены и средней линии и вроде должен лонг закрыть, но робот не закрывает (стрелочки о закрытии лонга нет), а тест показывает, что должно быть закрытие.
Ребята в комментах источника отписались о проблеме. Правда там про гэпы идет речь, но думаю на меньших тайм фреймах так же пояляляется данная проблема.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Ср Окт 19, 2016 2:11 pm Ответить с цитатой Вернуться к началу

Давай конкретную дату и время. Посмотрю почему не сработал выход.

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



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

СообщениеДобавлено: Ср Окт 19, 2016 3:41 pm Ответить с цитатой Вернуться к началу

000 писал(а):
Давай конкретную дату и время. Посмотрю почему не сработал выход.

смотрим 12 октября. в 16-00 был шорт. в 19-30 вышли в кеш. Все ок.


в 21-30 по 580 лонг, все хорошо. Но на следующей свече выхода нет хотя есть пересечение вниз средней линии. Но...по сделкам тестера видно что на последнем получасе когда система шортила, выход из лонга сделан по цене которая была на той свече (фиолетовым обвел). И шорт уже по правильной цене.

На той свече в 21-29 есть прокол наверх для лонга но и есть прокол средней линии для закрытия лонга. ЧТо было первей не могу сказать. Но дело в том что в любом случае закрытия не происходит, но цена заопоминается)
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Ср Окт 19, 2016 3:58 pm Ответить с цитатой Вернуться к началу

Ну вот. Видишь как все просто. Смотрим обведенную фиолетовым свечкуи предыдущую и видим, что у обеих этих свечек Low ниже DonchianMiddle. В у нас в коде написано
Код:
Sell=Cross(DonchianMiddle, Low);

Это условие сработает если low был выше DonchianMiddle а потом стал ниже. Это в данном случае не соблюдается.
Измени
Код:
Sell=Cross(DonchianMiddle, Low);

на
Код:
Sell=DonchianMiddle > Low;

И всего делов.

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



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

СообщениеДобавлено: Ср Окт 19, 2016 4:11 pm Ответить с цитатой Вернуться к началу

000 писал(а):
Ну вот. Видишь как все просто. Смотрим обведенную фиолетовым свечкуи предыдущую и видим, что у обеих этих свечек Low ниже DonchianMiddle. В у нас в коде написано
Код:
Sell=Cross(DonchianMiddle, Low);

Это условие сработает если low был выше DonchianMiddle а потом стал ниже. Это в данном случае не соблюдается.
Измени
Код:
Sell=Cross(DonchianMiddle, Low);

на
Код:
Sell=DonchianMiddle > Low;

И всего делов.

Все супер с Sell! Спасибо!

тогда для cover по аналогии:
Код:
Cover=DonchianMiddle < High;

??


Последний раз редактировалось: Orange2000 (Ср Окт 19, 2016 4:50 pm), всего редактировалось 2 раз(а)
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

Разумеется.

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



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

СообщениеДобавлено: Ср Окт 19, 2016 4:51 pm Ответить с цитатой Вернуться к началу

А как быть с гепами? Допустим если сигнал в первую свечку торгов то Price берется не по линиям Дончана , а по клоуз свечи например, хотя это не правильно.
Нужно по реальному Open дня. А оно почему-то всегда равно примерно закрытию предыдущего!
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Ср Окт 19, 2016 5:35 pm Ответить с цитатой Вернуться к началу

В случае гепов надо вот так
Код:
BuyPrice=max(DonchianUpper, O);

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



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

СообщениеДобавлено: Ср Окт 19, 2016 6:37 pm Ответить с цитатой Вернуться к началу

000 писал(а):
В случае гепов надо вот так
Код:
BuyPrice=max(DonchianUpper, O);

нет эффекта
18ого утренний геп. В районе 98000 моно было войти. Тест показывает вход на 97600, это open первой свечи.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Ср Окт 19, 2016 6:58 pm Ответить с цитатой Вернуться к началу

На графике я гэпа не вижу. Открытие в районе 97600 и сделка по этой цене. Если в реале открытие было выше, то надо искать нормальные данные.

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



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

СообщениеДобавлено: Ср Окт 19, 2016 7:31 pm Ответить с цитатой Вернуться к началу

000 писал(а):
На графике я гэпа не вижу. Открытие в районе 97600 и сделка по этой цене. Если в реале открытие было выше, то надо искать нормальные данные.

там одна сделка прошла и сразу на 98000 улетели.

В настройках базы в intraday settings выставил начало сессии с 10:01. Но все равно показывает 97600 открытие.

как убрать первую минуту?

п.с. все нашел тут по поиску) спасибо теперь все супер гуд)
Посмотреть профиль Отправить личное сообщение
Orange2000



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

СообщениеДобавлено: Ср Окт 19, 2016 10:55 pm Ответить с цитатой Вернуться к началу

Олег, спрошу тут, косметический вопрос.

Есть такой код:
Код:
for( i = 0; i < BarCount; i++ )
{
if( Buy[i] ) PlotText( "Buy\n" + BuyPrice[ i ], i, L[ i ]-dist[i], colorGreen );
if( Short[i] ) PlotText( "Short\n" + ShortPrice[ i ], i, H[ i ]+dist[i], colorRed, colorYellow );
}


Пишет цену входа на графике по всем сделкам.
А как сделать, что бы писал цену входа только последней сделки?
Посмотреть профиль Отправить личное сообщение
Atlasraketa



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

СообщениеДобавлено: Вс Окт 30, 2016 1:29 am Ответить с цитатой Вернуться к началу

В приложение pattern explorer есть этот модуль и такой код:

procedure AddChannel(array1, array2, period, risk, shift, mode)
{
global ChannelHigh;
global ChannelMiddle;
global ChannelLow;
global SLLongWithoutFlip;
global SLShortWithoutFlip;
global SLTrend;
global SLLong;
global SLShort;
global SLUp;
global SLDn;
global SLLongTrigger;
global SLShortTrigger;
ChannelHigh =HHV(Ref(array1, Shift), period);
ChannelLow = LLV(Ref(array2, Shift), period);
ChannelMiddle = ChannelLow + (ChannelHigh - ChannelLow)/2;
SLUp = ChannelLow+Risk*(ChannelHigh-ChannelLow);
SLDn = ChannelHigh-Risk*(ChannelHigh-ChannelLow);
if(mode)
{
Up = Cross(H, Ref(SLDn, -1));
Up = Up OR H > Ref(SLDn, -1) AND Ref(H, -1) > Ref(SLDn, -1)AND NOT L < Ref(SLDn, -1);
Dn = Cross(Ref(SLup, -1), L);
Dn = Dn OR L < Ref(SLUp, -1) AND Ref(L, -1) < Ref(SLUp, -1)AND NOT H > Ref(SLUp, -1);
SLTrend = Flip(UP, DN);
}
else
SLTrend = Flip(Cross(C, Ref(SLDn, -1)), Cross(Ref(SLup, -1), C));

SLTrend = IIf(SLTrend > 0, 1, -1);
SLLong = IIf(SLTrend > 0, HighestSince(SLTrend > 0 AND Ref(SLTrend, -1) < 1, SLUp), Null);
SLShort = IIf(SLTrend < 1, LowestSince(SLTrend < 1 AND Ref(SLTrend, -1) > 0, SLDn), Null);
SLLongTrigger = SLTrend == 1 AND Ref(SLTrend, -1)==0;
SLShortTrigger = SLTrend == 0 AND Ref(SLTrend, -1) == 1;
}



Но его активации в настройках нету, хотел вручную написать аналогичное условие

Buy=Cross(High,ChannelHigh);
Short=Cross(ChannelLow,Low);
Sell=Cross(ChannelMiddle,Low);
Cover=Cross(High,ChannelMiddle);

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


PlotShapes(IIf(Buy, shapeSquare, shapeNone),colorGreen, 0, L, Offset=-25);
PlotShapes(IIf(Buy, shapeSquare, shapeNone),colorLime, 0,L, Offset=-35);
PlotShapes(IIf(Buy, shapeUpArrow, shapeNone),colorWhite, 0,L, Offset=-30);
PlotShapes(IIf(Short, shapeSquare, shapeNone),colorRed, 0, H, Offset=25);
PlotShapes(IIf(Short, shapeSquare, shapeNone),colorOrange, 0,H, Offset=35);
PlotShapes(IIf(Short, shapeDownArrow, shapeNone),colorWhite, 0,H, Offset=-30);
PlotShapes(IIf(Sell, shapeStar, shapeNone),colorGold, 0, L, Offset=-15);
PlotShapes(IIf(Cover, shapeStar, shapeNone),colorGold, 0,L, Offset=-15);


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


 Перейти:   



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


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

File Attachment © by Meik Sievertsen