Новая версия платформы MetaTrader 5 build 2280 - страница 23

 

Тестирую свой веер фибонначи. На М15 всё хорошо и карасиво. Включил тест на Н8... Откуда взялся фиолетовый артефакт???



Впрочем, и на М15 это есть... Что это?
 
Я уже задавал здесь вопрос. Но неправильно его сформулировал. В минимальном масштабе один бар занимает на мониторе один пиксель. Получается, чем больше разрешение,  тем больше вместится баров на экран (1024, 1368, 1920,...). Я правильно понял? 
 
Сергей Таболин:

Что это?

это Ваш не проинициализированный индикаторный буфер

 
Igor Makanu:

это Ваш не проинициализированный индикаторный буфер

Сомневаюсь.

Веер строится прямо из советника трендовыми линиями. И есть индикатор myZigZag3 на основе стандартного ZigZag в котором я изменил только это:

//+------------------------------------------------------------------+
//|                                                    myZigZag3.mq5 |
//|                   Copyright 2009-2017, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "2009-2017, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
#property indicator_chart_window
#property indicator_buffers 3
#property indicator_plots   3
//---- plot Zigzag
#property indicator_label1  "Zigzag3"
#property indicator_type1   DRAW_SECTION
#property indicator_color1  Red
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
#property indicator_label2  "Zigzag3H"
#property indicator_label3  "Zigzag3L"
//--- input parameters
input    int               ExtDepth = 12;
input    color             InpColor = clrDarkSalmon;  // Цвет
input    ENUM_LINE_STYLE   InpStyle = STYLE_DASH;     // Стиль линии
input    int               ExtDeviation=5;
input    int               ExtBackstep=3;
//--- indicator buffers
double         ZigzagBuffer[];      // main buffer
double         HighMapBuffer[];     // highs
double         LowMapBuffer[];      // lows
int            level=3;             // recounting depth
double         deviation;           // deviation in points
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,ZigzagBuffer,INDICATOR_DATA);
   SetIndexBuffer(1,HighMapBuffer,INDICATOR_DATA);
   SetIndexBuffer(2,LowMapBuffer,INDICATOR_DATA);
 
Сергей Таболин:

Сомневаюсь.

так сделайте:

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(prev_calculated == 0)
   {
      ArrayInitialize(ZigzagBuffer,EMPTY_VALUE);
      ArrayInitialize(HighMapBuffer,EMPTY_VALUE);
      ArrayInitialize(LowMapBuffer,EMPTY_VALUE);
   }
.......
 
Igor Makanu:

так сделайте:

Там уже это есть.

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 i=0;
   int limit=0,counterZ=0,whatlookfor=0;
   int shift=0,back=0,lasthighpos=0,lastlowpos=0;
   double val=0,res=0;
   double curlow=0,curhigh=0,lasthigh=0,lastlow=0;
//--- auxiliary enumeration
   enum looling_for
     {
      Pike=1,  // searching for next high
      Sill=-1  // searching for next low
     };
//--- initializing
   if(prev_calculated==0)
     {
      ArrayInitialize(ZigzagBuffer,0.0);
      ArrayInitialize(HighMapBuffer,0.0);
      ArrayInitialize(LowMapBuffer,0.0);
     }
//--- 
   if(rates_total<100) return(0);
//--- set start position for calculations
   if(prev_calculated==0) limit=ExtDepth;
 
Сергей Таболин:

Впрочем, и на М15 это есть... Что это?

в окне данных он есть среди буферов индикаторов? или это объекты? - если второе, то удалите и перезапишите шаблон.

 

В этой теме ( https://www.mql5.com/de/forum/330868 ) Отто Паузер показывает код (включая советник), который выдает ошибку «Недопустимые остановки» в сборке 2280, но в версии 2190 работает без сбоев. :

In diesem Thread (https://www.mql5.com/de/forum/330868) zeigt Otto Pauser einen Code (inkl. EA), der bei Build 2280 den Fehler "Invalid stops" produziert, in der Version 2190 aber problemlos läuft:


https://c.mql5.com/3/304/Test_SL_TP.mq5

Probleme mit SL und TP
Probleme mit SL und TP
  • 2020.01.19
  • www.mql5.com
Seit Stunden kämpfe ich mit nachfolgendem Code, der das Öffnen einer Position vereinfachen sollte und eine Erweiterung von CTrade werden soll...
 
Igor Zakharov:

в окне данных он есть среди буферов индикаторов? или это объекты? - если второе, то удалите и перезапишите шаблон.

Спасибо. Это действительно оказался шаблон. Удалил его (остался tester.tpl) и всё, никаких артефактов )))

Видимо ранее, когда гонял этот тестовый советник, случайно сохранил его шаблон. Вот оно и вылезло.

 
Сергей Таболин:

Спасибо. Это действительно оказался шаблон. Удалил его (остался tester.tpl) и всё, никаких артефактов )))

Видимо ранее, когда гонял этот тестовый советник, случайно сохранил его шаблон. Вот оно и вылезло.

значит в шаблоне было несколько индикаторов и в одном из индикаторов не происходила инициализация индикаторных буферов

в MQL5 терминал не инициализирует индикаторные буфера при запуске индикатора (как в MQL4) и нужно выполнять или ArrayInitialize() или в цикле где заполняются значения индикаторных буферов обязательно присваивать значения каждому индексу буфера

это распространенная ошибка когда делают "индикатор со стрелочками" - все работает, но до момента переключения ТФ ;)