Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 1337

 
Всем привет. При работе с несколькими инструментами МТ5 грузит гигабайты данных. Можно ли как-то ограничить это в настройках? Чтоб при этом месячные, недельные, дневные бары на графиках строились как в МТ4, то есть каждый бар как (open, high, low, close) без лишней внутренней истории. А уже графики с внутредневными барами были построены по текущему принципу (реализации) МТ5
 

Доброго времени! Подскажите пожалуйста, возможно ли вывести (как-то посмотреть) тиковый график по определенной свече из истории предыдущего дня иии свечи, которая образовалась несколько дней назад?

 
Vladimir Karputov #:

MetaTrader переведён на множество языков. Для переключении языка интерфейса: меню 'View' -> 'Languages'

Спасибо! Работает.

 
Привет!!!  Подскажите где я ошибся, чет сам не догоняю)  
void OnStart()
  {
   int Target=6;       //Количество тайм-фреймов
   int Counter_UP=0;   //Счетчик нахождения цены над МА
   int Counter_DOWN=0;
   int MA = 200;       //Период МА
   double bufer_MA[];  //Буфер для хендла
   ENUM_TIMEFRAMES frame1[10];  //Битная маска тайм-фреймов
//___________________int битная маска ENUM  Массив таймфреймов__________________________________________
   frame1[1]=1;
   frame1[2]=5;
   frame1[3]=15;
   frame1[4]=30;
   frame1[5]=16385;
   frame1[6]=16388;
   frame1[7]=16408;
   frame1[8]=32769;
   frame1[9]=49153;
//____________________________________________________________________________________________________________

   int KollSymbols = SymbolsTotal(true);  //Колл. символов в маркет вотч
   Alert("Колл.Инстр = ",KollSymbols);
//---
   int MA200;  //Переменная для хендла
   for(int i=0; i<=KollSymbols; i++) //Перебераем все символы из маркет вотч
     {
      string symbol = SymbolName(i,true);  //Выбираем имя символа из маркет вотч
      //Alert("symbol = ",symbol,"i= ",i);
      for(int I=1; I<=Target; I++)  //Перебераем таймфреймы
        {
         MA200 = iMA(symbol,frame1[I],MA,0,MODE_EMA,PRICE_MEDIAN);  //хендл на выбранном тайме
         CopyBuffer(MA200,0,TimeCurrent(),5,bufer_MA); // заполнение масива bufer_MA хендлом MA200 выбранного тайма
         ArraySetAsSeries(bufer_MA,true);  //Разворачиваем массив как в тайм-серии
         //Alert("Символ - ",symbol,"i= ",i);
         // Alert("Simbol = ",symbol," bufer_MA[1] = ",bufer_MA[1]);
         if(iClose(symbol,frame1[I],1) > bufer_MA[1])  //Если цена 1 баре, на выбранном символе и тайме, БОЛЬШЕ цены скользяхи на 1 баре
           {
            // Alert("iClose= ",iClose(symbol,frame1[I],1), " bufer_MA[1]= ",bufer_MA[1]);
            Counter_UP++;
            if(Counter_UP==Target)
               Alert("Инструмент для наблюдения в покупки - ",symbol);

            ArrayFree(bufer_MA);      //Очистка буфера индикатора
           }
         else
           {
            ArrayFree(bufer_MA);      //Очистка буфера индикатора
           }
         IndicatorRelease(MA200); //Удаление хендла
        }
      Counter_UP=0;
      Counter_DOWN=0;
     }
  }
//+------------------------------------------------------------------+

Из 275 инструментов обрабатывает штук 27 и залипает, занимает память, и при принудительном завершении скрипта выдает строку с ошибкой. 



 
Kira27 #:
Привет!!!  Подскажите где я ошибся, чет сам не догоняю)  

Из 275 инструментов обрабатывает штук 27 и залипает, занимает память, и при принудительном завершении скрипта выдает строку с ошибкой. 

Если этот массив

   double bufer_MA[];  //Буфер для хендла

то его использовать в

         CopyBuffer(MA200,0,TimeCurrent(),5,bufer_MA); // заполнение масива bufer_MA хендлом MA200 выбранного тайма

совсем не правильно.

Или я что-то не так понял?

 
Alexey Viktorov #:

Если этот массив

то его использовать в

совсем не правильно.

Или я что-то не так понял?

Там вообще много чего не так

 
Alexey Viktorov #:

Если этот массив

то его использовать в



Пример:



//+------------------------------------------------------------------+ 
//|                                              TestCopyBuffer3.mq5 | 
//|                        Copyright 2009, MetaQuotes Software Corp. | 
//|                                              https://www.mql5.com | 
//+------------------------------------------------------------------+ 
#property copyright "2009, MetaQuotes Software Corp." 
#property link      "https://www.mql5.com" 
#property version   "1.00"
 
#property indicator_separate_window 
#property indicator_buffers 1 
#property indicator_plots   1 
//---- plot MA 
#property indicator_label1  "MA" 
#property indicator_type1   DRAW_LINE 
#property indicator_color1  clrRed 
#property indicator_style1  STYLE_SOLID 
#property indicator_width1  1 
//--- input parameters 
input bool               AsSeries=true; 
input int                period=15; 
input ENUM_MA_METHOD     smootMode=MODE_EMA; 
input ENUM_APPLIED_PRICE price=PRICE_CLOSE; 
input int                shift=0; 
//--- indicator buffers 
double                   MABuffer[]; 
int                      ma_handle; 
//+------------------------------------------------------------------+ 
//| Custom indicator initialization function                         | 
//+------------------------------------------------------------------+ 
int OnInit() 
  { 
//--- indicator buffers mapping 
   SetIndexBuffer(0,MABuffer,INDICATOR_DATA); 
   Print("Параметр AsSeries = ",AsSeries); 
   Print("Индикаторный буфер после SetIndexBuffer() является таймсерией = ", 
         ArrayGetAsSeries(MABuffer)); 
//--- set short indicator name 
   IndicatorSetString(INDICATOR_SHORTNAME,"MA("+period+")"+AsSeries); 
//--- set AsSeries (depends on input parameter) 
   ArraySetAsSeries(MABuffer,AsSeries); 
   Print("Индикаторный буфер после ArraySetAsSeries(MABuffer,true); является таймсерией = ", 
         ArrayGetAsSeries(MABuffer)); 
//--- 
   ma_handle=iMA(Symbol(),0,period,shift,smootMode,price); 
   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[]) 
  { 
//--- check if all data calculated 
   if(BarsCalculated(ma_handle)<rates_total) return(0); 
//--- we can copy not all data 
   int to_copy; 
   if(prev_calculated>rates_total || prev_calculated<=0) to_copy=rates_total; 
   else 
     { 
      to_copy=rates_total-prev_calculated; 
      //--- last value is always copied 
      to_copy++; 
     } 
//--- try to copy 
   if(CopyBuffer(ma_handle,0,0,to_copy,MABuffer)<=0) return(0); 
//--- return value of prev_calculated for next call 
   return(rates_total); 
  } 
//+------------------------------------------------------------------+
 

совсем не правильно.

Или я что-то не так понял?

Почему не правильно?  Ведь в примере к функции 


CopyBuffer

так и используют  

 

Alexey Viktorov #:


Или я что-то не так понял?

Смысл скрипта, перебрать каждый инструмент из маркет вотч на таймфреймах с 1мин до 4Н для определения цены над МА200 и если этот факт обнаружится, выдать алерт с именем символа на котором цена выше МА на всех 6 таймфреймах.

 
Artyom Trishkin #:

Там вообще много чего не так

А по конкретнее, если вас не затруднит)

 
Kira27 #:

А по конкретнее, если вас не затруднит)

Индексация массивов - просто жуть какая-то... Копирование одних и тех же данных в цикле... Создание новых хэндлов в цикле - слов нет...

Остальное даже глядеть расхотелось, извините