Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 1355

 
Ich hab's. Liebe Kolleginnen und Kollegen, ich danke Ihnen für Ihre Hilfe.
 
Oleg Kolesov #:

SanAlex, danke für deine Hilfe. Ich bin ein wenig verwirrt. Nicht die Puffernummer, sondern der Farbindex?

In Indikator.

Im Expert Advisor. 3 -Farben. 3 Situationen.

Ich kenne mich nicht sehr gut aus, aber es scheint mir, dass Sie 0-1-2 hinzufügen oder ändern müssen.

//+------------------------------------------------------------------+
//| main function returns true if any position processed             |
//+------------------------------------------------------------------+
bool CSampleExpert::Processing(void)
  {
//--- refresh rates
   if(!m_symbol.RefreshRates())
      return(false);
//--- refresh indicators
   if(BarsCalculated(m_handle_macd)<2)
      return(false);
   if(CopyBuffer(m_handle_macd,1,0,2,m_buff_MACD_main)  !=2)
      return(false);
//   m_indicators.Refresh();
//--- to simplify the coding and speed up access
//--- data are put into internal variables
   m_macd_current   =m_buff_MACD_main[0];
   m_macd_previous  =m_buff_MACD_main[1];
   m_macd_previous_2  =m_buff_MACD_main[2];

Und hier müssen Sie es aufheben, wenn Sie drei Farben verwenden.

//+------------------------------------------------------------------+
//| Check for short position opening                                 |
//+------------------------------------------------------------------+
bool CSampleExpert::ShortOpened(void)
  {
   bool res=false;
//--- check for short position (SELL) possibility
   if(m_macd_current>m_macd_previous)  ---- тут m_macd_previous_2  >  <



     {
 

Um das Rad nicht neu zu erfinden, geben Sie mir eine Lösung.

Es gibt eine csv-Datei mit folgendem Inhalt:
1,2,3
4,5,6
7,8,9

Ich muss ein Array erhalten:
[
[1 2 3]
[4 5 6]
[7 8 9]
]

 

Hallo. Meine Herren erfahrenen Programmierer, bitte um Rat. Wie färbt man eine Linie? Die Bedingung while >= blau, while <= rot.

Dateien:
ss9e1.png  16 kb
 
Oleg Kolesov #:

Hallo. Meine Herren erfahrenen Programmierer, bitte um Rat. Wie färbt man eine Linie? Die Bedingung while >= blau, while <= rot.

Verwenden Sie den ZeichenstilDRAW_COLOR_LINE

Документация по MQL5: Пользовательские индикаторы / Стили индикаторов в примерах / DRAW_COLOR_LINE
Документация по MQL5: Пользовательские индикаторы / Стили индикаторов в примерах / DRAW_COLOR_LINE
  • www.mql5.com
DRAW_COLOR_LINE - Стили индикаторов в примерах - Пользовательские индикаторы - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Vladimir Ich verwende den ZeichenstilDRAW_COLOR_LINE. Was ist mit den Bedingungen while >= blau, while <= rot zu tun. Eine Schleife in einer Schleife?

ArrayBsearch? ArraySort?

Документация по MQL5: Пользовательские индикаторы / Стили индикаторов в примерах / DRAW_COLOR_LINE
Документация по MQL5: Пользовательские индикаторы / Стили индикаторов в примерах / DRAW_COLOR_LINE
  • www.mql5.com
DRAW_COLOR_LINE - Стили индикаторов в примерах - Пользовательские индикаторы - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Oleg Kolesov #:
Vladimir Ich verwende den ZeichenstilDRAW_COLOR_LINE. Was ist mit den Bedingungen while >= blau, while <= rot zu tun. Eine Schleife in einer Schleife?

ArrayBsearch? ArraySort?

Setzen Sie eine Bedingung in Zeile 130.

 

Ich habe es ein wenig aufgeräumt:

//+------------------------------------------------------------------+
//|                                                           V2.mq5 |
//|                                                            Koles |
//|                                             www.koles-33@mail.ru |
//+------------------------------------------------------------------+
#property copyright "Koles"
#property link      "www.koles-33@mail.ru"
#property version   "3.00"
#property indicator_chart_window
#property indicator_buffers 2            // Количество буферов
#property indicator_plots   1            //  
//---- plot
#property indicator_label1  "малый"
#property indicator_type1   DRAW_COLOR_LINE
#property indicator_color1  clrDeepSkyBlue,clrDimGray,clrRed
#property indicator_style1  STYLE_DOT
#property indicator_width1  1
//---- input parameters
input int Period1=24;                                             // Period1
input int PeriodSh=2;                                             // PeriodSh
//-------------------------------------------------------------------+
double level1[];
double levelcol1[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   IndicatorSetInteger(INDICATOR_DIGITS,Digits());                  // Точки после запятой
//---
   SetIndexBuffer(0,level1,INDICATOR_DATA);                        // Назначение массива буферу
   SetIndexBuffer(1,levelcol1,INDICATOR_COLOR_INDEX);
//--- задаем количество индексов цветов для графического построения
   PlotIndexSetInteger(0,PLOT_COLOR_INDEXES,3);
//--- задаем цвет для каждого индекса
   PlotIndexSetInteger(0,PLOT_LINE_COLOR,0,clrDeepSkyBlue);
   PlotIndexSetInteger(0,PLOT_LINE_COLOR,1,clrDimGray);
   PlotIndexSetInteger(0,PLOT_LINE_COLOR,2,clrRed);
//---  короткое имя индикатора
   string short_name="V2("+IntegerToString(Period1)+","+IntegerToString(PeriodSh)+")";
//---
   IndicatorSetString(INDICATOR_SHORTNAME,short_name);
   PlotIndexSetString(0,PLOT_LABEL,"малый");
//---
   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(rates_total<Period1+1)
      return(0);
//--- индексация элементов в массивах как в таймсериях
   ArraySetAsSeries(high,true); // Смена направления индексации
   ArraySetAsSeries(low,true);
   ArraySetAsSeries(close,true);
   ArraySetAsSeries(level1,true);
   ArraySetAsSeries(levelcol1,true);
//--- объявления локальных переменных
   int i,limit;
   double max1,min1;      //
   double v1;
//--- расчёт стартового номера limit для цикла пересчёта баров
   if(prev_calculated==0)                     // проверка на первый старт расчёта индикатора
      limit=rates_total-Period1-1;            // стартовый номер для расчёта всех баров
   else
      limit=rates_total-prev_calculated;      // стартовый номер для расчёта новых баров
//--- основной цикл расчёта индикатора
   for(i=limit; i>=0; i--)
     {
      max1=high[ArrayMaximum(high,i+1,Period1)];
      min1=low[ArrayMinimum(low,i+1,Period1)];
      //---------------------------------------------+
      v1=(max1-min1)/2.0;                                           // Половина волатильности
      //---------------------------------------------+
      level1[i]=max1-v1;
      //---------------------------------------------+
      if(level1[i]>level1[i+PeriodSh])
         levelcol1[i]=0.0;
      if(level1[i]==level1[i+PeriodSh])
         levelcol1[i]=1.0;
      if(level1[i]<level1[i+PeriodSh])
         levelcol1[i]=2.0;
     }  //--- Возвращаемое значение prev_calculated для следующего вызова
   return(rates_total);
  }
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+


Der Code funktioniert, er ändert die Farbe.

 

Ich habe drei Tage lang darüber gegrübelt. Ist die Wohnung links DimGray? Brauchen, wenn oben oder gleich blau. Wenn unten oder gleich rot.

if(level1[i]==level1[i+PeriodSh])
         levelcol1[i]=1.0;
 
Oleg Kolesov #:

Ich bin schon seit drei Tagen verwirrt. Ist die Wohnung links DimGray? Brauchen, wenn oben oder gleich blau. Wenn niedriger oder gleich rot.

Doppelte Zahlen können nicht mit '==' verglichen werden(siehe Referenz).

Es sollte so verglichen werden:

bool CompareDoubles(double number1,double number2)
  {
   if(NormalizeDouble(number1-number2,8)==0) 
      return(true);
   else 
      return(false);
  }
void OnStart()
  {
   double d_val=0.3;
   float  f_val=0.3;
   if(CompareDoubles(d_val,f_val)) 
      Print(d_val,"equals",f_val);
   else 
      Print("Different: d_val = ",DoubleToString(d_val,16),"  f_val = ",DoubleToString(f_val,16));
// Результат: Different: d_val= 0.3000000000000000   f_val= 0.3000000119209290
  }


So steht es auch im Indikator:

//+------------------------------------------------------------------+
//|                                                           V2.mq5 |
//|                                                            Koles |
//|                                             www.koles-33@mail.ru |
//+------------------------------------------------------------------+
#property copyright "Koles"
#property link      "www.koles-33@mail.ru"
#property version   "3.00"
#property indicator_chart_window
#property indicator_buffers 2            // Количество буферов
#property indicator_plots   1            //  
//---- plot
#property indicator_label1  "малый"
#property indicator_type1   DRAW_COLOR_LINE
#property indicator_color1  clrDeepSkyBlue,clrDimGray,clrRed
#property indicator_style1  STYLE_DOT
#property indicator_width1  1
//---- input parameters
input int Period1=24;                                             // Period1
input int PeriodSh=2;                                             // PeriodSh
//-------------------------------------------------------------------+
double level1[];
double levelcol1[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   IndicatorSetInteger(INDICATOR_DIGITS,Digits());                  // Точки после запятой
//---
   SetIndexBuffer(0,level1,INDICATOR_DATA);                        // Назначение массива буферу
   SetIndexBuffer(1,levelcol1,INDICATOR_COLOR_INDEX);
//--- задаем количество индексов цветов для графического построения
   PlotIndexSetInteger(0,PLOT_COLOR_INDEXES,3);
//--- задаем цвет для каждого индекса
   PlotIndexSetInteger(0,PLOT_LINE_COLOR,0,clrDeepSkyBlue);
   PlotIndexSetInteger(0,PLOT_LINE_COLOR,1,clrDimGray);
   PlotIndexSetInteger(0,PLOT_LINE_COLOR,2,clrRed);
//---  короткое имя индикатора
   string short_name="V2("+IntegerToString(Period1)+","+IntegerToString(PeriodSh)+")";
//---
   IndicatorSetString(INDICATOR_SHORTNAME,short_name);
   PlotIndexSetString(0,PLOT_LABEL,"малый");
//---
   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(rates_total<Period1+1)
      return(0);
//--- индексация элементов в массивах как в таймсериях
   ArraySetAsSeries(high,true); // Смена направления индексации
   ArraySetAsSeries(low,true);
   ArraySetAsSeries(close,true);
   ArraySetAsSeries(level1,true);
   ArraySetAsSeries(levelcol1,true);
//--- объявления локальных переменных
   int i,limit;
   double max1,min1;      //
   double v1;
//--- расчёт стартового номера limit для цикла пересчёта баров
   if(prev_calculated==0)                     // проверка на первый старт расчёта индикатора
      limit=rates_total-Period1-1;            // стартовый номер для расчёта всех баров
   else
      limit=rates_total-prev_calculated;      // стартовый номер для расчёта новых баров
//--- основной цикл расчёта индикатора
   for(i=limit; i>=0; i--)
     {
      max1=high[ArrayMaximum(high,i+1,Period1)];
      min1=low[ArrayMinimum(low,i+1,Period1)];
      //---------------------------------------------+
      v1=(max1-min1)/2.0;                                           // Половина волатильности
      //---------------------------------------------+
      level1[i]=max1-v1;
      //---------------------------------------------+
      levelcol1[i]=0.0;
      if(level1[i]>level1[i+PeriodSh])
        {
         levelcol1[i]=0.0;
         continue;
        }
      if(CompareDoubles(level1[i],level1[i+PeriodSh]))
        {
         levelcol1[i]=1.0;
         continue;
        }
      if(level1[i]<level1[i+PeriodSh])
        {
         levelcol1[i]=2.0;
         continue;
        }
     }  //--- Возвращаемое значение prev_calculated для следующего вызова
   return(rates_total);
  }
//+------------------------------------------------------------------+
//| CompareDoubles                                                   |
//+------------------------------------------------------------------+
bool CompareDoubles(double number1,double number2)
  {
   if(NormalizeDouble(number1-number2,8)==0)
      return(true);
   else
      return(false);
  }
//+------------------------------------------------------------------+


Ergebnis:

Документация по MQL5: Основы языка / Типы данных / Вещественные типы (double, float)
Документация по MQL5: Основы языка / Типы данных / Вещественные типы (double, float)
  • www.mql5.com
Вещественные типы (double, float) - Типы данных - Основы языка - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
Grund der Beschwerde: