오류, 버그, 질문 - 페이지 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)을 변경할 수 없습니다. 코드:

코드에 오류가 있습니다. PlotIndex Set Integer 를 사용해야 합니다.

         ////--- Устанавливаем количество цветов стиля (не помогает)
         PlotIndex Set Integer ( 0 , PLOT_COLOR_INDEXES , 3 );
 
fxsaber :
불행히도 이 솔루션은 사용자 지정 구조에서만 작동합니다. MqlTradeRequest 예제에서.
그런 다음 매개변수에서 참조로 구조를 전달합니다. 또 다른 옵션은 구조와 캐스트의 복사본을 직접 만드는 것이지만 아름답게 만드는 방법에 대해 생각해야 합니다.
[삭제]  
Anton :
코드에 오류가 있습니다. PlotIndex Set Integer 를 사용해야 합니다.

         ////--- Устанавливаем количество цветов стиля (не помогает)
         PlotIndex Set Integer ( 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 :
나는 그 생각을 이해했다. 그러나 그러한 캐스팅은 작동하지 않습니다.
왜요?