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

 
Artyom Trishkin:

ChartIndicatorAdd()

Спасиб. Только здесь советник выводит на график не вписанный прямо в него индикатор. У меня вопрос о том как вывести отображение расчетов самого советника.

 
Andrey Sokolov:

Спасиб. Только здесь советник выводит на график не вписанный прямо в него индикатор. У меня вопрос о том как вывести отображение расчетов самого советника.

OBJ_LABEL

ObjectSetString - вводим данные

ObjectGetString - получаем данные


Как пример у меня




 
Andrey Sokolov:

Спасиб. Только здесь советник выводит на график не вписанный прямо в него индикатор. У меня вопрос о том как вывести отображение расчетов самого советника.

Брать Канву (CCanvas) и рисовать. Перевод времени и цены в координаты графика, с помощью ChartTimePriceToXY.

 
MakarFX:

На каком таймфрейме?

М1

 

Приветствую! Не могу понять, почему в такой конструкции выбор по SELECT_BY_TICKET не работает, в отличии от SELECT_BY_POS.

void Ticket_Limits (int magic ){


int _GetLastError = 0, k = OrdersTotal();
        Ticket_Total = 0;
        
// изменяем размеры массивов под текущее кол-во позиций
        // (если _OrdersTotal = 0, меняем размер массивов на 1)
        int temp_value = MathMax( k, 1 );
        ArrayResize( _Tacket,                   temp_value );
        ArrayResize( _Type,                        temp_value );
        ArrayResize( _OpenPrice,                temp_value );   
        // обнуляем массивы
        ArrayInitialize( _Tacket,               0 );
        ArrayInitialize( _Type,                 0 );
        ArrayInitialize( _OpenPrice,    0 );
        
        for ( int z = k-1;z>=0; z -- )
        {

           Print("z =",z);
                if (!OrderSelect( z, SELECT_BY_POS ))
                {
                        _GetLastError = GetLastError();
                        Print( "OrderSelect( ", z, ", SELECT_BY_TICKET  ) - Error #", _GetLastError );
                        continue;
                }
                if ( OrderMagicNumber() == magic && OrderSymbol() == Symbol() )
                {
                        // заполняем массивы
                        _Tacket               [Ticket_Total] = OrderTicket();
                        _Type                         [Ticket_Total] = OrderType();
                        _OpenPrice                      [Ticket_Total] = NormalizeDouble( OrderOpenPrice(), _Digits );
                        Ticket_Total++;
                        Print("_Tacket === ",_Tacket[z]," _Type === ",_Type[z]," _OpenPrice === ",_OpenPrice[z]);
                }
          
        }               
        // изменяем размеры массивов под кол-во позиций, принадлежащих эксперту
        // (если Ticket_Total = 0, меняем размер массивов на 1)
        temp_value = MathMax( Ticket_Total, 1 );
        ArrayResize( _Tacket,                   temp_value );
        ArrayResize( _Type,                        temp_value );
        ArrayResize( _OpenPrice,                temp_value );
} 
 
Ребята привет! Извиняюсь если не в тему обращаюсь: помогите- как сделать что бы на телефоне в МТ4 накинутый индюк, например мувинг, на тайм фрем м15 не был виден на этой же паре на тайм фреме м5 или на любом другом ТФ. 
 
MakarFXMihail Matkovskij
спасиб. Но вопрос немного не об этом. А о том как советником отрисовать данные из массивов, как-то как из индикаторных буферов, чтоб не объектами, если это возможно.
 
Andrey Sokolov:
MakarFXMihail Matkovskij
спасиб. Но вопрос немного не об этом. А о том как советником отрисовать данные из массивов, как-то как из индикаторных буферов, чтоб не объектами, если это возможно.

С помощью CCanvas можно рисовать, что угодно. Копируете время (с помощью CopyTime) и данные массива (чтобы ячейка в массиве time чётко соответствовала ячейке в вашем массиве data). Переводите их в пиксели с помощью  ChartTimePriceToXY и всё. Рисуйте хоть точки, хоть линии, хоть другие примитивы, хоть стрелки выводите (шрифт Windings) по полученным координатам. В CCanvas есть для этого все методы. Достаточно создать Канвас на весь экран и можете что угодно рисовать, полная свобода действий. Но при этом Канвас нужно постоянно перерисовывать в OnChartEvent (id: CHARTEVENT_CHART_CHANGE). В общем, для начала вам нужно научиться работать с CCanvas. Но если вы в программировании новичок, и изучать всё это вам лень, то тогда Фриланс вам в помощь.

 
Galim_V:

Приветствую! Не могу понять, почему в такой конструкции выбор по SELECT_BY_TICKET не работает, в отличии от SELECT_BY_POS.

Потому, что SELECT_BY_TICKET выбирает ордер по его тикету. А вы их по порядку выбираете (SELECT_BY_POS). Для выбора ордеров по тикетам сообщайте тикеты в функцию OrderSelect, а не индексы.

 
Mihail Matkovskij:

С помощью CCanvas можно рисовать, что угодно. Копируете время (с помощью CopyTime) и данные массивов (чтобы ячейка в массиве time чётко соответствовала ячейке в вашем массиве data). Переводите их в пиксели с помощью  ChartTimePriceToXY и всё. Рисуйте хоть точки, хоть линии, хоть другие примитивы, хоть стрелки выводите (шрифт Windings) по полученным координатам. В CCanvas есть для этого все методы. Достаточно создать Канвас на весь экран и можете что угодно рисовать, полная свобода действий. Но при этом Канвас нужно постоянно перерисовывать в OnChartEvent (id: CHARTEVENT_CHART_CHANGE). В общем, для начала вам нужно изучить как работать с CCanvas. Но если вы в программировании новичок, и изучать всё это вам лень, то тогда Фриланс вам в помощь.

спасиб