Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 669

 
psyman:

Почитал вашу переписку возникшую из моей темы, это всё конечно весело :-) но как насчет вопроса, который это бурление породил?

Объявление массива через SetIndexBuffer(1, tmp1) ничего не дает. Я конечно могу увеличивать размерность массива в том же цикле, но хочется узнать более простой и эффективный способ.

Код полностью покажите - чего вы там наделали, что хотели и что получилось.

 

Хочу посмотреть за волатильностью. Для начала хотя бы open-close, усреднение на периоде делается при помощи SMA.


//+------------------------------------------------------------------+
//|                                                        _null.mq4 |
//|                        Copyright 2014, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
#property strict
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1
//--- plot OC
#property indicator_label1  "O-C"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrSteelBlue
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- indicator buffers
double         ip1Buf[];

input int ip1=100;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
  
string s_name1;

s_name1="O-C (" + IntegerToString(ip1) + ")";

IndicatorShortName(s_name1);
SetIndexLabel(0, s_name1);


//--- indicator buffers mapping
   SetIndexBuffer(0,ip1Buf);
   
//---
   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[])
  {


int i;
double tmp1[];

SetIndexBuffer(1, tmp1);


      Print("rates_total = ",rates_total);
      for(i=1; i<rates_total-1; i++)
      {
      tmp1[i]=close[i];      
      ip1Buf[i]=iMA(NULL,0,100,0,0,tmp1[i],0);
      
      }
   
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
 
psyman:

Хочу посмотреть за волатильностью. Для начала хотя бы open-close, усреднение на периоде делается при помощи SMA.


SetIndexBuffer(1, tmp1) почему не в OnInit() ?

Почему нет IndicatorBuffers(2) ?

Почему рассчитываете не оптимально? На каждом тике - полный цикл.

Почему iMA(), а не iMAOnArray() ?

 

=Почему нет IndicatorBuffers(2) ?


#property strict на это не ругается, наверное поэтому не прописал.


=Почему iMA(), а не iMAOnArray() ?


Как знаю так и пишу, а знаний не хватает и в учебнике про это ничего не написано.

Отсутствие системных знаний сильно ограничивает, пичаль.


=На каждом тике - полный цикл.


Про это ничего не понял, просьба разжевать или дать ссылку где это сделано.

У меня минимальный ТФ часовой.

 
=На каждом тике - полный цикл.


Про это ничего не понял, просьба разжевать или дать ссылку где это сделано.

У меня минимальный ТФ часовой.

У Вас при каждом вызове OnCalculate цикл for промолачивает данные от 1 до rates_total, т.е. делает одну и ту же работу. Это, конечно же, плохо.

 
psyman:

=Почему нет IndicatorBuffers(2) ?


#property strict на это не ругается, наверное поэтому не прописал.


=Почему iMA(), а не iMAOnArray() ?


Как знаю так и пишу, а знаний не хватает и в учебнике про это ничего не написано.

Отсутствие системных знаний сильно ограничивает, пичаль.


=На каждом тике - полный цикл.


Про это ничего не понял, просьба разжевать или дать ссылку где это сделано.

У меня минимальный ТФ часовой.

Знаете, я прямо в этой ветке - где-то в её середине, прикладывал шаблон индикатора - можете его найти, и делать прямо из него что вам хочется. Поищите. Так и писал, что много раз люди интересуются что, да как, вот и решил шаблон индикатора сделать и положить в эту ветку.

 

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Любые вопросы новичков по MQL4, помощь и обсуждение по алгоритмам и кодам

Andrei Novichkov, 2018.10.17 22:06

У Вас при каждом вызове OnCalculate цикл for промолачивает данные от 1 до rates_total, т.е. делает одну и ту же работу. Это, конечно же, плохо.


Вы если говорите что плохо, скажите как сделать хорошо. Перенести вычисления в OnInit?

 

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Любые вопросы новичков по MQL4, помощь и обсуждение по алгоритмам и кодам

Artyom Trishkin, 2018.10.17 22:10

Знаете, я прямо в этой ветке - где-то в её середине, прикладывал шаблон индикатора - можете его найти, и делать прямо из него что вам хочется. Поищите. Так и писал, что много раз люди интересуются что, да как, вот и решил шаблон индикатора сделать и положить в эту ветку.


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

Какое-нибудь сочетание слов из поста припомните.

 
Как создать массив экземпляров класса?
Сделал ClassName* className[], потом на него ArrayResize, но не дает доступ к методам invalid pointer access
 
Roman Sharanov:
Как создать массив экземпляров класса?
Сделал ClassName* className[], потом на него ArrayResize, но не дает доступ к методам invalid pointer access

Пример есть в CArrayObj

Причина обращения: