Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 789

 
solnce600:

Добрые люди!!!

Помогите найти ошибку.Я изучаю тему Массивы.

Создал массив во включаемом файле.

Вставил обращение ко включаемому файлу в советник.

Но советник не компилируется.Не могу понять почему

В ссылке  расположение файлов коды ошибок

http://clip2net.com/s/jkTd89

 

 Спасибо.

 

Может проблема в имени файла и пути до него? Старайтесь файлы называть латиницей и без точек.
 
solnce600:

Добрые люди!!!

Помогите найти ошибку.Я изучаю тему Массивы.

Создал массив во включаемом файле.

Вставил обращение ко включаемому файлу в советник.

Но советник не компилируется.Не могу понять почему

В ссылке  расположение файлов коды ошибок

http://clip2net.com/s/jkTd89

 

 Спасибо.

 

Подозрительный путь. ../Programm Files/.. Вообще-то все файлы должны лежать по пути типа C:\Users\***\AppData\Roaming\MetaQuotes\Terminal\******************\MQL4\Include
 
barabashkakvn:
Подозрительный путь. ../Programm Files/.. Вообще-то все файлы должны лежать по пути типа C:\Users\***\AppData\Roaming\MetaQuotes\Terminal\******************\MQL4\Include
Вобще-то терминал в портэбл запустить можно ;)
 
evillive:
Вобще-то терминал в портэбл запустить можно ;)
Можно использовать ключ /Portable, но ведь Мы не телепаты? И такой ключ используют единицы.
 

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

 

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

/// это начало ///

#property indicator_chart_window
#property indicator_buffers 6

#property indicator_style1 STYLE_DOT
#property indicator_width1 1
#property indicator_color1 Sienna

#property indicator_style2 STYLE_DOT
#property indicator_width2 1
#property indicator_color2 Sienna

#property indicator_style3 STYLE_SOLID
#property indicator_width3 2
#property indicator_color3 DodgerBlue

#property indicator_style4 STYLE_SOLID
#property indicator_width4 2
#property indicator_color4 DodgerBlue

#property indicator_style5 STYLE_SOLID
#property indicator_width5 1
#property indicator_color5 DodgerBlue

#property indicator_style6 STYLE_SOLID
#property indicator_width6 1
#property indicator_color6 DodgerBlue

/// это в процедуре OnInit() ///

   SetIndexBuffer(0, ForecastCloudHigh);
   SetIndexStyle(0, DRAW_HISTOGRAM, EMPTY, EMPTY, IndicatorCloudColor);
   SetIndexShift(0, ForecastBars - Offset);
   
   SetIndexBuffer(1, ForecastCloudLow);
   SetIndexStyle(1, DRAW_HISTOGRAM, EMPTY, EMPTY, IndicatorCloudColor);
   SetIndexShift(1, ForecastBars - Offset);
   
   SetIndexBuffer(2, ForecastBestPatternOpen);
   SetIndexStyle(2, DRAW_HISTOGRAM, STYLE_SOLID, EMPTY, IndicatorBestPatternColor);
   SetIndexShift(2, ForecastBars - Offset);

   SetIndexBuffer(3, ForecastBestPatternClose);
   SetIndexStyle(3, DRAW_HISTOGRAM, STYLE_SOLID, EMPTY, IndicatorBestPatternColor);
   SetIndexShift(3, ForecastBars - Offset);

   SetIndexBuffer(4, ForecastBestPatternHigh);
   SetIndexStyle(4, DRAW_HISTOGRAM, STYLE_SOLID, EMPTY, IndicatorBestPatternColor);
   SetIndexShift(4, ForecastBars - Offset);
   
   SetIndexBuffer(5, ForecastBestPatternLow);
   SetIndexStyle(5, DRAW_HISTOGRAM, STYLE_SOLID, EMPTY, IndicatorBestPatternColor);
   SetIndexShift(5, ForecastBars - Offset);

/// а это уже заполнение в процедуре-обработчике ///

         ForecastBestPatternOpen[indexBar] = xcbase + ((iOpen(NULL, 0, altindex) - ycbase) * sAlt[0]);
         ForecastBestPatternClose[indexBar] = xcbase + ((iClose(NULL, 0, altindex) - ycbase) * sAlt[0]);
         ForecastBestPatternHigh[indexBar] = xcbase + ((iHigh(NULL, 0, altindex) - ycbase) * sAlt[0]);
         ForecastBestPatternLow[indexBar] = xcbase + ((iLow(NULL, 0, altindex) - ycbase) * sAlt[0]);
 
Awwl:

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

 

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

 

Самое простое - это рисовать в mql5 через стиль рисования DRAW_CANDLES или DRAW_COLOR_CANDLES. К сожалению в mql4 просто так свечи не нарисовать.
 
Awwl:

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

 

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

Разберётесь как устроен индикатор Heiken Ashi (с терминалом в комплекте идёт), всё поймёте.
 
evillive:
Разберётесь как устроен индикатор Heiken Ashi (с терминалом в комплекте идёт), всё поймёте.

Встроенный Heiken Ashi выглядит откровенной недоделкой (интересно, это только у меня на 745 так?), зато стало понятно, как он устроен. И непонятно, как устроен WmiFor!

В коде Heiken Ashi свеча рисуется из 4-х полосок гистограмм:

#property indicator_separate_window
#property indicator_buffers 4
#property indicator_color1 Red
#property indicator_color2 White
#property indicator_color3 Red
#property indicator_color4 White
#property indicator_width1 1
#property indicator_width2 1
#property indicator_width3 3
#property indicator_width4 3

//---
input color ExtColor1 = Red;    // Shadow of bear candlestick
input color ExtColor2 = White;  // Shadow of bull candlestick
input color ExtColor3 = Red;    // Bear candlestick body
input color ExtColor4 = White;  // Bull candlestick body
//--- buffers
double ExtLowHighBuffer[];
double ExtHighLowBuffer[];
double ExtOpenBuffer[];
double ExtCloseBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//|------------------------------------------------------------------|
void OnInit(void)
  {
   IndicatorShortName("Heiken Ashi");
   IndicatorDigits(Digits);
//--- indicator lines
   SetIndexStyle(0,DRAW_HISTOGRAM,0,1,ExtColor1);
   SetIndexBuffer(0,ExtLowHighBuffer);
   SetIndexStyle(1,DRAW_HISTOGRAM,0,1,ExtColor2);
   SetIndexBuffer(1,ExtHighLowBuffer);
   SetIndexStyle(2,DRAW_HISTOGRAM,0,3,ExtColor3);
   SetIndexBuffer(2,ExtOpenBuffer);
   SetIndexStyle(3,DRAW_HISTOGRAM,0,3,ExtColor4);
   SetIndexBuffer(3,ExtCloseBuffer);
//---
   SetIndexLabel(0,"Low/High");
   SetIndexLabel(1,"High/Low");
   SetIndexLabel(2,"Open");
   SetIndexLabel(3,"Close");
   SetIndexDrawBegin(0,10);
   SetIndexDrawBegin(1,10);
   SetIndexDrawBegin(2,10);
   SetIndexDrawBegin(3,10);
//--- indicator buffers mapping
   SetIndexBuffer(0,ExtLowHighBuffer);
   SetIndexBuffer(1,ExtHighLowBuffer);
   SetIndexBuffer(2,ExtOpenBuffer);
   SetIndexBuffer(3,ExtCloseBuffer);
//--- initialization done
  }

Т.е. по мере увеличения номера буфера (от 0 до 3) новые полоски рисуются поверх старых. Причём порядок такой:

LowHigh - HighLow - Open - Close.

А чтобы свечи выглядели как положено, с телом и хвостами, порядок должен быть такой:

max(Open,Close)//толстая цветная линия// - min(Open,Close)//толстая белая// - High//тонкая цветная// - Low//тонкая белая//. 

Компилируем индикатор, ставим его на график и видим все проблемы (см. рис.).

Но у такого способа, как в Heiken Ashi, есть недостаток - под каждой "свечой" получается белый шлейф в цвет фона, который закрывает всё, что ниже. А у WmiFor всё идеально! Недокументированные возможности? 

 

Первая картинка - Heiken Ashi (вынесен в separate window), вторая картинка - WmiFor, фон сделан светло-зелёным для наглядности.

  

 
Forexman77:

Вопрос не снят. Итак, сначала.

Найден максимум, далее по нему строится линия. Проверяется расстояние между этой максимальной линией и текущим минимумом. Если она превышает «Rmax», то ставится стрелка на баре, где найден максимум. Стрелка то ставится, но не там. Для наглядности добавил буфер «BufferLow[i]», который показывает разницу и его данные видны в окне обозревателя.

Вот так всегда. Зимой от Вас снега не дождешься) Сам сделал.

Если кто был мучим столь похожей идеей, то вот код:

#property copyright "Kamil Gazizullin"
#property link      "forexman77@yandex.ru"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
#property indicator_chart_window
#property indicator_buffers 5
#property indicator_color1 Magenta
#property indicator_color2 Aqua
#property indicator_color3 SlateBlue
#property indicator_color4 SlateBlue
#property indicator_color5 clrNONE
//--- input parameters
extern int       Period_=10;
extern double diapazon  =0.003;
//--- buffers
double Max[];
double Min[];
double MaxIndex[];
double MinIndex[];
double rAZNOST[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   IndicatorBuffers(5);
   SetIndexBuffer(0,MaxIndex);
   SetIndexBuffer(1,MinIndex);
   SetIndexStyle(0,DRAW_ARROW);
   SetIndexArrow(0,116);
   SetIndexEmptyValue(1,0.0);
   SetIndexStyle(1,DRAW_ARROW);
   SetIndexArrow(1,116);
   SetIndexEmptyValue(0,0.0);
   SetIndexBuffer(2,Max);
   SetIndexBuffer(3,Min);
   SetIndexBuffer(4,rAZNOST);
   IndicatorDigits(Digits+1);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
    int counted_bars=IndicatorCounted(),limit, i,k,r,p,t,f;
    double minimum,maximum,Dmax,Dmin;
   if(counted_bars>0)
      counted_bars--;  
   limit=Bars-counted_bars;
   for(i=0;i<limit;i++)
   {
      maximum=High[iHighest(NULL,0,MODE_HIGH,Period_,i)];
      minimum=Low[iLowest(NULL,0,MODE_LOW,Period_,i)];
      Max[i]=maximum;
      Min[i]=minimum;
   }
   for(i=0;i<limit;i++)
   {
      k=iHighest(NULL,0,MODE_HIGH,Period_,i);
      t=iLowest(NULL,0,MODE_LOW,Period_,i);
      Dmax=Max[i]-Low[i];
      Dmin=High[i]-Min[i];
      if (Dmax > diapazon){p=k;for(r=p;r>=k;r--)MaxIndex[k]=Max[k];}
      if (Dmin > diapazon){p=t;for(f=p;f>=t;f--)MinIndex[t]=Min[t];}
      if (MaxIndex[i]==Max[i+1])MaxIndex[i]=0;
      if (MinIndex[i]==Min[i+1])MinIndex[i]=0;
      rAZNOST[i]=Max[i]-Min[i];
   }
   return(0);
  }
 
Awwl:

Встроенный Heiken Ashi выглядит откровенной недоделкой (интересно, это только у меня на 745 так?), зато стало понятно, как он устроен. И непонятно, как устроен WmiFor!

В коде Heiken Ashi свеча рисуется из 4-х полосок гистограмм:

Т.е. по мере увеличения номера буфера (от 0 до 3) новые полоски рисуются поверх старых. Причём порядок такой:

LowHigh - HighLow - Open - Close.

А чтобы свечи выглядели как положено, с телом и хвостами, порядок должен быть такой:

max(Open,Close)//толстая цветная линия// - min(Open,Close)//толстая белая// - High//тонкая цветная// - Low//тонкая белая//. 

Компилируем индикатор, ставим его на график и видим все проблемы (см. рис.).

Но у такого способа, как в Heiken Ashi, есть недостаток - под каждой "свечой" получается белый шлейф в цвет фона, который закрывает всё, что ниже. А у WmiFor всё идеально! Недокументированные возможности? 

 

Первая картинка - Heiken Ashi (вынесен в separate window), вторая картинка - WmiFor, фон сделан светло-зелёным для наглядности.

  

Сравниваем мягкое с круглым? Зачем Хейкен в отдельное окно выносить, если он задуман для окна графика, и там рисуется именно как свечи с тенями и телом? И никакие новые полоски поверх старых не рисуются, если значение буфера меняется, то та же полоса меняет размер, а не рисуется новая поверх неё.

В МТ4 нет метода отрисовки в виде свеч, так что только гистограммой можно, а уж как вы там значения буферов рассчитаете - ваше личное дело. WmiFor, кстати, тоже гистограммой рисует, давайте и его вынесем в отдельное окно и подивимся на его глюки )))

Чтобы свечи в отдельном окне выглядели как свечи с тенями, их надо рисовать относительно 0, как Accelerator. Или рисовать обьектами, как это делается, см. например All_Stars