Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Здравствуйте, пытаюсь переделать индикатор с mql4 в mql5. По сути мне лишь нужно, что бы срабатывало звуковое уведомление в MFI при появление красного бара. Как этот звуковой код теперь присобачить к новому mfi?
Пример старого рабочего варианта прикрепил:
Подскажите, как правильно, это расчёт Heiken Ashi
Это вырезка со стандартного
{
haOpen=(ExtOpenBuffer0[i-1]+ExtCloseBuffer0[i-1])/2; // <<<
haClose=(Open[i]+High[i]+Low[i]+Close[i])/4;
haHigh=MathMax(High[i],MathMax(haOpen,haClose));
haLow=MathMin(Low[i],MathMin(haOpen,haClose));
Возникает вопрос: если Open нужно искать по предыдущему бару, то почему в коде ищется по следующему?
Наверное правильно так, или Я что-то не так понимаю:
Подскажите, как правильно, это расчёт Heiken Ashi
Это вырезка со стандартного
{
haOpen=(ExtOpenBuffer0[i-1]+ExtCloseBuffer0[i-1])/2; // <<<
haClose=(Open[i]+High[i]+Low[i]+Close[i])/4;
haHigh=MathMax(High[i],MathMax(haOpen,haClose));
haLow=MathMin(Low[i],MathMin(haOpen,haClose));
Возникает вопрос: если Open нужно искать по предыдущему бару, то почему в коде ищется по следующему?
Наверное правильно так, или Я что-то не так понимаю:
Подскажите, как правильно, это расчёт Heiken Ashi
Это вырезка со стандартного
{
haOpen=(ExtOpenBuffer0[i-1]+ExtCloseBuffer0[i-1])/2; // <<<
haClose=(Open[i]+High[i]+Low[i]+Close[i])/4;
haHigh=MathMax(High[i],MathMax(haOpen,haClose));
haLow=MathMin(Low[i],MathMin(haOpen,haClose));
Возникает вопрос: если Open нужно искать по предыдущему бару, то почему в коде ищется по следующему?
Наверное правильно так, или Я что-то не так понимаю:
Чтобы точно видеть, какой индекс имеет самый правый и самый левый бар на графике используйте такой простой приём:
В любом индикаторе, в редакторе MetaEditor ставите точку останова на первой операции внутри OnCakculate() (шаг 1):
запускаете отладку на исторических данных. Как только запустится отладка на Вашей точке останова отладка станет на паузу. После этого добавьте в наблюдение две выражения: "time[rates_total-1]" и "time[0]" (шаги 2 и 3). Теперь сразу видно, что в данной ситуации (здесь массив time[] имеет направление индексации по-умолчанию, ArrayAsSeries не применялось) элемент time[rates_total-1] будет самым правым баром на графике (шаг 4).
Надеюсь такой простой и наглядный способ поможет быстро проверять направление индексации в индикаторах.
В mql5 сделано направление индексации баров по умолчанию. Поэтому [i-1] будет как раз первым баром справа.
Примерно понимаю, поэтому об использовании ArraySetAsSeries не забываю.
Вопрос состоит в том, что в коде как в mql4, так и mql5 применяется одинаковый расчёт "i-1", почему вычитание, если формула гласит о предыдущем баре, а не о будущем?
Чтобы точно видеть, какой индекс имеет самый правый и самый левый бар на графике используйте такой простой приём:
В любом индикаторе, в редакторе MetaEditor ставите точку останова на первой операции внутри OnCakculate() (шаг 1):
запускаете отладку на исторических данных. Как только запустится отладка на Вашей точке останова отладка станет на паузу. После этого добавьте в наблюдение две выражения: "time[rates_total-1]" и "time[0]" (шаги 2 и 3). Теперь сразу видно, что в данной ситуации (здесь массив time[] имеет направление индексации по-умолчанию, ArrayAsSeries не применялось) элемент time[rates_total-1] будет самым правым баром на графике (шаг 4).
Надеюсь такой простой и наглядный способ поможет быстро проверять направление индексации в индикаторах.
Спасибо, не знал этого.
Есть какие-то предположения о правильности расчёта?
Нужно сделать алерт на индикатор CCI ARROWS.
Нужно что бы сигналил сразу, после появления стрелки.
MT5
Всем пирвет!!! Начал переделывать индикатор пот МТ5 но вод сасада, не могу понять с функцией iTime, что то не получается, может ктонибудь допилить индикатор до рабочего состояния?????
Индикатор читает файл который располагается в папке MQL5\Files\evolution-dvoid\
После скачивания переименовать в .csv
Заранее благодарен.
Всем доброго времени суток, я не программист, однако один из моих знакомых утверждает, что в коде индикатора Индекс Облегчения Рынка Била Вильямса (Market Facilitation Index, BW MFI) расчеты производятся не строго по классической формуле: BW MFI = (HIGH - LOW) / VOLUME , а дополнительно используется еще какая-то корректировка данных. Что по сути является ошибкой и соответственно индикатор отображает неверные данные!
Подскажите как исправить данную ошибку в индикаторе (убрать дополнительную корректировку данных) и получить
индикатор работающий строго по формуле: BW MFI = (HIGH - LOW) / VOLUME ?????
//+------------------------------------------------------------------+
//| MarketFacilitationIndex.mq5 |
//| Copyright 2009, MetaQuotes Software Corp. |
//| http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "2009, MetaQuotes Software Corp."
#property link "http://www.mql5.com"
//--- indicator settings
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_plots 1
#property indicator_type1 DRAW_COLOR_HISTOGRAM
#property indicator_color1 Lime,SaddleBrown,Blue,Pink
#property indicator_width1 2
//--- input parameter
input ENUM_APPLIED_VOLUME InpVolumeType=VOLUME_TICK; // Volumes
//---- buffers
double ExtMFIBuffer[];
double ExtColorBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
void OnInit()
{
//---- indicators
SetIndexBuffer(0,ExtMFIBuffer,INDICATOR_DATA);
SetIndexBuffer(1,ExtColorBuffer,INDICATOR_COLOR_INDEX);
//--- name for DataWindow
IndicatorSetString(INDICATOR_SHORTNAME,"BWMFI");
//--- set accuracy
IndicatorSetInteger(INDICATOR_DIGITS,_Digits);
//----
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void CalculateMFI(const int start,const int rates_total,
const double &high[],
const double &low[],
const long &volume[])
{
int i=start;
bool mfi_up=true,vol_up=true;
//--- calculate first values of mfi_up and vol_up
if(i>0)
{
int n=i;
while(n>0)
{
if(ExtMFIBuffer[n]>ExtMFIBuffer[n-1]) { mfi_up=true; break; }
if(ExtMFIBuffer[n]<ExtMFIBuffer[n-1]) { mfi_up=false; break; }
//--- if mfi values are equal continue
n--;
}
n=i;
while(n>0)
{
if(volume[n]>volume[n-1]) { vol_up=true; break; }
if(volume[n]<volume[n-1]) { vol_up=false; break; }
//--- if real volumes are equal continue
n--;
}
}
//---
while(i<rates_total && !IsStopped())
{
if(volume[i]==0)
{
if(i>0) ExtMFIBuffer[i]=ExtMFIBuffer[i-1];
else ExtMFIBuffer[i]=0;
}
else ExtMFIBuffer[i]=(high[i]-low[i])/_Point/volume[i];
//--- calculate changes
if(i>0)
{
if(ExtMFIBuffer[i]>ExtMFIBuffer[i-1]) mfi_up=true;
if(ExtMFIBuffer[i]<ExtMFIBuffer[i-1]) mfi_up=false;
if(volume[i]>volume[i-1]) vol_up=true;
if(volume[i]<volume[i-1]) vol_up=false;
}
//--- set colors
if(mfi_up && vol_up) ExtColorBuffer[i]=0.0;
if(!mfi_up && !vol_up) ExtColorBuffer[i]=1.0;
if(mfi_up && !vol_up) ExtColorBuffer[i]=2.0;
if(!mfi_up && vol_up) ExtColorBuffer[i]=3.0;
i++;
}
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
//---
int start=0;
//---
if(start<prev_calculated) start=prev_calculated-1;
//--- calculate with tick or real volumes
if(InpVolumeType==VOLUME_TICK)
CalculateMFI(start,rates_total,high,low,tick_volume);
else
CalculateMFI(start,rates_total,high,low,volume);
//--- normalize last mfi value
if(rates_total>1)
{
datetime ctm=TimeTradeServer(),lasttm=time[rates_total-1],nexttm=lasttm+datetime(PeriodSeconds());
if(ctm<nexttm && ctm>=lasttm && nexttm!=lasttm)
{
double correction_koef=double(1+ctm-lasttm)/double(nexttm-lasttm);
ExtMFIBuffer[rates_total-1]*=correction_koef;
}
}
//---
return(rates_total);
}
//+------------------------------------------------------------------+
Подскажите что это за код и как из этого сделать индикатор для MT5 ???
//This is a volume based indicator. Make shure to use proper volume input.
Подскажите что это за код и как из этого сделать индикатор для MT5 ???
//This is a volume based indicator. Make shure to use proper volume input.
BW MFI Приседающий бар , 3 буфер ( если память не изменяет)