Здравствуйте, гость ( Вход | Регистрация )
| leonid553 |
6.10.2007, 12:21
Сообщение
#1
|
![]() Группа: Активный участник Сообщений: 2 002 Регистрация: 14.4.2006 Из: г.Самара Пользователь №: 28 Спасибо сказали: 11 раз(а) |
В мультивалютном советнике Rosh-a "ProtoType-IX" приведен пример определения тренда по четырем последним экстремумам. http://codebase.mql4.com/ru/1256
В аннотации указано: "Данный советник торговал без алгоритмических ошибок на чемпионате по автотрейдингу 2006 года. Требует для работы индикатор NRTR GATOR. Может являться примером мультивалютного эксперта и, надеюсь, облегчит написание такового новичкам в MQL4." Похоже пришла пора разобраться с ТРЕНДОМ, - как это делается. Хотя бы "методом тыка". Для примера можно взять любой простейший эксперт и использовать приемы определения тренда из советника "ProtoType-IX". (см. пост №2) Возьмем оттуда всё, что касается тренда и вставим в любой простейший советник. В результате получим: Function "GetSymbolString" is not referenced and will be removed from exp-file Function "PeriodNumber" is not referenced and will be removed from exp-file Function "TrendByWPR" is not referenced and will be removed from exp-file Function "SetArrow" is not referenced and will be removed from exp-file Function "SetUpArrows" is not referenced and will be removed from exp-file Function "TrendExist" is not referenced and will be removed from exp-file Мы получили шесть функций, которые вычисляются, но пока не принимают участия в торговле нашего эксперта. Поскольку, наш эксперт пусть будет НЕ МУЛЬТИВАЛЮТНЫЙ, то первая функция нам неинтересна. Вторая функция, - пожалуй, тоже, т.к. она задает таймфрейм. Но оставим пока всё как есть. Начнем с самого начала. Во внешних нашего эксперта параметрах мы добавляем: Код extern int PeriodWPR=8; extern double CriteriaWPR=25; extern int ATRPeriod=40;// период ATR для индикатора extern double kATR=0.5; extern int ZeroBar=8; // выход в безубыток через ZeroBar баров extern double MinTargetinSpread=5.0; extern double TP_SL_Criteria=2.0; extern int MaxOpenedOrders=3; extern double MaxOrderSize=5.0; Понятно что пока чего-то не хватает а что-то будет лишним. Надеюсь разберемся... Далее (после внешних параметров) задаем по аналогии глобальные переменные: Код int LastUpArray[13,7]; int PreLastUpArray[13,7]; int LastDownArray[13,7]; int PreLastDownArray[13,7]; double Complextrend[13,7];// собираем все тренды (Z,A и N тренды) в одно значение. double TPvsSL[13,7];// отношение TakeProfit к StopLoss на данном символе и таймфрейме int BestTPvsSLSymbol[20]; // лучшие символы по соотношению TP/SL int BestTPvsSLPeriod[20]; // лучшие таймфреймы по соотношению TP/SL //-------------------------------------------- string SymbolsArray[13]={"","USDCHF","GBPUSD","EURUSD","USDJPY","AUDUSD", "USDCAD","EURGBP","EURAUD","EURCHF","EURJPY","GBPJPY","GBPCHF"}; int TrendOnSymbol[13,7]; // тренд по символу и таймфрейму int MyBarsArrays[13,7];// храним количество баров по инструменту и таймфрейму int TimeNullArrays[13,7];// храним время Time[0] по инструменту и таймфрейму Не будем пока особо вникать. Посмотрим дальше... |
![]() ![]() |
| leonid553 |
7.10.2007, 16:21
Сообщение
#2
|
![]() Группа: Активный участник Сообщений: 2 002 Регистрация: 14.4.2006 Из: г.Самара Пользователь №: 28 Спасибо сказали: 11 раз(а) |
Продолжаем....
Код // ================ начинаем поиск пичков-донышков while(!SearchCompleted && curPos<Bars) { if (iWPR(StringSymbol,PeiodMinute,PeriodWPR,curPos)>=-CriteriaWPR && LastPeak<0) { FindUp=false; LastPeak=curPos; curPos++; continue; } if (iWPR(StringSymbol,PeiodMinute,PeriodWPR,curPos)<=CriteriaWPR-100 && LastPeak<0) { FindDown=false; LastPeak=curPos; curPos++; continue; } if (iWPR(StringSymbol,PeiodMinute,PeriodWPR,curPos)>=-CriteriaWPR && FindUp) {//искали верхушку и нашли newPos=curPos; while(iWPR(StringSymbol,PeiodMinute,PeriodWPR,curPos)>CriteriaWPR-100 && curPos<Bars) {// теперь нужно найти донышко, чтобы между ними найти точный пичок curPos++; } if (LastUpPos==0) { LastUpPos=Highest(StringSymbol,PeiodMinute,MODE_HIGH,curPos-LastPeak,LastPeak); LastPeak=LastUpPos; } else { PreLastUpPos=Highest(StringSymbol,PeiodMinute,MODE_HIGH,curPos-LastPeak,LastPeak); LastPeak=PreLastUpPos; } curPos=newPos; FindUp=false; FindDown=true; curPos++; continue; }//============== if (iWPR(StringSymbol,PeiodMinute,PeriodWPR,curPos)<=CriteriaWPR-100 && FindDown) { newPos=curPos; while(iWPR(StringSymbol,PeiodMinute,PeriodWPR,curPos)<-CriteriaWPR && curPos<Bars) { curPos++; } if (LastDownPos==0) { LastDownPos=Lowest(StringSymbol,PeiodMinute,MODE_LOW,curPos-LastPeak,LastPeak); LastPeak=LastDownPos; } else { PreLastDownPos=Lowest(StringSymbol,PeiodMinute,MODE_LOW,curPos-LastPeak,LastPeak); LastPeak=PreLastDownPos; } curPos=newPos; FindDown=false; FindUp=true; curPos++; continue; } if (PreLastDownPos!=0 && PreLastUpPos!=0) SearchCompleted=true; curPos++; } if (Symbol()==StringSymbol && Period()==PeiodMinute) { Comment("LastUpPos=",LastUpPos," PreLastUpPos",PreLastUpPos," LastDownPos=",LastDownPos," PreLastDownPos=",PreLastDownPos," Время ",TimeToStr(CurTime())); SetUpArrows(LastUpPos,PreLastUpPos,LastDownPos,PreLastDownPos); } LastUpArray[SymbolNumber,period_counter]=LastUpPos; PreLastUpArray[SymbolNumber,period_counter]=PreLastUpPos; LastDownArray[SymbolNumber,period_counter]=LastDownPos; PreLastDownArray[SymbolNumber,period_counter]=PreLastDownPos; if (High[LastUpPos]-High[PreLastUpPos]>=kATR*iATR(StringSymbol,PeiodMinute,ATRPeriod,LastUpPos)&&Low[LastDownPos]>Low[PreLastDownPos]) res=1; if (Low[PreLastDownPos]-Low[LastDownPos]>=kATR*iATR(StringSymbol,PeiodMinute,ATRPeriod,LastDownPos)&&High[PreLastUpPos]>High[LastUpPos]) res=-1; return(res); } Действительно, этот алгоритм определяет наличие "пичков и донышек", перебирая последовательно бары с нулевого. Причем, ищет экстремумы в "зонах перекупленности/перепроданности", согласно показаниям индикатора WPR. Тут всё понятно... А также, задействует, неким образом, значения индикатора ATR с периодом=40 (по умолч) и коэффициент kATR=0.5; Каким образом?, - пока не стал вникать. Итак, мы нашли два "пичка" и два "донышка" ... |
| Moriarty |
7.10.2007, 17:54
Сообщение
#3
|
![]() Группа: Активный участник Сообщений: 19 Регистрация: 27.9.2007 Пользователь №: 1 488 Спасибо сказали: 0 раз(а) |
Продолжаем.... Действительно, этот алгоритм определяет наличие "пичков и донышек", перебирая последовательно бары с нулевого. Причем, ищет экстремумы в "зонах перекупленности/перепроданности", согласно показаниям индикатора WPR. Тут всё понятно... А также, задействует, неким образом, значения индикатора ATR с периодом=40 (по умолч) и коэффициент kATR=0.5; Каким образом?, - пока не стал вникать. Итак, мы нашли два "пичка" и два "донышка" ... Имхо всё черезчур усложнено. Все три последних функции можно описать всего лишь в нескольких строках. У Роша сделаны универсальные функции, нам же они не нужны. Да и с самого начала можно 70% кода убрать, а то опять будем тестить экспов сутками. Может я конечно и ошибаюсь, но попробую сейчас по быстрому написать код, определяющий пики/донышки по Т3 сглаженому ВПРу. А вообще, думаю не совсем правильно использовать ВПР для определения тренда. Есть масса других, менее затратных и более точных определений тренда... P.S. Сейчас попробую написать определение Hi/Low ВПРа. Далее, - отображаем найденные экстремумы на графике! К сожалению, картинка получится не совсем наглядной, т.к. из-за "дебильных" движений цены в прошедшую пятницу по этим экстремумам трудно сделать вывод о наличии или отсутствии тренда. Тем не менее, - алгоритм эксперта будет отображать стрелками найденные пички и донышке, - см. рис - А если подключить ещё и АТР, то косяков станет ещё меньше. P.S. Кстати, а зачем использовать чужой код (и пытаться понять его), если можно написать свой, ничуть не хуже и полностью понимаемый ??? Сообщение отредактировал Moriarty - 7.10.2007, 17:57 |
| leonid553 |
8.10.2007, 19:19
Сообщение
#4
|
![]() Группа: Активный участник Сообщений: 2 002 Регистрация: 14.4.2006 Из: г.Самара Пользователь №: 28 Спасибо сказали: 11 раз(а) |
Имхо всё черезчур усложнено. Все три последних функции можно описать всего лишь в нескольких строках. У Роша сделаны универсальные функции, нам же они не нужны. Да и с самого начала можно 70% кода убрать, а то опять будем тестить экспов сутками. Может я конечно и ошибаюсь, но попробую сейчас по быстрому написать код, определяющий пики/донышки по Т3 сглаженому ВПРу. А вообще, думаю не совсем правильно использовать ВПР для определения тренда. Есть масса других, менее затратных и более точных определений тренда... P.S. Сейчас попробую написать определение Hi/Low ВПРа. P.S. Кстати, а зачем использовать чужой код (и пытаться понять его), если можно написать свой, ничуть не хуже и полностью понимаемый ??? ************************************************************************** Я к сож. не могу пока в силу скромных знаний написать код, который удовлетворительно бы определял, - "тренд/не тренд" Всё время получается так, что на переломах тренда (даже если он программно определён) всегда получаются убыточные входы и соотв. лоси... |
leonid553 Определение тренда 6.10.2007, 12:21
leonid553 Прежде всего (как я уже говорил), возьмем простейш... 6.10.2007, 12:54
leonid553 С внешними параметрами и глобальными переменными м... 6.10.2007, 13:27
leonid553 Далее вне функции int start() вставляем начало фун... 6.10.2007, 18:40
Dimi Привет! Эта переменная походу нигде не участву... 7.10.2007, 13:57
leonid553 Да действительно! Эта переменная не задействов... 7.10.2007, 14:49
leonid553 Начинаем вникать в определение тренда по индикатор... 7.10.2007, 15:29
leonid553 Далее, - отображаем найденные экстремумы на график... 7.10.2007, 17:02
leonid553 Здесь немного остановимся! Вот сейчас обнаружи... 7.10.2007, 17:58
Moriarty
Хитрый Rosh вызывает его в эксперте, как "NR... 7.10.2007, 18:07
Moriarty Вот что у меня получилось с определением пиков/дон... 8.10.2007, 12:40
leonid553 А у Роша действительно много лишнего.
Например, и... 8.10.2007, 19:33
Moriarty Вот сейчас наблюдаю за Вашим, Moriarty, индикаторо... 9.10.2007, 21:43
leonid553 В визуальном режиме видно, что советник ProtoType... 9.10.2007, 11:59
leonid553 Ок!
Вот ещё идея подошла! По граалям... Из... 10.10.2007, 6:15
Dm_35 Привет.
Очень интересная тема.
Чуть переделал код,... 27.10.2007, 12:22
Dimi
Привет.
Очень интересная тема.
Чуть переделал код... 28.10.2007, 13:55
Dm_35 Привет.
В советник надо скопировать этот индикатор... 28.10.2007, 17:37
Dimi Если я правильно понимаю код, то на каждом ТФ ищут... 28.10.2007, 19:16
Dm_35 Привет.
Если поставить индикатор на М15 а потом по... 28.10.2007, 23:27
leonid553
Привет.
Если поставить индикатор на М15 а потом п... 29.10.2007, 17:16
leonid553 Всем привет! У меня вот проблемы с инетом. Про... 29.10.2007, 11:02
Dm_35 Привет.
Я на пред. станице выложил свою версию Ваш... 29.10.2007, 11:55
Dm_35 Привет.
Это Вам спасибо за огромную работу, у меня... 29.10.2007, 23:29
Plastик double vol_long= (iClose(NULL,0,1)- iOpen(NULL,0,1... 2.11.2007, 13:50
leonid553 Умножение как раз необходимо! Вот смотри :
Что... 2.11.2007, 14:14
Plastик
Умножение как раз необходимо! Вот смотри :
Чт... 2.11.2007, 14:14
leonid553 Понял. Тогда надо определиться с моментом входа.
... 2.11.2007, 14:54
Plastик
Понял. Тогда надо определиться с моментом входа. ... 2.11.2007, 19:07
leonid553 Вот вроде - то что надо. Но коэф.=10000 пока остав... 2.11.2007, 17:36
leonid553 Похоже ещё надо добавить "блокировку". Ч... 2.11.2007, 18:04
Plastик А вот еще вариантец
2007.11.02 22:24:45 TestGenera... 2.11.2007, 19:26
leonid553
А вот еще вариантец
2007.11.02 22:24:45 TestGener... 2.11.2007, 19:55
leonid553 Ты, похоже, сам запутался! Как же я могу счита... 2.11.2007, 19:32
Plastик
Ты, похоже, сам запутался! Как же я могу счит... 2.11.2007, 22:21
leonid553 У тебя, видимо, нет котировок с разных тф на истор... 2.11.2007, 20:20
Plastик
У тебя, видимо, нет котировок с разных тф на исто... 2.11.2007, 22:55
Plastик Символ GBPUSD (Great Britan vs US Dollar)
Период ... 3.11.2007, 11:06
leonid553 Такой результат не проходит!
"Ошибки рас... 3.11.2007, 15:59
leonid553 Поймать тренд .... :)
B) 18.11.2007, 22:14
Dimi Привет всем! Тут вот интересный скрипт, не пом... 24.11.2007, 16:02
Dimi Вот мое первое творение, если можно так сказать ;... 2.12.2007, 11:32
Dimi Привет, всем!!! Вот индикатор для МТ4 ... 6.12.2007, 18:55![]() ![]() |
|
Текстовая версия | Сейчас: 13.3.2026, 2:43 |