Здравствуйте, гость ( Вход | Регистрация )

5 страниц V < 1 2 3 4 5 >  
Ответить в эту темуОткрыть новую тему
> Определение тренда, Определяем тренд по эксперту ProtoType-IX
Dm_35
сообщение 28.10.2007, 17:37
Сообщение #21





Группа: Активный участник
Сообщений: 8
Регистрация: 4.8.2007
Пользователь №: 1 432
Спасибо сказали: 0 раз(а)



Привет.
В советник надо скопировать этот индикатор, и вызывать примерно так: If(TrendByWPR(1)>=0 && TrendByWPR(2)>=0 && ... ) OrderSend(Symbol(),OP_BUY...) и наоборот для селла.
Но мне кажется что ещё рано для советника, разобраться бы почему на разных таймфреймах разные значения выдаёт.
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Dimi
сообщение 28.10.2007, 19:16
Сообщение #22





Группа: Активный участник
Сообщений: 236
Регистрация: 12.4.2006
Пользователь №: 14
Спасибо сказали: 2 раз(а)



Если я правильно понимаю код, то на каждом ТФ ищутся пички и донышки. И по ним уже определяеться трэнд. Логично, что на каждом ТФ в какой-то период будут различные трэнды. К примеру если на м15 трэнд вверх, а на Н4 трэнд в низ, то можно предположить, что на м15 идет коррекция либо перелом и зарождение нового трэнда вверх. В общем здесь надо экспериментировать с ним и использовать его в какой-то системе. Сам по себе этот индюк многого не скажет.

Глянь в личку.
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Dm_35
сообщение 28.10.2007, 23:27
Сообщение #23





Группа: Активный участник
Сообщений: 8
Регистрация: 4.8.2007
Пользователь №: 1 432
Спасибо сказали: 0 раз(а)



Привет.
Если поставить индикатор на М15 а потом поменять таймфрейм на М30 то результаты будут разные, а так по идеи быть не должно.
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
leonid553
сообщение 29.10.2007, 11:02
Сообщение #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
сообщение 29.10.2007, 11:55
Сообщение #25





Группа: Активный участник
Сообщений: 8
Регистрация: 4.8.2007
Пользователь №: 1 432
Спасибо сказали: 0 раз(а)



Привет.
Я на пред. станице выложил свою версию Вашей версии советника Роша smile.gif, посмотрите, если не трудно, там не суммарный вариант, а разбивка по таймфреймам и с этим как раз проблема т.к. по идеи не зависимо от таймфрейма где установлен индюк, тренд должен показываться одинаково, но этого почему-то не происходит.
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
leonid553
сообщение 29.10.2007, 17:16
Сообщение #26





Группа: Активный участник
Сообщений: 2 002
Регистрация: 14.4.2006
Из: г.Самара
Пользователь №: 28
Спасибо сказали: 11 раз(а)



Цитата(Dm_35 @ 28.10.2007, 23:27) *

Привет.
Если поставить индикатор на М15 а потом поменять таймфрейм на М30 то результаты будут разные, а так по идеи быть не должно.

Именно так и должно быть! На разных тф последние экстремумы (- пики и донышки) могут существенно отличаться! Особенно на тф - напр. М5 от Н4
Кроме того пики и донышки КОД определяет вдобавок ещё и по показаниям индюков iWPR и iATR. Тут уж вообще полный разнос! На М5 может быть тренд, а на Н1 - это всего лишь малый участок коррекции!

А вообще то оч. неплохой индикатор получился! , Благодарю, Dm_35.
Но вот в советнике его использовать надо как-то не просто, складывая или сравнивая нули и единички от разных тф. Тут, пожалуй, нужно подумать...
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Dm_35
сообщение 29.10.2007, 23:29
Сообщение #27





Группа: Активный участник
Сообщений: 8
Регистрация: 4.8.2007
Пользователь №: 1 432
Спасибо сказали: 0 раз(а)



Привет.
Это Вам спасибо за огромную работу, у меня была такая же мысль, но духу не хватило подступиться.
Боюсь советник только на этом не будет прибыльным, не зря Рош ещё туда и индикатор вставил.
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Plastик
сообщение 2.11.2007, 13:50
Сообщение #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
сообщение 2.11.2007, 14:14
Сообщение #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ик
сообщение 2.11.2007, 14:14
Сообщение #30





Группа: Активный участник
Сообщений: 15
Регистрация: 25.10.2007
Пользователь №: 1 527
Спасибо сказали: 0 раз(а)



Цитата(leonid553 @ 2.11.2007, 17:07) *

Умножение как раз необходимо! Вот смотри :
Чтобы задать размер свечи в пунктах надо от хая отнять лоу, например -
2.0850 - 2.0750 = 0.0100 , умножаем на 10000 и получаем значение в пунктах - 100 пипсов
------------------------------------------------------------------------
Второй параметр - 0, для того чтобы можно было использовать эксперт не только на тф=Д, но и на любом другом.
Т.е. эксперт будет работать на том графике(таймфрейме), на котором он стоит.
----------------------------------------------------------------------------
Последняя единичка - это предыдуший бар. Потому что текущий бар - пока еще не сформировался! Он только что открылся и вместо него (в момент открытия) пока точка стоит.
Т.е. У ТЕКУЩЕГО БАРА В МОМЕНТ ОТКРЫТИЯ
OPEN=CLOSE=HIGHT=LOW

Ну так а нам то надо параметры текущего дневного бара. Нафиг нам прошлый то

про умножение на 10000 я не спорю - у всех кто 4 цифры после запятой - а вот у кого 2 - не пойдет!

Для расчета данных НЕ нужен другой ТФ - строго запрещен!!! другой ТФ. Он должен БРАТЬ данные только за день потому, что значит будет работать на другом ТФ? ИМХО при таких параметрах он и данные будет брать НЕ с дневной текущей свечи, а это не правильно!

Сообщение отредактировал Plastик - 2.11.2007, 14:19
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

5 страниц V < 1 2 3 4 5 >
Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия Сейчас: 28.3.2024, 10:06