![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Есть формула в mql5 ее нужно перевести в обычный формат все значения кроме одного распознаны как прочитать последнее значение, помогите пожалуйста кто силен?
интересный индикатор у вас получился
//+------------------------------------------------------------------+ //| sig volt.mq5 | //| Copyright 2021, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2021, MetaQuotes Ltd." #property link "https://www.mql5.com" #property version "1.00" //--- #property indicator_chart_window #property indicator_buffers 5 #property indicator_plots 4 //--- #property indicator_label1 "Ema" #property indicator_type1 DRAW_COLOR_LINE #property indicator_color1 clrDeepSkyBlue,clrSandyBrown #property indicator_width1 2 //--- #property indicator_label2 "Fast ema" #property indicator_type2 DRAW_LINE #property indicator_color2 clrGray //--- #property indicator_label3 "Upper band" #property indicator_type3 DRAW_LINE #property indicator_style3 STYLE_DASHDOTDOT #property indicator_color3 clrDimGray //--- #property indicator_label4 "Lower band" #property indicator_type4 DRAW_LINE #property indicator_style4 STYLE_DASHDOTDOT #property indicator_color4 clrDimGray //--- #define _percp 0 #define _devs 1 //--- enum enPrices { pr_close, // Close pr_open, // Open pr_high, // High pr_low, // Low pr_median, // Median pr_typical, // Typical pr_weighted, // Weighted pr_haclose, // Heiken ashi close pr_haopen, // Heiken ashi open pr_hahigh, // Heiken ashi high pr_halow, // Heiken ashi low pr_hamedian, // Heiken ashi median pr_hatypical, // Heiken ashi typical pr_haweighted, // Heiken ashi weighted pr_haaverage // Heiken ashi average }; //--- input parameters input int EmaPeriod = 21; input int FastEmaPeriod = 13; input enPrices Price = pr_close; input double DeviationsFactor = 2.7; // Original was 2.7 best for stock markets input int DeviationsPeriod = 100; //--- indicator buffers double slowEma[]; double slowEmaColor[]; double fastEma[]; double envelopeUp[]; double envelopeDn[]; //--- double work[][2]; double workHa[][4]; double workEma[][2]; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int OnInit() { //--- indicator buffers SetIndexBuffer(0,slowEma,INDICATOR_DATA); SetIndexBuffer(1,slowEmaColor,INDICATOR_COLOR_INDEX); SetIndexBuffer(2,fastEma,INDICATOR_DATA); SetIndexBuffer(3,envelopeUp,INDICATOR_DATA); SetIndexBuffer(4,envelopeDn,INDICATOR_DATA); //--- indicator short name IndicatorSetString(INDICATOR_SHORTNAME,"sig volt"); //--- indicator digits IndicatorSetInteger(INDICATOR_DIGITS,_Digits+1); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ 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[]) { //--- if(ArrayRange(work,0) != rates_total) ArrayResize(work,rates_total); //--- for(int i=(int)MathMax(prev_calculated-1,0); i<rates_total && !IsStopped(); i++) { double price = getPrice(Price,open,close,high,low,i,rates_total); double ema = iEma(price,EmaPeriod,i,rates_total,0); double bullp = MathAbs(high[i]-ema); double bearp = MathAbs(low[i] -ema); double maxp = MathMax(bullp,bearp); work[i][_percp] = maxp/ema; work[i][_devs] = work[(int)MathMax(i-1,0)][_devs]; //--- MqlDateTime curTime,prevTime; TimeToStruct(time[i],curTime); TimeToStruct((int)MathMax(i-1,0),prevTime); if(curTime.day_of_week<prevTime.day_of_week || _Period>PERIOD_W1) { double avg = 0; double sum = 0; for(int k=0; k<DeviationsPeriod && (i-k-1)>=0; k++) avg += work[i-k-1][_percp]; avg /= DeviationsPeriod; for(int k=0; k<DeviationsPeriod && (i-k-1)>=0; k++) sum += (work[i-k-1][_percp]-avg)*(work[i-k-1][_percp]-avg); work[i][_devs] = MathSqrt(sum/DeviationsPeriod); } //--- slowEma[i] = ema; envelopeUp[i] = ema*(1+(DeviationsFactor*work[i][_devs])); envelopeDn[i] = ema*(1-(DeviationsFactor*work[i][_devs])); if(FastEmaPeriod>0) { fastEma[i] = iEma(price,FastEmaPeriod,i,rates_total,1); if(fastEma[i]>slowEma[i]) slowEmaColor[i] = 0; if(fastEma[i]<slowEma[i]) slowEmaColor[i] = 1; } } return(rates_total); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ double getPrice(enPrices price, const double& open[], const double& close[], const double& high[], const double& low[], int i, int bars) { //--- if(price>=pr_haclose && price<=pr_haaverage) { if(ArrayRange(workHa,0)!= bars) ArrayResize(workHa,bars); // double haOpen; if(i>0) haOpen = (workHa[i-1][2] + workHa[i-1][3])/2.0; else haOpen = open[i]+close[i]; double haClose = (open[i] + high[i] + low[i] + close[i]) / 4.0; double haHigh = MathMax(high[i], MathMax(haOpen,haClose)); double haLow = MathMin(low[i], MathMin(haOpen,haClose)); if(haOpen <haClose) { workHa[i][0] = haLow; workHa[i][1] = haHigh; } else { workHa[i][0] = haHigh; workHa[i][1] = haLow; } workHa[i][2] = haOpen; workHa[i][3] = haClose; //--- switch(price) { case pr_haclose: return(haClose); case pr_haopen: return(haOpen); case pr_hahigh: return(haHigh); case pr_halow: return(haLow); case pr_hamedian: return((haHigh+haLow)/2.0); case pr_hatypical: return((haHigh+haLow+haClose)/3.0); case pr_haweighted: return((haHigh+haLow+haClose+haClose)/4.0); case pr_haaverage: return((haHigh+haLow+haClose+haOpen)/4.0); } } //--- switch(price) { case pr_close: return(close[i]); case pr_open: return(open[i]); case pr_high: return(high[i]); case pr_low: return(low[i]); case pr_median: return((high[i]+low[i])/2.0); case pr_typical: return((high[i]+low[i]+close[i])/3.0); case pr_weighted: return((high[i]+low[i]+close[i]+close[i])/4.0); } return(0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ double iEma(double price, double period, int r, int totalBars, int instanceNo=0) { if(ArrayRange(workEma,0)!= totalBars) ArrayResize(workEma,totalBars); //--- double alpha = 2.0 / (1.0+period); if(r<1) workEma[r][instanceNo] = price; else workEma[r][instanceNo] = workEma[r-1][instanceNo]+alpha*(price-workEma[r-1][instanceNo]); return(workEma[r][instanceNo]); } //+------------------------------------------------------------------+
---------------------------------
Я то думал он ваш - а он оказывается вот https://www.mql5.com/ru/code/16826
Интересно, зачем вот это:
Похоже, должно было быть так:
Интересно, зачем вот это:
Похоже, должно было быть так:
Этот параметр на что влияет?
не совсем пока разобрались как он считает![](https://c.mql5.com/3/354/1723424608288__1.png)
Я в екселе проверил конверт не рисует так как в терминале, могу скинуть файл расчета екселя
У вас сумма квадратов, а их, как я понимаю должно быть 100, всего в 2 раза больше одного значения. Так не бывает, ищите ошибку в своём екселовском файле.
Этот параметр на что влияет?
в том варианте, который в коде, похоже, ни на что.
Этот параметр на что влияет?
в том варианте, который в коде, похоже, ни на что.
в том варианте, который в коде, похоже, ни на что.
Или я что-то не понимаю? Подскажите может уже засчитался очевидного не вижу?
Или я что-то не понимаю? Подскажите может уже засчитался очевидного не вижу?
У вас сумма двух значений, а надо диапазон суммировать.
У вас сумма двух значений, а надо диапазон суммировать.
ДНЕВНОЙ ГРАФИК ТЕКУЩЕЕ ВРЕМЯ РЕЗУЛЬТАТ
ДНЕВНОЙ ГРАФИК ТЕКУЩЕЕ ВРЕМЯ РЕЗУЛЬТАТ
вот исходник расширение только поменять с txt на xlsx