Fehler, Irrtümer, Fragen - Seite 1793

 
fxsaber:

Und ist es möglich, eine solche Funktion zu schreiben?

Ja, Sie müssen einen Konstruktor und einen Kopieroperator implementieren
 
Slawa:

Es gibt einen Fehler im Zeichnungstyp DRAW_CANDLES, nachdem ich ihn aktualisiert habe: Ich mache alles wie hier beschrieben: https://www.mql5.com/ru/forum/23/page19#comment_2891050

Der Build-Typ (1-2-3) kann nicht durch Auswahl über Eingabeparameter geändert werden. Code:

#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);
  }
//+------------------------------------------------------------------+

Genauer gesagt: Der erste Typ (Kerzen + Konturen in der ersten Farbe) funktioniert einwandfrei, die anderen werden nicht angezeigt.

Hinzugefügt:

Wenn Sie Farben per Präprozessor-Direktive setzen - alles ok, aber dann auch unmöglich, den Zeichnungstyp DRAW_CANDLES zu ändern.

Список изменений в билдах MetaTrader 5 Client Terminal
Список изменений в билдах MetaTrader 5 Client Terminal
  • www.mql5.com
Автоматическое обновление доступно через систему LiveUpdate:.
 
Комбинатор:
Ja, wir müssen einen Konstruktor und einen Kopieroperator implementieren
Leider funktioniert diese Lösung nur bei benutzerdefinierten Strukturen. Im Beispiel von MqlTradeRequest.
 
Alexey Kozitsyn:

Es gibt einen Fehler im Zeichnungstyp DRAW_CANDLES, nachdem ich ihn aktualisiert habe: Ich mache alles wie hier beschrieben: https://www.mql5.com/ru/forum/23/page19#comment_2891050

Der Build-Typ (1-2-3) kann nicht durch Auswahl über Eingabeparameter geändert werden. Code:

Sie haben einen Fehler in Ihrem Code, Sie sollten PlotIndexSetInteger verwenden:

         ////--- Устанавливаем количество цветов стиля (не помогает)
         PlotIndexSet Integer( 0, PLOT_COLOR_INDEXES, 3 );
 
fxsaber:
Leider funktioniert diese Lösung nur bei benutzerdefinierten Strukturen. In dem Beispiel MqlTradeRequest.
Dann übergeben Sie die Struktur per Referenz in Parametern. Eine andere Möglichkeit ist, eine eigene Kopie der Struktur zu machen und sie zu gießen, aber wir müssen uns überlegen, wie wir sie schön gestalten.
 
Anton:
Sie haben einen Fehler in Ihrem Code, Sie sollten PlotIndexSetInteger verwenden:

         ////--- Устанавливаем количество цветов стиля (не помогает)
         PlotIndexSet Integer( 0, PLOT_COLOR_INDEXES, 3 );
Oh ja, richtig, danke!
 
Комбинатор:
Dann übergeben Sie die Struktur per Referenz in den Parametern. Eine andere Möglichkeit besteht darin, eine eigene Kopie der Struktur und des Gusses anzufertigen, aber man muss sich überlegen, wie man das am besten macht.
Das verstehe ich nicht.
 
fxsaber:
Das verstehe ich nicht.
struct MyTradeRequest
{
  // копия MqlTradeRequest
  // + нужные операторы
};

// ...
MyTradeRequest request = Function();
MqlTradeResult = {0};
OrderSend((MqlTradeRequest)request, result);
// ...
Es ist nur eine Idee, es kann Fehler geben, ich habe direkt im Browser geschrieben
 
Комбинатор:
struct MyTradeRequest
{
  // копия MqlTradeRequest
  // + нужные операторы
};

// ...
MyTradeRequest request = Function();
MqlTradeResult = {0};
OrderSend((MqlTradeRequest)request, result);
// ...
Es ist nur eine Idee, es kann Fehler geben, ich habe direkt im Browser geschrieben
Ich verstehe die Idee. Aber diese Art von Casting wird nicht funktionieren, oder?
 
fxsaber:
Ich verstehe die Idee. Aber diese Art von Casting wird nicht funktionieren.
Warum nicht?