Помощь в кодировании - страница 689

 

Привет, Младен,

Я хочу сделать некоторый анализ сходства в данных Форекс.

То есть, я хочу найти наиболее коррелирующий часовой бар (то же или наиболее похожее значение в OHLC) с ПОСЛЕДНИМ часовым баром (OHLC) в истории 20.000 баров (OHLC).

Достаточно ли коэф. корреляции Пирсона для определения сходства значений последнего бара в истории 20.000 баров? Возможно ли провести этот анализ в метатрейдере с помощью скрипта (или советника)? Спасибо.

 

дорогой младе:

я сделал свой первый индикатор MTF

но цвет черный

как это исправить?

большое спасибо

Файлы:
MTF xb4d.mq4  4 kb
xb4d.mq4  4 kb
 
bilbao:

дорогой младе:

я сделал свой первый индикатор MTF

но цвет черный

как это исправить?

большое спасибо

Установите #свойство indicator_color1 на желаемый цвет (сейчас он установлен на Black)
 
nevar:

Привет, Младен,

Я хочу сделать некоторый анализ сходства в данных Форекс.

То есть, я хочу найти наиболее коррелирующий часовой бар (то же или наиболее похожее значение в OHLC) с ПОСЛЕДНИМ часовым баром (OHLC) в истории 20.000 баров (OHLC).

Достаточно ли коэф. корреляции Пирсона для определения сходства значений последнего бара в истории 20.000 баров? Возможно ли провести этот анализ в метатрейдере с помощью скрипта (или советника)? Спасибо.

Младен,

Есть какие-нибудь комментарии по этому поводу?

 
nevar:

Младен,

Какие-нибудь комментарии по этому поводу?

Вы можете сделать это с помощью Pearson и просто найти бар с максимальным значением Pearson - вы можете сделать это для любого таймфрейма и любого количества баров, так как Pearson не нагружает процессор. Однако лучше всего делать это из индикатора (чтобы избежать некоторых операций с массивами).
 
mladen:
Установите #property indicator_color1 на желаемый цвет (сейчас он установлен на Black)

Мистер Младен:

Я делаю это, но у меня только один цвет

Мне нужно два цвета для бычьего и медвежьего рынка

 
bilbao:

Мистер Младен:

Я делаю это, но у меня только один цвет

Мне нужно два цвета для бычьего и медвежьего рынка

Тогда вы должны закодировать это по-другому (вы должны использовать два буфера, а не один для двухцветной гистограммы).
 
mladen:
Тогда вы должны закодировать его по-другому (вы должны использовать два буфера, а не один для двухцветной гистограммы)

правильно ли это, сэр?

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

//| MTF_xb4d.mq4 |

//|------------------------------------------------------------------+


#property indicator_separate_window

#property indicator_buffers 2

#property indicator_color1 LimeGreen

#property indicator_width1 2

#property indicator_color2 PaleVioletRed

#property indicator_width2 2

//---- входные параметры

/*************************************************************************

PERIOD_M1 1

PERIOD_M5 5

PERIOD_M15 15

PERIOD_M30 30

PERIOD_H1 60

PERIOD_H4 240

PERIOD_D1 1440

ПЕРИОД_W1 10080

ПЕРИОД_МН1 43200

Вы должны использовать числовое значение таймфрейма, который вы хотите использовать

когда вы устанавливаете значение TimeFrame' с помощью входов индикатора.

---------------------------------------*/

extern int TimeFrame=0;

extern int period = 10;

extern int AppliedPrice=0;

extern bool SoundAlerts=false;

double ExtMapBuffer1[];

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

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

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

int init()

{

//---- линия индикатора

SetIndexStyle(0, DRAW_HISTOGRAM);

SetIndexStyle(1, DRAW_HISTOGRAM);

SetIndexBuffer(0, ExtMapBuffer1);

SetIndexBuffer(1, ExtMapBuffer1);

//---- имя для DataWindow и метки подокна индикатора

switch(TimeFrame)

{

case 1 : string TimeFrameStr="Period_M1"; break;

case 5 : TimeFrameStr="Period_M5"; break;

case 15 : TimeFrameStr="Period_M15"; break;

case 30 : TimeFrameStr="Period_M30"; break;

case 60 : TimeFrameStr="Period_H1"; break;

case 240 : TimeFrameStr="Period_H4"; break;

case 1440 : TimeFrameStr="Period_D1"; break;

case 10080 : TimeFrameStr="Period_W1"; break;

case 43200 : TimeFrameStr="Period_MN1"; break;

default : TimeFrameStr="Текущий таймфрейм";

}

IndicatorShortName(" MTF_xb4d ("+TimeFrameStr+" ) ");

return(0);

}

//----

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

//| |

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

int start()

{

datetime TimeArray[];

int i,limit,y=0,counted_bars=IndicatorCounted();

// Накладываем определенный временной интервал на текущий временной интервал

ArrayCopySeries(TimeArray,MODE_TIME,Symbol(),TimeFrame);

limit= Bars-1;

for(i=0,y=0;i<limit;i++)

{

if (Time[i]<TimeArray[y]) y++;

/***********************************************************

Добавьте свой основной цикл индикатора ниже. Вы можете ссылаться на существующий

индикатор с помощью его iName или iCustom.

Правило 1: Добавьте внешние входы выше для всех необходимых значений.

Правило 2: Используйте 'TimeFrame' для таймфрейма индикатора

Правило 3: Используйте 'y' для значения сдвига вашего индикатора.

**********************************************************/

ExtMapBuffer1[i]=iCustom(Symbol(),TimeFrame, "xb4d",period,0,y);//iRSI(Symbol(),TimeFrame,period,AppliedPrice,y);

}

if(GlobalVariableGet(Symbol()+"previndicator")<0 && ExtMapBuffer1[0]>=0)

if(SoundAlerts){Alert("Buy Alert " + Symbol() + " [" + Period() + "] ");PlaySound("alert.wav");}

if(GlobalVariableGet(Symbol()+"previndicator")>=0 && ExtMapBuffer1[0]<0)

if(SoundAlerts){Alert("Sell Alert " + Symbol() + " [" + Period() + "] ");PlaySound("alert.wav");}

GlobalVariableSet(Symbol()+"previndicator",ExtMapBuffer1[0]);

return(0);

}

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

 
bilbao:

правильно ли это, сэр?

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

//| MTF_xb4d.mq4 |

//|------------------------------------------------------------------+


#property indicator_separate_window

#property indicator_buffers 2

#property indicator_color1 LimeGreen

#property indicator_width1 2

#property indicator_color2 PaleVioletRed

#property indicator_width2 2

//---- входные параметры

/*************************************************************************

PERIOD_M1 1

PERIOD_M5 5

PERIOD_M15 15

PERIOD_M30 30

PERIOD_H1 60

PERIOD_H4 240

PERIOD_D1 1440

ПЕРИОД_W1 10080

ПЕРИОД_МН1 43200

Вы должны использовать числовое значение таймфрейма, который вы хотите использовать

когда вы устанавливаете значение TimeFrame' с помощью входов индикатора.

---------------------------------------*/

extern int TimeFrame=0;

extern int period = 10;

extern int AppliedPrice=0;

extern bool SoundAlerts=false;

double ExtMapBuffer1[];

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

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

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

int init()

{

//---- линия индикатора

SetIndexStyle(0, DRAW_HISTOGRAM);

SetIndexStyle(1, DRAW_HISTOGRAM);

SetIndexBuffer(0, ExtMapBuffer1);

SetIndexBuffer(1, ExtMapBuffer1);

//---- имя для DataWindow и метки подокна индикатора

switch(TimeFrame)

{

case 1 : string TimeFrameStr="Period_M1"; break;

case 5 : TimeFrameStr="Period_M5"; break;

case 15 : TimeFrameStr="Period_M15"; break;

case 30 : TimeFrameStr="Period_M30"; break;

case 60 : TimeFrameStr="Period_H1"; break;

case 240 : TimeFrameStr="Period_H4"; break;

case 1440 : TimeFrameStr="Period_D1"; break;

case 10080 : TimeFrameStr="Period_W1"; break;

case 43200 : TimeFrameStr="Period_MN1"; break;

default : TimeFrameStr="Текущий таймфрейм";

}

IndicatorShortName(" MTF_xb4d ("+TimeFrameStr+" ) ");

return(0);

}

//----

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

//| |

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

int start()

{

datetime TimeArray[];

int i,limit,y=0,counted_bars=IndicatorCounted();

// Накладываем определенный временной интервал на текущий временной интервал

ArrayCopySeries(TimeArray,MODE_TIME,Symbol(),TimeFrame);

limit= Bars-1;

for(i=0,y=0;i<limit;i++)

{

if (Time[i]<TimeArray[y]) y++;

/***********************************************************

Добавьте свой основной цикл индикатора ниже. Вы можете ссылаться на существующий

индикатор с помощью его iName или iCustom.

Правило 1: Добавьте внешние входы выше для всех необходимых значений.

Правило 2: Используйте 'TimeFrame' для таймфрейма индикатора

Правило 3: Используйте 'y' для значения сдвига вашего индикатора.

**********************************************************/

ExtMapBuffer1[i]=iCustom(Symbol(),TimeFrame, "xb4d",period,0,y);//iRSI(Symbol(),TimeFrame,period,AppliedPrice,y);

}

if(GlobalVariableGet(Symbol()+"previndicator")<0 && ExtMapBuffer1[0]>=0)

if(SoundAlerts){Alert("Buy Alert " + Symbol() + " [" + Period() + "] ");PlaySound("alert.wav");}

if(GlobalVariableGet(Symbol()+"previndicator")>=0 && ExtMapBuffer1[0]<0)

if(SoundAlerts){Alert("Sell Alert " + Symbol() + " [" + Period() + "] ");PlaySound("alert.wav");}

GlobalVariableSet(Symbol()+"previndicator",ExtMapBuffer1[0]);

return(0);

}

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

Отображает ли он цвета так, как вы хотели?
 
mladen:
Он показывает цвета так, как вы хотели?

дорогой Младен:

я нашел mtf на https://www.forex-tsd.com/forum/debates-discussions/1131-multi-timeframe-indicators/page762#comment_1831838

большое спасибо за вашу помощь всем членам клуба.

благослови вас бог

Причина обращения: