Реально ли нанести автономный символ на график советником МТ4

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Yurij Izyumov
44984
Yurij Izyumov  

Предположим советник создает offline тобишь автономный график с хрен пойми каким символом и периодом - нестандартные

но создать то это пол дела или даже меньше - советник может ли открыть его сам ? автоматом сразу после создания

на сколько я понял такие команды как 

ChartSetSymbolPeriod(0, ChartName, curPeriod);
или
ChartOpen(ChartName, curPeriod);

открывают / переоткрывают только символы которые доступны в "обзоре рынка" и стандартные периоды, а автономные графики никак не доступны для советника разве что только читать файл истории 

или я что то не понимаю

Sergey Kolemanov
1020
Sergey Kolemanov  
Yurij Izyumov:

Предположим советник создает offline тобишь автономный график с хрен пойми каким символом и периодом - нестандартные

но создать то это пол дела или даже меньше - советник может ли открыть его сам ? автоматом сразу после создания

на сколько я понял такие команды как 

открывают / переоткрывают только символы которые доступны в "обзоре рынка" и стандартные периоды, а автономные графики никак не доступны для советника разве что только читать файл истории 

или я что то не понимаю

https://www.mql5.com/ru/code/14714

Тиковый график
Тиковый график
  • www.mql5.com
Возможно, вам, как и мне, иногда нужно оценить скоротечность движения цены и разницу объемов сделок на покупку и продажу внутри ценовой свечи. В такие моменты я вспоминаю о тиковом графике. Существуют различные программы-сборщики тиков, но я не нашел простой в использовании и подходящей для анализа. Представляемый вашему вниманию индикатор...
Yurij Izyumov
44984
Yurij Izyumov  
int chart = -1;
int hwnd=WindowHandle(ChartName, curPeriod);
if(hwnd==0){
    chart=ChartOpen(ChartName, curPeriod);
}
PostMessageA(hwnd,WM_COMMAND,33324,0);
Print(hwnd+"  "+chart+"  "+ChartName+"  "+curPeriod);


вывод // : 0  0  USDBTC_Pol  120

Эммм чего то не хватает что ли не пойму , вроде выдает id окна 0 значит в теории открыл, но не открыл жеж 

а PostMessageA  вообще не понимаю что это такое и нужно ли оно , что с ним что без него 

ааа нет, 0 значит не открыл GetLastError выдает 4024 
Yurij Izyumov
44984
Yurij Izyumov  
не понимаю если у меня есть нестандартный GBPUSD M2 к примеру то открывает без проблем, но если открываю USDBTC_Pol   так сказать - то не открывает
Sergey Kolemanov
1020
Sergey Kolemanov  
Yurij Izyumov:

Эммм чего то не хватает что ли не пойму , вроде выдает id окна 0 значит в теории открыл, но не открыл жеж 

а PostMessageA  вообще не понимаю что это такое и нужно ли оно , что с ним что без него 

ааа нет, 0 значит не открыл GetLastError выдает 4024 

Нет времени проверять...На вскидку:

1. USDBTC_Pol - этот символ транслирует ДЦ? Откройте меню "Файл" => "Открыть автономно" , если в списке нет Вашего графика , то Вы его offline скорее всего не откроете.

2. PostMessageA - это функция WinAPI, используется для обновления графика, т.к. offline графики сами по себе не обновляются.

Igor Makanu
9877
Igor Makanu  
Sergey Kolemanov:

 т.к. offline графики сами по себе не обновляются.

проверенно, все работает, обновлять с помощью ChartSetSymbolPeriod()

https://docs.mql4.com/ru/chart_operations/chartsetsymbolperiod

ChartSetSymbolPeriod - Операции с графиками - Справочник MQL4
ChartSetSymbolPeriod - Операции с графиками - Справочник MQL4
  • docs.mql4.com
Меняет значения символа и периода указанного графика. Функция работает асинхронно, то есть отдает команду и не ждет окончания ее выполнения. Отданная команда поступает в очередь сообщений графика и выполняется только после обработки всех предыдущих команд. Возвращает true в случае удачного помещения команды в очередь графика, иначе false. Чтобы...
Sergey Kolemanov
1020
Sergey Kolemanov  
Igor Makanu:

проверенно, все работает, обновлять с помощью ChartSetSymbolPeriod()

https://docs.mql4.com/ru/chart_operations/chartsetsymbolperiod

Не знал, спасибо, всегда считал что она нужна для другого..

Yurij Izyumov
44984
Yurij Izyumov  
Sergey Kolemanov:

Нет времени проверять...На вскидку:

1. USDBTC_Pol - этот символ транслирует ДЦ? Откройте меню "Файл" => "Открыть автономно" , если в списке нет Вашего графика , то Вы его offline скорее всего не откроете.

2. PostMessageA - это функция WinAPI, используется для обновления графика, т.к. offline графики сами по себе не обновляются.

символ создается советником . открыть его руками возможно, но автомат что то выдает внутреннюю ошибку и ничего более

вот

Файлы:
Yurij Izyumov
44984
Yurij Izyumov  
Igor Makanu:

проверенно, все работает, обновлять с помощью ChartSetSymbolPeriod()

https://docs.mql4.com/ru/chart_operations/chartsetsymbolperiod

верю что работает но у меня почему то нет

может с заголовком что то , кто в них разбирается ?
Файлы:
JAson.mqh 31 kb
Yurij Izyumov
44984
Yurij Izyumov  
USDT_BTC  в настройках для теста выбрать 
Igor Makanu
9877
Igor Makanu  
Yurij Izyumov:

верю что работает но у меня почему то нет

может с заголовком что то , кто в них разбирается ?

Привет!

не охотав Вашем коде разбираться, в стандартном PeriodConverter должен быть пример вызова ChartSetSymbolPeriod(), я вроде дам подглядел пример и к себе перетянул, для себя сделал обнаружение открытого графика с помощью своей ф-ции:

long CheckChart(string sym,int period) , в качестве параметров передаю имя символа:

int OnInit()
  {
   if(symbol=="")
     {
      symbol_name=_Symbol;
........
chart_id=0;
.........
} // конец OnInit()

и период, у меня это внешняя переменная:            input int      TimeFrame               = 480;

код ф-ции:

//+------------------------------------------------------------------+
long CheckChart(string sym,int period)
  {
   long result=0,id=ChartFirst();
   while(id>=0)
     {
      if(ChartSymbol(id)==sym && ChartPeriod(id)==period && ChartGetInteger(id,CHART_IS_OFFLINE))
        {
         result=id;
         ChartSetInteger(id,CHART_AUTOSCROLL,true);
         ChartSetInteger(id,CHART_SHIFT,true);
         ChartNavigate(id,CHART_END);
         ChartRedraw(id);
         PrintFormat("Найдено окно графика: [%s,%d]",sym,period);
         break;
        }
      id=ChartNext(id);
     }
   return(result);
  }
//+------------------------------------------------------------------+

все работает как часы, вызываю так:

if(chart_id==0) chart_id=CheckChart(symbol_name,TimeFrame); else ChartSetSymbolPeriod(chart_id,symbol_name,TimeFrame);

12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий