Мультитаймфреймовые индикаторы - страница 108

 

mtf склон

смотри здесь alpha24seven

https://www.mql5.com/en/forum/173574

 

Спасибо Lodol2

Извините, что я их пропустил. Спасибо, что обратили на них мое внимание.

У меня были некоторые проблемы с компиляцией. Я никогда не видел этой ошибки раньше. Есть идеи?

См. график

Спасибо.

Файлы:
 

я согласен со всем, что вы сказали, но мне кажется, что я недостаточно ясно выразился.

формула кериса не выглядит так в реальном времени (без обновления графиков!), она больше похожа на эту желтую линию; если обновить графики, то да, все выглядит хорошо - но тогда почему бы нам просто не использовать второй график с более высоким таймфреймом... и подтвердить, что индикатор движется только на более высоком таймфрейме?

С того момента, как вы построили индикатор mtf на более низком таймфрейме, у вас есть другой способ усреднения данных на этом таймфрейме (а не на более высоком). Это никогда не будет выглядеть как оригинал - но это можно приблизить. вопрос в том, как найти лучшую формулу для наиболее близкого приближения? и я думаю, это ответ на ваш вопрос... верно?

mladen:
Красная линия - это приближение к МА, которую вы предлагаете.

Пурпурная линия - это способ Кериса для MTF MA.

Золотая линия - реальные значения MA более высокого таймфрейма на более низком таймфрейме.

Как вы можете видеть, едва ли найдется хоть одно правильное значение аппроксимированной за период времени, в то время как формула Кериса дает по крайней мере одно правильное значение за период. В любом случае, формула для аппроксимации в Metatrader будет выглядеть следующим образом:

MAperiod=MAperiod*TimeFrame/Period()

Если вы попытаетесь применить это приближение к производным индикаторам скользящей средней (например, MACD), вы получите большие, и я имею в виду большие различия (я видел разницу в 7-8% для 4H MACD на 1H таймфрейме).

Встречный вопрос: как вы думаете, сколько людей пробовали различные подходы к индикаторам на нескольких таймфреймах?
 

Ошибка в коде

Я разобрался. Этот лишний код был оставлен в файле - в конце. Просто удалите его, скомпилируйте и вуаля.

Отличный индикатор BTW.

---

/*

void drawLine(double lvl,string name, color Col )

{

ObjectDelete(name);

ObjectCreate(name, OBJ_HLINE, WindowFind(name), Time[0], lvl,Time[0], lvl);

ObjectSet(name, OBJPROP_STYLE, STYLE_DOT);

ObjectSet(name, OBJPROP_COLOR, Col);

ObjectSet(name,OBJPROP_WIDTH,1);

}

---

 

...

Желтая линия - это "реальная MTF" скользящая средняя.

Нет необходимости "обновлять" любой из индикаторов на картинке.

Что касается остального, пожалуйста, прочитайте этот пост еще раз.

с уважением

mladen

Scrat:
Я согласен со всем, что вы сказали, но мне кажется, что я недостаточно ясно выразился.

формула keris не выглядит так в реальном времени (без обновления графиков!), она больше похожа на эту желтую линию; если обновить графики, то да, все выглядит нормально - но тогда почему бы нам просто не использовать второй график с более высоким таймфреймом... и подтвердить, что индикатор движется только на более высоком таймфрейме?

с того момента, как вы построили индикатор mtf на более низком таймфрейме, у вас есть другой способ усреднения некоторых данных на этом таймфрейме (а не на более высоком). он никогда не будет выглядеть как оригинал - но его можно приблизить. вопрос в том, как найти лучшую формулу для наиболее близкого приближения? и я думаю, это ответ на ваш вопрос... верно?
 

Нужен Mtf для этой инди

Привет всем,

Я давно хотел иметь возможность строить на своем графике индикаторы с разных таймфреймов

//+------------------------------------------------------------------+

//| Fisher_m11.mq4 || Fisher_m11.mq4.

//| Copyright ฉ forexjr

//| Index of /cam06/fisher | //| Copyright ฉ forexjr.

//+------------------------------------------------------------------+

#property copyright "Copyright ฉ 23.07.2006 MartinG "

#property link "http://home.arcor.de/cam06/fisher"

#property indicator_separate_window

//#property indicator_minimum -1

//#property indicator_maximum 1

#property indicator_buffers 3

#property indicator_color2 RoyalBlue

#property indicator_color3 Red

#property indicator_width2 0.5

#property indicator_width3 0.5

int LeftNum1=56;

int LeftNum2=56;

extern int RangePeriods=35;

extern double PriceSmoothing=0.3; // =0.67 bei Fisher_m10

extern double IndexSmoothing=0.3; // =0.50 bei Fisher_m10

string ThisName="Fisher_kuskus";

int DrawStart;

//---- буферы

double ExtMapBuffer1[];

double ExtMapBuffer2[];

double ExtMapBuffer3[];

double ExtMapBuffer4[];

//+------------------------------------------------------------------+

//| Пользовательская функция инициализации индикатора |

//+------------------------------------------------------------------+

int init()

{

//---- индикаторы

IndicatorBuffers(4);

SetIndexLabel(0, "Star");

SetIndexStyle(0,DRAW_NONE);

SetIndexBuffer(0,ExtMapBuffer1);

SetIndexStyle(1,DRAW_HISTOGRAM);

SetIndexBuffer(1,ExtMapBuffer2);

SetIndexStyle(2,DRAW_HISTOGRAM);

SetIndexBuffer(2,ExtMapBuffer3);

SetIndexStyle(3,DRAW_NONE);

SetIndexBuffer(3,ExtMapBuffer4);

string Text=ThisName;

Text=Text+" (rPeriods "+RangePeriods;

Text=Text+"", pSmooth "+DoubleToStr(PriceSmoothing,2);

Text=Text+"", iSmooth "+DoubleToStr(IndexSmoothing,2);

Text=Text+"") ";

IndicatorShortName(Text);

SetIndexLabel(1,NULL);

SetIndexLabel(2,NULL);

DrawStart=2*RangePeriods+4; // DrawStart=Номер бара, рассчитанный слева направо

SetIndexDrawBegin(1,DrawStart);

SetIndexDrawBegin(2,DrawStart);

if (PriceSmoothing>=1.0)

{

PriceSmoothing=0.9999;

Alert("Fish61: Коэффициент PriceSmothing должен быть меньше 1!");

}

if (PriceSmoothing<0)

{

PriceSmoothing=0;

Alert("Fish61: Фактор PriceSmothing не должен быть отрицательным!");

}

if (IndexSmoothing>=1.0)

{

IndexSmoothing=0.9999;

Alert("Fish61: Коэффициент PriceSmothing должен быть меньше 1!");

}

if (IndexSmoothing<0)

{

IndexSmoothing=0;

Alert("Fish61: PriceSmothing factor mustn''t be negative!");

}

//----

return(0);

}

//+------------------------------------------------------------------+

//| Пользовательская функция деинициализации индикатора |

//+------------------------------------------------------------------+

int deinit()

{

//----

//----

return(0);

}

//+------------------------------------------------------------------+

//| Пользовательская функция итерации индикатора |

//+------------------------------------------------------------------+

int start()

{

if (Bars<DrawStart)

{

Alert("Fish84: Недостаточно баров загружено для расчета FisherIndicator с RangePeriods=",RangePeriods);

return(-1);

}

//----

int counted_bars=IndicatorCounted();

if (counted_bars<0) return(-1);

if (counted_bars>0) counted_bars--;

//----

int Position=Bars-counted_bars; // Position = BarPosition, рассчитанная справа налево

int LeftNum1=Bars-Position; // когда загружается больше баров, позиция бара меняется, но не его LeftNum

if (LeftNum1<RangePeriods+1)Position=Bars-RangePeriods-1;

while(Position>=0)

{

CalculateCurrentBar(Position);

Position-;

}

//----

return(0);

}

//+------------------------------------------------------------------+

//| Функция расчета одного бара |

//+------------------------------------------------------------------+

int CalculateCurrentBar(int pos)

{

double LowestLow, HighestHigh, GreatestRange, MidPrice;

double PriceLocation, SmoothedLocation, FishIndex, SmoothedFish;

//----

LowestLow = Low[Lowest(NULL,0,MODE_LOW,RangePeriods,pos)];

HighestHigh = High;

if (HighestHigh-LowestLow<0.1*Point)HighestHigh=LowestLow+0.1*Point;

GreatestRange=HighestHigh-LowestLow;

MidPrice = (High[pos]+Low[pos])/2;

// Расположение цены в текущем диапазоне

if (GreatestRange!=0)

{

PriceLocation=(MidPrice-LowestLow)/GreatestRange;

PriceLocation= 2.0*PriceLocation - 1.0; // -> -1 < PriceLocation < +1

}

// Сглаживание PriceLocation

ExtMapBuffer4[pos]=PriceSmoothing*ExtMapBuffer4[pos+1]+(1.0-PriceSmoothing)*PriceLocation;

SmoothedLocation=ExtMapBuffer4[pos];

if (SmoothedLocation> 0.99) SmoothedLocation= 0.99; // verhindert, dass MathLog unendlich wird

if (SmoothedLocation<-0.99) SmoothedLocation=-0.99; // verhindert, dass MathLog minuns unendlich wird

// FisherIndex

if(1-SmoothedLocation!=0) FishIndex=MathLog((1+SmoothedLocation)/(1-SmoothedLocation));

else Alert("Fisher129: Unerlaubter Zustand bei Bar Nummer ",Bars-pos);

// Сглаживание индекса FisherIndex

ExtMapBuffer1[pos]=IndexSmoothing*ExtMapBuffer1[pos+1]+(1.0-IndexSmoothing)*FishIndex;

если (Bars-pos<DrawStart)ExtMapBuffer1[pos]=0;

SmoothedFish=ExtMapBuffer1[pos];

if (SmoothedFish>0) // восходящий тренд

{

ExtMapBuffer2[pos]=SmoothedFish;

ExtMapBuffer3[pos]=0;

}

else // тренд вниз

{

ExtMapBuffer2[pos]=0;

ExtMapBuffer3[pos]=SmoothedFish;

}

//----

return(0);

}

//+------------------------------------------------------------------+

спасибо

 
mladen:
Народ, давайте посерьезнее

Я серьезно, Младен...

Я новичок и не программист, может быть, способ Скрата не идеален, но, возможно, я смогу его использовать. Я попробую. Если это полезно, я буду использовать это. Если нет, я буду искать другой отличный способ или другой индикатор.

Я уже спрашивал Codersguru о подобном.

Я спросил его, что если я использую 1 EMA на 30M TF, то на 1M TF это должно быть 30 EMA.

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

BTW, спасибо за последний RSIOMA mladen, он мне очень нравится, и спасибо fxbs и Kalenzo тоже, за этот замечательный индикатор.

С уважением,

IIN

 

Проблема заключается в следующем:

Эта идея с МА - вероятно, самая старая идея в техническом анализе.

Я согласен, что такие места, как TSD - это место для обмена идеями и знаниями.

Но, пожалуйста, никто не должен пытаться делать это таким образом:

Мне просто интересно, думал ли кто-нибудь из вас когда-нибудь сделать соответствие между одним и тем же индикатором на более высоком и на более низком тф в одно и то же время....

Да ладно, какого черта мы вообще пытаемся здесь сделать?

Надеюсь, теперь я понятно объяснил.

с уважением

mladen

iinzall:
Я серьезно, mladen...

Я новичок и не программист, может быть способ Скрата не идеален, но может быть я смогу его использовать. Я попробую. Если это полезно, я буду использовать его. Если нет, я буду искать другой отличный способ или другой индикатор.

Я уже спрашивал Codersguru о подобном.

Я спросил его, что если я использую 1 EMA на 30M TF, то на 1M TF это должно быть 30 EMA.

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

BTW, спасибо за последний RSIOMA mladen, он мне очень нравится, и спасибо fxbs и Kalenzo тоже, за этот замечательный индикатор.

С уважением,

IIN
 

Ладно, я официально тупой и только что оскорбил всех в этой теме. на этот раз я правильно понял?

Мои извинения.

mladen:
Проблема в следующем:

Эта идея с MA's, вероятно, самая старая идея в техническом анализе.

Я согласен, что такие места, как TSD - это место для обмена идеями и знаниями.

Но, пожалуйста, никто не должен пытаться делать это таким образом:

Да ладно, какого черта мы вообще пытаемся здесь делать?

Надеюсь, что теперь я ясно выразился

с уважением

mladen
 

Кто-нибудь знает, где находятся эти MTF инди?

Я везде искал MTF-версии. Кто-нибудь знает или видел их?

Спасибо.

Файлы: