Автор |
Сообщение |
Orange2000
Зарегистрирован: 15.10.2009
Сообщения: 185
|
Есть такая крутая система:
Код: |
//------------------------------------------------------
//
// 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
|
В коде написано все грамотно. Вход при пробое уровня. Разумеется в реале такую цену никак не поймать. Наиболее точно можно получить эту цену если заранее ставить ордер на пробой.
А как ты торговал эту систему? Там выход либо по сигналу либо по трейлингу. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Orange2000
Зарегистрирован: 15.10.2009
Сообщения: 185
|
000 писал(а): |
В коде написано все грамотно. Вход при пробое уровня. Разумеется в реале такую цену никак не поймать. Наиболее точно можно получить эту цену если заранее ставить ордер на пробой.
А как ты торговал эту систему? Там выход либо по сигналу либо по трейлингу. |
Привет Олег!
Трейлинг я убрал. Без него результаты даже лучше.
Параметр взял 5. 30 минутка РТС. Запихал в робота Ами-Альфадирект.
Согласен, что код четкий и понятный. Согласен что на проскальзывании будут другие входы. Но дело в том что часто было такое:
Система входит в лонг. Робот тоже. Потом происходит пересечение цены и средней линии и вроде должен лонг закрыть, но робот не закрывает (стрелочки о закрытии лонга нет), а тест показывает, что должно быть закрытие.
Ребята в комментах источника отписались о проблеме. Правда там про гэпы идет речь, но думаю на меньших тайм фреймах так же пояляляется данная проблема. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Давай конкретную дату и время. Посмотрю почему не сработал выход. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Orange2000
Зарегистрирован: 15.10.2009
Сообщения: 185
|
000 писал(а): |
Давай конкретную дату и время. Посмотрю почему не сработал выход. |
смотрим 12 октября. в 16-00 был шорт. в 19-30 вышли в кеш. Все ок.
в 21-30 по 580 лонг, все хорошо. Но на следующей свече выхода нет хотя есть пересечение вниз средней линии. Но...по сделкам тестера видно что на последнем получасе когда система шортила, выход из лонга сделан по цене которая была на той свече (фиолетовым обвел). И шорт уже по правильной цене.
На той свече в 21-29 есть прокол наверх для лонга но и есть прокол средней линии для закрытия лонга. ЧТо было первей не могу сказать. Но дело в том что в любом случае закрытия не происходит, но цена заопоминается) |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Ну вот. Видишь как все просто. Смотрим обведенную фиолетовым свечкуи предыдущую и видим, что у обеих этих свечек 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
|
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
|
Разумеется. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Orange2000
Зарегистрирован: 15.10.2009
Сообщения: 185
|
А как быть с гепами? Допустим если сигнал в первую свечку торгов то Price берется не по линиям Дончана , а по клоуз свечи например, хотя это не правильно.
Нужно по реальному Open дня. А оно почему-то всегда равно примерно закрытию предыдущего! |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
В случае гепов надо вот так
Код: |
BuyPrice=max(DonchianUpper, O); |
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Orange2000
Зарегистрирован: 15.10.2009
Сообщения: 185
|
000 писал(а): |
В случае гепов надо вот так
Код: |
BuyPrice=max(DonchianUpper, O); |
|
нет эффекта
18ого утренний геп. В районе 98000 моно было войти. Тест показывает вход на 97600, это open первой свечи. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
На графике я гэпа не вижу. Открытие в районе 97600 и сделка по этой цене. Если в реале открытие было выше, то надо искать нормальные данные. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Orange2000
Зарегистрирован: 15.10.2009
Сообщения: 185
|
000 писал(а): |
На графике я гэпа не вижу. Открытие в районе 97600 и сделка по этой цене. Если в реале открытие было выше, то надо искать нормальные данные. |
там одна сделка прошла и сразу на 98000 улетели.
В настройках базы в intraday settings выставил начало сессии с 10:01. Но все равно показывает 97600 открытие.
как убрать первую минуту?
п.с. все нашел тут по поиску) спасибо теперь все супер гуд) |
|
|
Посмотреть профиль Отправить личное сообщение |
|
Orange2000
Зарегистрирован: 15.10.2009
Сообщения: 185
|
Олег, спрошу тут, косметический вопрос.
Есть такой код:
Код: |
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
|
В приложение 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);
Ошибок не пишет, но и сигналы входа не печатает. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
|
|
Следующая тема
Предыдущая тема
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете вкладывать файлы Вы не можете скачивать файлы
|
|