Ошибки, баги, вопросы - страница 1793

 
fxsaber:

И возможно ли написать такую функцию?

Да, нужно реализовать конструктор и оператор копирования
 
Slawa:

Есть ошибка в построении типа DRAW_CANDLES после его обновления: делаю все как сказано здесь: https://www.mql5.com/ru/forum/23/page19#comment_2891050

Невозможно изменить тип построения (1-2-3) путем выбора через входные параметры. Код:

#property indicator_separate_window
#property indicator_plots 1
#property indicator_buffers 4                          
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
//--- Перечисление - новые типы отрисовки DRAW_CANDLE
enum ENUM_DRAW_CANDLE_TYPE
  {
   DRAW_CANDLE_TYPE_1,            // Один цвет: #1 - контуры и тела
   DRAW_CANDLE_TYPE_2,            // Два цвета: #1 - контуры, #2 - тела
   DRAW_CANDLE_TYPE_3             // Три цвета: #1 - контуры, #2 - восход., #3 - нисход.
  };
//---
double bufopen[];
double bufhigh[];
double buflow[];
double bufclose[];
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
input ENUM_DRAW_CANDLE_TYPE inpDrawCandleStyle=DRAW_CANDLE_TYPE_1;
input color inpClr1 = clrWhite;
input color inpClr2 = clrLime;
input color inpClr3 = clrRed;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- Привязываем буферы
   SetIndexBuffer(0,bufopen,INDICATOR_DATA);
   SetIndexBuffer(1,bufhigh,INDICATOR_DATA);
   SetIndexBuffer(2,buflow,INDICATOR_DATA);
   SetIndexBuffer(3,bufclose,INDICATOR_DATA);
//--- Устанавливаем тип графического построения
   PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_CANDLES);
//--- Устанавливаем пустые значения в буферах
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,EMPTY_VALUE);
//--- Устанавливаем цвета индикатора
   switch(inpDrawCandleStyle) // В зависимости от типа построения свечей
     {
      case DRAW_CANDLE_TYPE_1:                                          // Если все свечи одним цветом
         ////--- Устанавливаем количество цветов стиля (не помогает)
         //PlotIndexGetInteger( 0, PLOT_COLOR_INDEXES, 1 );
         //---
         PlotIndexSetInteger(0,PLOT_LINE_COLOR,0,inpClr1);
         break;
      case DRAW_CANDLE_TYPE_2:                                          // Если контуры цветом #1, а тела - цветом #2
         ////--- Устанавливаем количество цветов стиля (не помогает)
         //PlotIndexGetInteger( 0, PLOT_COLOR_INDEXES, 2 );
         //--- Устанавливаем цвет индикатора
         PlotIndexSetInteger(0,PLOT_LINE_COLOR,0,inpClr1);
         PlotIndexSetInteger(0,PLOT_LINE_COLOR,1,inpClr2);
         break;
      case DRAW_CANDLE_TYPE_3:                                          // Если контуры цветом #1, восх - #2, нисх - #3
         ////--- Устанавливаем количество цветов стиля (не помогает)
         //PlotIndexGetInteger( 0, PLOT_COLOR_INDEXES, 3 );
         //--- Устанавливаем цвет индикатора
         PlotIndexSetInteger(0,PLOT_LINE_COLOR,0,inpClr1);
         PlotIndexSetInteger(0,PLOT_LINE_COLOR,1,inpClr2);
         PlotIndexSetInteger(0,PLOT_LINE_COLOR,2,inpClr3);
         break;
      default:                                                         // Если тип построения не определен
         Print(__FUNCTION__,": ОШИБКА! Неизвестный тип построения свечей '"+EnumToString(inpDrawCandleStyle)+"'");
         return(INIT_FAILED);                                          // Выходим с ошибкой
     }
//---
   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[])
  {
//---
   if(prev_calculated<=0)
      for(int i=0; i<rates_total; i++)
        {
         bufopen[ i ] = open[ i ];
         bufhigh[ i ] = high[ i ];
         buflow[i]=low[i];
         bufclose[i]=close[i];
        }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

В частности - первый тип (свечи + контуры первым цветом) работает нормально, на остальные не переключается.

Добавлено:

Если задавать цвета через директиву препроцессора - все нормально, но потом также невозможно изменить тип отрисовки DRAW_CANDLES. 

Список изменений в билдах MetaTrader 5 Client Terminal
Список изменений в билдах MetaTrader 5 Client Terminal
  • www.mql5.com
Автоматическое обновление доступно через систему LiveUpdate:.
 
Комбинатор:
Да, нужно реализовать конструктор и оператор копирования
К сожалению, такое решение работает только для кастомной структуры. В примере MqlTradeRequest.
 
Alexey Kozitsyn:

Есть ошибка в построении типа DRAW_CANDLES после его обновления: делаю все как сказано здесь: https://www.mql5.com/ru/forum/23/page19#comment_2891050

Невозможно изменить тип построения (1-2-3) путем выбора через входные параметры. Код: 

У вас ошибка в коде, использовать надо PlotIndexSetInteger:

         ////--- Устанавливаем количество цветов стиля (не помогает)
         PlotIndexSetInteger( 0, PLOT_COLOR_INDEXES, 3 );
 
fxsaber:
К сожалению, такое решение работает только для кастомной структуры. В примере MqlTradeRequest.
Тогда передавать структуру по ссылке в параметрах. Еще вариант это сделать свою копию структуры и кастовать, но это надо подумать как сделать красиво.
 
Anton:
У вас ошибка в коде, использовать надо PlotIndexSetInteger:

         ////--- Устанавливаем количество цветов стиля (не помогает)
         PlotIndexSetInteger( 0, PLOT_COLOR_INDEXES, 3 );
Блин, точно, спасибо!
 
Комбинатор:
Тогда передавать структуру по ссылке в параметрах. Еще вариант это сделать свою копию структуры и кастовать, но это надо подумать как сделать красиво.
Не понял.
 
fxsaber:
Не понял.
struct MyTradeRequest
{
  // копия MqlTradeRequest
  // + нужные операторы
};

// ...
MyTradeRequest request = Function();
MqlTradeResult = {0};
OrderSend((MqlTradeRequest)request, result);
// ...
Это просто идея, могут быть ошибки, писал прямо в браузере
 
Комбинатор:
struct MyTradeRequest
{
  // копия MqlTradeRequest
  // + нужные операторы
};

// ...
MyTradeRequest request = Function();
MqlTradeResult = {0};
OrderSend((MqlTradeRequest)request, result);
// ...
Это просто идея, могут быть ошибки, писал прямо в браузере
Идею понял. Но такой кастинг не прокатит же.
 
fxsaber:
Идею понял. Но такой кастинг не прокатит же.
почему?
Причина обращения: