Операции с графиками, непонятное действие 'ChartSetSymbolPeriod'.

 

Помогите понять что это?
При использовании 'ChartSetSymbolPeriod' куда отправляются данные?

bug test

bug test 2

//+------------------------------------------------------------------+
//|                                                     bug test.mq5 |
//|                                  Copyright 2021, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_separate_window
#property indicator_minimum -0.1
#property indicator_maximum 0.1
#property indicator_buffers 1
#property indicator_plots   1
//--- plot Label1
#property indicator_label1  "Label1"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- indicator buffers
double         Label1Buffer[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,Label1Buffer,INDICATOR_DATA);
//---
   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[])
  {
//--- start calculation
   ChartSetSymbolPeriod(ChartID(),Symbol(),PERIOD_CURRENT);
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
 

В справке написано: "Меняет значения символа и периода указанного графика."

Т.е. Вы текущему графику присваиваете символ текущего графика и период текущего графика, т.е. по сути ничего не изменится. А что нужно-то?

 
Vasiliy Pushkaryov #:

В справке написано: "Меняет значения символа и периода указанного графика."

Т.е. Вы текущему графику присваиваете символ текущего графика и период текущего графика, т.е. по сути ничего не изменится. А что нужно-то?

Техническое описание может прочитать любой желающий. Вопрос в том, куда отправляются данные?
Специально прикреплены изображения, показывающие отправку данных при использовании тестового кода.



 
Видно, что данные отправляются на сервер брокера.

Итак, новый вопрос, какие данные отправляются брокеру в таком большом количестве?


 

Почему в этой ветке форума такое молчание? Кому-нибудь, кроме меня, не все равно?

Сотни мегабайт данных отправляются через терминал с использованием ChartSetSymbolPeriod.


 

всем интересно, но наверно нет таких данных.

Поэтому ждем, может кто-то что-то поймет. 

 
Предположение. Вы вызываете функцию в OnCalculate без условий, тем самым порождаете лавину запросов. Попробуйте запустить её в OnInit или с условием разово. Не проверял, но думаю наши мегабайты кому-то скорее напряг, чем радость.
 
Aleksei Stepanenko #:
Предположение. Вы вызываете функцию в OnCalculate без условий, тем самым порождаете лавину запросов. Попробуйте запустить её в OnInit или с условием разово. Не проверял, но думаю наши мегабайты кому-то скорее напряг, чем радость.

Да, вы правильно ответили. 

Вопрос не в том, правильно ли я использую эту функцию.  Вопрос, какие данные отправляются, и почему в таком большом количестве?
В текущем описании не указаны ограничения на использование, а функциональность фактически допускает атаку на сервер брокера.

Обновлено.
Проблема с отправкой большого количества данных наблюдается, если в профиле терминала есть несколько окон графиков торговых инструментов с прикрепленными разными индикаторами. Я не понимаю, как это может повлиять на функцию 'ChartSetSymbolPeriod', если она вызывается с 'Chart ID', что фактически означает, что другие окна графиков не затронуты.

Если в терминале открыт график одного торгового инструмента и к нему добавлен индикатор, в котором 'OnCalculate' вызывает 'ChartSetSymbolPeriod', то проблемы не наблюдается.

 
Lilita Bogachkova #:

Да, вы правильно ответили. 

Вопрос не в том, правильно ли я использую эту функцию.  Вопрос, какие данные отправляются, и почему в таком большом количестве?
В текущем описании не указаны ограничения на использование, а функциональность фактически допускает атаку на сервер брокера.

Обновлено.
Проблема с отправкой большого количества данных наблюдается, если в профиле терминала есть несколько окон графиков торговых инструментов с прикрепленными разными индикаторами. Я не понимаю, как это может повлиять на функцию 'ChartSetSymbolPeriod', если она вызывается с 'Chart ID', что фактически означает, что другие окна диаграмм не затронуты.

Если в терминале открыт график одного торгового инструмента и к нему добавлен индикатор, в котором 'OnCalculate' вызывает 'ChartSetSymbolPeriod', то проблемы не наблюдается.

из ряда вон как бы....

нельзя использовать эту функцию на каждом тике, тем более ничего не меняя по сути

при подаче такой команды происходит синхронизация измененного символа на графике с сервером

того же самого в Вашем случае
 
Lilita Bogachkova:

Помогите понять что это?
При использовании 'ChartSetSymbolPeriod' куда отправляются данные?


Поставьте условие перед ChartSetSymbolPeriod

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[])
  {
//--- start calculation
if(ChartPeriod(ChartID()) != PERIOD_D1)                 // или другой
  ChartSetSymbolPeriod(ChartID(),Symbol(),PERIOD_D1);   // нужный период
//--- return value of prev_calculated for next call
   return(rates_total);
  }
 
Alexey Viktorov #:

Поставьте условие перед ChartSetSymbolPeriod

а почему не в OnInit ?

ТФ же может поменяться только при переключении ТФ-мов либо при запуске

при этом в любом случае вызовется выполнение OnInit

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