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

 

Здравствуйте! Задача: Через индикатор.

- Разместить (например - PLOT_ARROW) взяв значения цены из двумерного массива. tmparray[][],

-  Размещение (PLOT_ARROW) количество>1 на одной свече,

то есть у меня получается разместить один крестик на свечу(с помощью tmparray[]), а надо больше>1 

 

//--- indicator buffers mapping
   SetIndexBuffer(0,tmparray);
//--- setting a code from the Wingdings charset as the property of PLOT_ARROW
   PlotIndexSetInteger(0,PLOT_ARROW,159);
   
   ArrayResize(tmparray, CountMA+1);
   //SetIndexBuffer(1,scBuf);

 
Top2n:

Здравствуйте! Задача: Через индикатор.

- Разместить (например - PLOT_ARROW) взяв значения цены из двумерного массива. tmparray[][],

-  Размещение (PLOT_ARROW) количество>1 на одной свече,

то есть у меня получается разместить один крестик на свечу(с помощью tmparray[]), а надо больше>1 

Может вначале гистограмму сделать. Нагляднее будет
 
Top2n:

Здравствуйте! Задача: Через индикатор.

- Разместить (например - PLOT_ARROW) взяв значения цены из двумерного массива. tmparray[][],

-  Размещение (PLOT_ARROW) количество>1 на одной свече,

то есть у меня получается разместить один крестик на свечу(с помощью tmparray[]), а надо больше>1 

 

 

 

Если достаточно восьми крестиков на каждом баре, то нет проблем, а иначе - на MQL5. 
 
tara:
Если достаточно восьми крестиков на каждом баре, то нет проблем, а иначе - на MQL5. 
Да и mql4 сейчас не ограничивает количество буферов.
 
AlexeyVik:
Да и mql4 сейчас не ограничивает количество буферов.
Да? Спасибо, а то я по-прежнему кройкой и шитьем занимаюсь :) 
[Удален]  
Здравствуйте. Данные вопросы адресованы опытным АТС - никам.
1. Какими признаками должен обладать алгоритм, чтобы 
ему можно было доверить реальную торговлю, какое количество сделок должен на тестере провести
советник, на каком промежутке времени.  
2. Бывают ли алгоритмы которые показывают стабильные результаты на протяжении 10 и более лет. 
3. Что нужно чтобы стабильно зарабатывать торгуя советниками:
искать алгоритмы которые на тестере работали десятки лет или  состряпать пару десятков алгоритмов 
которые показывали результаты на небольшом промежутке времени, объединить их в один советник
и периодически менять те которые начинают сливать.
Ответы на эти вопросы я думаю  будут интересны и важны всем начинающим алготрейдерам и помогут
понять в каком направлении двигаться. 

 
AlexeyVik:
Да и mql4 сейчас не ограничивает количество буферов.
Подскажите пожалуйста как реализовать!?!?
 
Top2n:
Подскажите пожалуйста как реализовать!?!?

Я ответ дал совсем не по твоему вопросу. Даже не ответ, а замечание. Чтобы тебе что-то посоветовать надо понимать чего хочется получить. А я не понимаю.

Если это индикатор, то там двумерные массивы не применяются. Если простой пользовательский массив, то использовать как буфер индикатора невозможно. Чтобы получить 2 значения индикатора на одной свече надо иметь 2 буфера в каждом их них должно быть значение отличающееся друг от друга. Иначе один будет скрыт под вторым.

 
//+------------------------------------------------------------------+
//|                                                         SSMA.mq4 |
//|                                            Copyright 2014, Vinin |
//|                                             http://vinin.ucoz.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, Vinin"
#property link      "http://vinin.ucoz.ru"
#property version   "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 8
#property indicator_plots   1
//--- plot average
#property indicator_label1  "average"
#property indicator_type1   DRAW_ARROW
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- input parameters
extern int      CountMA=200;
extern int      Period_start =1;
extern int      Period_shift =5;
//--- indicator buffers
double         averageBuffer[];
double         maxBuffer[];
double         minBuffer[];
double         Label1Buffer[];
double         scBuf[][2];

double tmparray[],tmparrayF1[];
//double tmparrayD[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
  // массив tmparrayF1[] является индикаторным буфером
   SetIndexBuffer(0,tmparrayF1);
   PlotIndexSetInteger(0,PLOT_ARROW,159);
   
   ArrayResize(tmparray, CountMA+1);  // массив для рассчитанных SMA 
   ArrayResize(scBuf, CountMA+1);     // массив для значений повторений на цене  
   ArrayResize(tmparrayF1, CountMA+1); // массив для перевода в одномерный массив для отображения на графике

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| 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[])
  {
//---
   if (rates_total<Period_start+Period_shift*CountMA+1) return(0);
   ArrayInitialize(tmparray,0);
   ArrayInitialize(scBuf,0);
   
   int limit=rates_total-prev_calculated;
   if (limit>1) limit=rates_total-(Period_start+Period_shift*CountMA+1);
   
   double min=-99999,max=99999, sum=0;
   int count, countMA,schet;
   
   for (int i=limit;i>=0;i--)
   {
      sum=0;
      count=0;
      countMA=0;
      // формируем массив со значения машек
      for (int j=0;j<Period_start+Period_shift*CountMA;j++)
      {
         sum+=(High[i+j]+Low[i+j])*0.5;
         count++;
         if (count==Period_start+Period_shift*countMA)
         {
            tmparray[countMA]=sum/count;
            countMA++;
         }          
      }    
      // Массив создан. Можно обрабатывать
   }
 //***** Рассчитать количество повторений SMA, в десятичном интервале.
   for (int b=0;b<CountMA;b++)
   {
     schet=0;
     for (int a =CountMA;a>=0;a--) 
     {
       if(NormalizeDouble(tmparray[a],4)==NormalizeDouble(tmparray[b],4)&&tmparray[a]!=0) // 1.30000 = 1.30004
       {
         scBuf[b][0]=schet;                       // количество повторений МА
         scBuf[b][1]=tmparray[b];                 // Цена
         tmparray[a]=0;                           // Обнуляем посчитанную ячейку
         schet++;
       }
     } 
   }
   
   ArraySort(scBuf,WHOLE_ARRAY,0,MODE_DESCEND);   // Сортируем массив по убыванию
  
   for (int x=0;x<CountMA;x++) 
   {
     tmparrayF1[x]=scBuf[x][1];           //переносим значения цены в одномерный массив, для отображения через индикатор
   }  
     
      
Print("rates_total = ",rates_total,
"tmparray = ",tmparray[0]
,"KolVBuf ", scBuf[0][0],"+",scBuf[0][1]
       ,"/ ",scBuf[1][0],"+",scBuf[1][1]
       ,"/ ",scBuf[2][0],"+",scBuf[2][1]
       ,"/ ",scBuf[3][0],"+",scBuf[3][1]
       ,"/ ",scBuf[4][0],"+",scBuf[4][1]
       ,"/ ",scBuf[5][0],"+",scBuf[5][1]
     );

   
//--- return value of prev_calculated for next call
   return(rates_total);
  }

Заранее извиняюсь перед админами, за троллинг, похожий вопрос есть в отдельной ветки https://www.mql5.com/ru/forum/154928, !)))

 Цель:

- Создаем массив значений Скользящей средней в количестве 2000 шт.  

- Обозначить крестиками, уплотнения сформировавшиеся от объединенных SMA.

 В результате крестики раскинуты не упорядоченно и там где нет ничего. 

Вопрос:

Получается, что ошибка, по которой крестики располагаются в не соответствии положению скопления SMA, в формировании массива SMA || ..? 

 

Доброго время суток. Подскажите пожалуйста как решить эту проблему. Надо массив сделать, пример такой.............        и получается полный каламбур, подскажите что не так. Спасибо. 

for(int i=1;i<=20;i++)
     {
     for(int j=1;j<=20;j++)
        {
        for(int q=1;q<=20;q++)
           {
           
             M5gooB[i,j,q]=false;
             Print("M5gooB ",i," ",j," ",q," false.");
             
           }
        }
     }