![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
Dm_35 |
![]()
Сообщение
#21
|
Группа: Активный участник Сообщений: 8 Регистрация: 4.8.2007 Пользователь №: 1 432 Спасибо сказали: 0 раз(а) ![]() |
Привет.
В советник надо скопировать этот индикатор, и вызывать примерно так: If(TrendByWPR(1)>=0 && TrendByWPR(2)>=0 && ... ) OrderSend(Symbol(),OP_BUY...) и наоборот для селла. Но мне кажется что ещё рано для советника, разобраться бы почему на разных таймфреймах разные значения выдаёт. |
Dimi |
![]()
Сообщение
#22
|
![]() Группа: Активный участник Сообщений: 236 Регистрация: 12.4.2006 Пользователь №: 14 Спасибо сказали: 2 раз(а) ![]() |
Если я правильно понимаю код, то на каждом ТФ ищутся пички и донышки. И по ним уже определяеться трэнд. Логично, что на каждом ТФ в какой-то период будут различные трэнды. К примеру если на м15 трэнд вверх, а на Н4 трэнд в низ, то можно предположить, что на м15 идет коррекция либо перелом и зарождение нового трэнда вверх. В общем здесь надо экспериментировать с ним и использовать его в какой-то системе. Сам по себе этот индюк многого не скажет.
Глянь в личку. |
Dm_35 |
![]()
Сообщение
#23
|
Группа: Активный участник Сообщений: 8 Регистрация: 4.8.2007 Пользователь №: 1 432 Спасибо сказали: 0 раз(а) ![]() |
Привет.
Если поставить индикатор на М15 а потом поменять таймфрейм на М30 то результаты будут разные, а так по идеи быть не должно. |
leonid553 |
![]()
Сообщение
#24
|
![]() Группа: Активный участник Сообщений: 2 002 Регистрация: 14.4.2006 Из: г.Самара Пользователь №: 28 Спасибо сказали: 11 раз(а) ![]() |
Всем привет! У меня вот проблемы с инетом. Провайдер задним числом поднял тарифы в неск (!) раз без предупреждения. И соотв. счет прислал заоблачный! Меняю сейчас оператора. И редко (окольными путями) захожу в инет.
На MQL я выкладывал "кастрированный" вариант определителя тренда. ВОТ ОН: вставляем во внеш. параметры глобальные переменные //----------------------------------------------------- extern int PeriodWPR=8; extern double CriteriaWPR=25; extern int ATRPeriod=40;// период ATR для индикатора extern double kATR=0.5; //------------------------------------- int LastUpArray[13,7]; int PreLastUpArray[13,7]; int LastDownArray[13,7]; int PreLastDownArray[13,7]; Код ------------------------------------------------------------------------------------------- Далее вне функции int start() вставляем функцию //| определение тренда по четырем последним экстремумам | //+------------------------------------------------------------------+ int TrendByWPR() { //---- int res=0; int curPos,LastUpPos,PreLastUpPos,LastDownPos,PreLastDownPos,LastPeak,newPos; bool FindUp=true,FindDown=true,SearchCompleted=false; double CurWPR=iWPR(NULL,0,PeriodWPR,0); //---- //======= определим - где мы находимся в данный момент if (CurWPR<=CriteriaWPR-100) { FindDown=false; LastPeak=0; } if (CurWPR>=-CriteriaWPR) { FindUp=false; LastPeak=0; } // ================ начианем поиск пичков-донышков while(!SearchCompleted && curPos<Bars) { if (iWPR(NULL,0,PeriodWPR,curPos)>=-CriteriaWPR && LastPeak<0) { FindUp=false; LastPeak=curPos; curPos++; continue; } if (iWPR(NULL,0,PeriodWPR,curPos)<=CriteriaWPR-100 && LastPeak<0) { FindDown=false; LastPeak=curPos; curPos++; continue; } if (iWPR(NULL,0,PeriodWPR,curPos)>=-CriteriaWPR && FindUp) {//искали верхушку и нашли newPos=curPos; while(iWPR(NULL,0,PeriodWPR,curPos)>CriteriaWPR-100 && curPos<Bars) {// теперь нужно найти донышко, чтобы между ними найти точный пичок curPos++; } if (LastUpPos==0) { LastUpPos=Highest(NULL,0,MODE_HIGH,curPos-LastPeak,LastPeak); LastPeak=LastUpPos; } else { PreLastUpPos=Highest(NULL,0,MODE_HIGH,curPos-LastPeak,LastPeak); LastPeak=PreLastUpPos; } curPos=newPos; FindUp=false; FindDown=true; curPos++; continue; }//============== if (iWPR(NULL,0,PeriodWPR,curPos)<=CriteriaWPR-100 && FindDown) { newPos=curPos; while(iWPR(NULL,0,PeriodWPR,curPos)<-CriteriaWPR && curPos<Bars) { curPos++; } if (LastDownPos==0) { LastDownPos=Lowest(NULL,0,MODE_LOW,curPos-LastPeak,LastPeak); LastPeak=LastDownPos; } else { PreLastDownPos=Lowest(NULL,0,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[NULL,0] =LastUpPos; PreLastUpArray[NULL,0]=PreLastUpPos; LastDownArray[NULL,0]=LastDownPos; PreLastDownArray[NULL,0]=PreLastDownPos; if (High[LastUpPos]-High[PreLastUpPos]>=kATR*iATR(NULL,0,ATRPeriod,LastUpPos) &&Low[LastDownPos]>Low[PreLastDownPos]) res=1; if (Low[PreLastDownPos]-Low[LastDownPos]>=kATR*iATR(NULL,0,ATRPeriod,LastDownPos) &&High[PreLastUpPos]>High[LastUpPos]) res=-1; return(res); } ----------------------------------------------------------------------------------- Чтобы в углу на графике отображалась функция нужно внутри int start() вставить - Comment (TrendByWPR()); Тогда : TrendByWPR()=0 - нет тренда TrendByWPR()=1 -up-тренд TrendByWPR()=-1 - down-тренд Это всё расчитывается по одному тф, - на кот. мы ставим советник. Но если взять "не кастрированный" кусочек кода (с массивами), - то он расчитывает функцию сразу по нескольким тф и выдается суммарный вариант и отображается на графике в углу- по каждому тф ! Да и ещё отображает стрелками последние экстремумы. Эскизы прикрепленных изображений |
Dm_35 |
![]()
Сообщение
#25
|
Группа: Активный участник Сообщений: 8 Регистрация: 4.8.2007 Пользователь №: 1 432 Спасибо сказали: 0 раз(а) ![]() |
Привет.
Я на пред. станице выложил свою версию Вашей версии советника Роша ![]() |
leonid553 |
![]()
Сообщение
#26
|
![]() Группа: Активный участник Сообщений: 2 002 Регистрация: 14.4.2006 Из: г.Самара Пользователь №: 28 Спасибо сказали: 11 раз(а) ![]() |
Привет. Если поставить индикатор на М15 а потом поменять таймфрейм на М30 то результаты будут разные, а так по идеи быть не должно. Именно так и должно быть! На разных тф последние экстремумы (- пики и донышки) могут существенно отличаться! Особенно на тф - напр. М5 от Н4 Кроме того пики и донышки КОД определяет вдобавок ещё и по показаниям индюков iWPR и iATR. Тут уж вообще полный разнос! На М5 может быть тренд, а на Н1 - это всего лишь малый участок коррекции! А вообще то оч. неплохой индикатор получился! , Благодарю, Dm_35. Но вот в советнике его использовать надо как-то не просто, складывая или сравнивая нули и единички от разных тф. Тут, пожалуй, нужно подумать... |
Dm_35 |
![]()
Сообщение
#27
|
Группа: Активный участник Сообщений: 8 Регистрация: 4.8.2007 Пользователь №: 1 432 Спасибо сказали: 0 раз(а) ![]() |
Привет.
Это Вам спасибо за огромную работу, у меня была такая же мысль, но духу не хватило подступиться. Боюсь советник только на этом не будет прибыльным, не зря Рош ещё туда и индикатор вставил. |
Plastик |
![]()
Сообщение
#28
|
Группа: Активный участник Сообщений: 15 Регистрация: 25.10.2007 Пользователь №: 1 527 Спасибо сказали: 0 раз(а) ![]() |
double vol_long= (iClose(NULL,0,1)- iOpen(NULL,0,1))*10000; // белая свеча
double vol_short= (iOpen(NULL,0,1)- iClose(NULL,0,1))*10000; // темная свеча double vol = (iHigh(NULL,0,1)- iLow(NULL,0,1))*10000; Леонид! 1)А разве последняя 1 это не сдвиг на бар назад??? 2)И второй параметр 0, а не 1440? 3)умножение на 10000 на фуе не покатит что думаешь? |
leonid553 |
![]()
Сообщение
#29
|
![]() Группа: Активный участник Сообщений: 2 002 Регистрация: 14.4.2006 Из: г.Самара Пользователь №: 28 Спасибо сказали: 11 раз(а) ![]() |
Умножение как раз необходимо! Вот смотри :
Чтобы задать размер свечи в пунктах надо от хая отнять лоу, например - 2.0850 - 2.0750 = 0.0100 , умножаем на 10000 и получаем значение в пунктах - 100 пипсов ------------------------------------------------------------------------ Второй параметр - 0, для того чтобы можно было использовать эксперт не только на тф=Д, но и на любом другом. Т.е. эксперт будет работать на том графике(таймфрейме), на котором он стоит. ---------------------------------------------------------------------------- Последняя единичка - это предыдуший бар. Потому что текущий бар - пока еще не сформировался! Он только что открылся и вместо него (в момент открытия) пока точка стоит. Т.е. У ТЕКУЩЕГО БАРА В МОМЕНТ ОТКРЫТИЯ OPEN=CLOSE=HIGHT=LOW Точно! Для Фуя надо на 100 умножать! Или в СВОЙСТВАХ эксперта задавать BarSize_long =100; не 100 пипсов, а 1 |
Plastик |
![]()
Сообщение
#30
|
Группа: Активный участник Сообщений: 15 Регистрация: 25.10.2007 Пользователь №: 1 527 Спасибо сказали: 0 раз(а) ![]() |
Умножение как раз необходимо! Вот смотри : Чтобы задать размер свечи в пунктах надо от хая отнять лоу, например - 2.0850 - 2.0750 = 0.0100 , умножаем на 10000 и получаем значение в пунктах - 100 пипсов ------------------------------------------------------------------------ Второй параметр - 0, для того чтобы можно было использовать эксперт не только на тф=Д, но и на любом другом. Т.е. эксперт будет работать на том графике(таймфрейме), на котором он стоит. ---------------------------------------------------------------------------- Последняя единичка - это предыдуший бар. Потому что текущий бар - пока еще не сформировался! Он только что открылся и вместо него (в момент открытия) пока точка стоит. Т.е. У ТЕКУЩЕГО БАРА В МОМЕНТ ОТКРЫТИЯ OPEN=CLOSE=HIGHT=LOW Ну так а нам то надо параметры текущего дневного бара. Нафиг нам прошлый то про умножение на 10000 я не спорю - у всех кто 4 цифры после запятой - а вот у кого 2 - не пойдет! Для расчета данных НЕ нужен другой ТФ - строго запрещен!!! другой ТФ. Он должен БРАТЬ данные только за день потому, что значит будет работать на другом ТФ? ИМХО при таких параметрах он и данные будет брать НЕ с дневной текущей свечи, а это не правильно! Сообщение отредактировал Plastик - 2.11.2007, 14:19 |
![]() ![]() |
![]() |
Текстовая версия | Сейчас: 13.3.2025, 17:03 |