Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 1525

 
Artyom Trishkin:

Werbung für eine Ressource Dritter und private Kanäle. Wenn ich nicht gewesen wäre, hätte man mich vielleicht verbannt.

Welche Anzeige? Ein Video-Tutorial zu dem, was gefragt wird.

 
Andrey Sokolov:

Welche Art von Werbung? Ein Video-Tutorial zu dem, was gefragt wird.

Videounterricht über die Schaltfläche
 
Was mache ich falsch?
int OnInit()
  {
//--- indicator buffers mapping
    SetIndexBuffer(0,Buy);
   SetIndexBuffer(1,Sell);  
   // Устанавливаем нулевые значения для индикатора, при которых не будет сигнальных стрелок
   SetIndexEmptyValue (0, 0);
   SetIndexEmptyValue (1, 0);
   //Определяем стиль отображения индикаторных линий - стрелка
   SetIndexStyle (0, DRAW_ARROW);
   SetIndexStyle (1, DRAW_ARROW); 
   // Установим значки "стрелки" для буферов
   SetIndexArrow(0, 234);  //Стрелка "вниз" для продаж
   SetIndexArrow(1, 233);  //Стрелка "вверх" для покупок
   //Устанавливаем текст описания стрелок индикатора для отображения информации в всплывающей подсказке.
   SetIndexLabel(0, "Продаём");
   SetIndexLabel(1, "Покупаем");
   //Определяем разрядность значений индикаторных линий - приравниваем разрядности фин. инструмента
   IndicatorDigits (Digits);
   //Строка с кратким названием индикатора выводится в сплывающей подсказке при наведении указателя мыши на стрелку
   IndicatorShortName ("Мой первый индикатор");
   
//---
   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[])
  {
//---
    int limit=rates_total-prev_calculated-5;
   if(limit<1) return(0);
   for(int i=limit;i>=0;i--)
     {
      // Снимем показания индикатора
     double in1b = iCustom(NULL,0,"in1",1,0); // индикатор 1 стрелка вверх
     double in1s = iCustom(NULL,0,"in1",0,0); // индикатор 1 стрелка вниз
     
     double in2b = iCustom(NULL,0,"in2",0,0); // индикатор 2 стрелка вверх
     double in2s = iCustom(NULL,0,"in2",1,0); // индикатор 2 стрелка вниз
     
     if (in1b/* && in2b*/)
           Buy[i]=high[i];
     if (in1s/* && in2s*/)
            
             Sell[i]=low[i];
   
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
 
jarikn:
Was mache ich falsch?
if (in1b)

Was? Mehr, weniger oder gleich... womit vergleichen Sie "in1b"?

 

Guten Tag zusammen. Ich versuche, meinem EA zusätzlich zu dem in der Risikogröße berechneten Gewinn einen festen Punktgewinn zuzuweisen. Der Gewinn in Risikogröße funktioniert gut. Aber es setzt einen unwirklichen Wert in Pips. Ich habe eine Auflistung dessen, was der Gewinn in der Risikogröße oder in Punkten sein wird

  enum enumTP //ПЕРЕЧИСЛЕНИЕ ДЛЯ ТЕЙК ПРОФИТА
  {
   en_fiks_tp = 1, // ФИКСИРОВАННЫЙ В ПУНКТАХ
   en_v_r = 0,  // В КОЛИЧЕСТВЕ Р
  };


Ich setze eine Variable, die die Gewinngröße in Punkten definiert.

extern int Razmer_tp = 1500; // ТЕЙК ПРОФИТ В ПУНКТАХ

Dann schreibe ich die folgende Gewinnberechnung und überprüfe ihre Korrektheit im On-Tick.

//+--НАЧАЛО РАСЧЁТА ПРОФИТА---------------------------------------------------------------------- Разделитель ---+

if(sl > 0 && Tip_tp == en_v_r) // ЕСЛИ ПРОФИТ В КОЛИЧЕСТВЕ Р
//{// НАЧАЛО ПРОВЕРКИ НА НОЛЬ
  tp=sl*tp_v_R; // ВЫЧИСЛЯЕМ ПРОФИТ УМНОЖАЯ СТОП ЛОС НА КОЛИЧЕСТВО РИСКА
  //-НАЧАЛО РАСЧЁТА ПРОФИТА В ПУНКТАХ---------------------------------------------------------------------------------------------+
  
  if(Tip_tp == en_fiks_tp)
  {//--НАЧАЛО ЕСЛИ ПРОФИТ В ПУНКТАХ---------------------------------------------------------------------------------------------+
  tp = Razmer_tp;  // ПРОФИТУ ПРИСВАЕВАЕМ КОЛИЧЕСТВО ПУНКТ
  
  }//---КОЕНЦ ЕСЛИ ПРОФИТ В ПУНКТАХ---------------------------------------------------------------------------------------------+
  tp= NormalizeDouble(tp, Digits());// НОРМАЛИЗУЕМ ПРОФИТ, ЧТОБЫ РАБОТАЛО НА ЛЮБЫХ КАТИРОВКАХ
  
  // ПРОВЕРКА ТЕЙК ПРОФИТА НА СТОП ЛЕВЕЛ ОТ МАКАРА--
  if(tp<stoplevel)                                                           // ЕСЛИ ПРОФИТ МЕНЬШЕ ЧЕМ МИНИМАЛЬНО ДОПУСТИМЫЙ УРОВЕНЬ ЕГО УСТАНОВКИ ТО
  {
         tp=NormalizeDouble(stoplevel*1.5,Digits); // ПРОФИТУ ПРИСВАЕВАЕМ МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ ЕГО УСТАНОВКИ
  }
  //} // КОНЕЦ ПРОВЕРКИ НА НОЛЬ 
  
  //+--КОНЕЦ РАСЧЁТА ПРОФИТА---------------------------------------------------------------------- Разделитель ---+


Für Gewinn in Risikogröße funktioniert es gut, aber nicht für festen Gewinn in Pips. Bitte beraten Sie mich, was ich falsch mache und was korrigiert werden sollte, damit die Gewinne in Pips richtig funktionieren?

 
DanilaMactep:

Guten Tag zusammen. Ich versuche, meinem EA zusätzlich zu dem in der Risikogröße berechneten Gewinn einen festen Punktgewinn zuzuweisen. Der Gewinn in Risikogröße funktioniert gut. Aber es setzt einen unwirklichen Wert in Pips. Ich habe eine Auflistung dessen, was der Gewinn in der Risikogröße oder in Punkten sein wird


Ich setze eine Variable, die die Gewinngröße in Punkten definiert.

Dann schreibe ich die folgende Gewinnberechnung und überprüfe ihre Korrektheit im On-Tick.


Für Gewinn in Risikogröße funktioniert es gut, aber nicht für festen Gewinn in Pips. Bitte teilen Sie mir mit, was ich falsch mache und was bei der Berechnung des Gewinns in Punkten korrigiert werden sollte?

Ich möchte Sie bitten, den Gewinn in Pips mit"Point" zu multiplizieren.

 
jarikn:
Was mache ich falsch?

Was machen Sie da?

 
MakarFX:

was? mehr, weniger oder gleich... womit vergleichen Sie "in1b"?

Ich habe die Schaltfläche " Screenshot hinzufügen ", von der Sie geschrieben haben, nicht, ich werde einen Screenshot auf diese Weise hinzufügen.

Ich habe es ein bisschen aufgeschrieben, aber es funktioniert immer noch nicht)

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[])
  {
//---
    int limit=rates_total-prev_calculated-
1 ;
   if(limit<1) return(0);
   for(int i=limit;i>=0;i--)
     {
     
      // Снимем показания индикатора
     double in1b = iCustom(NULL,0,"in1",1,1); // индикатор 1 стрелка вверх
     double in1s = iCustom(NULL,0,"in1",0,1); // индикатор 1 стрелка вниз
     
     double in2b = iCustom(NULL,0,"in2",0,0); // индикатор 2 стрелка вверх
     double in2s = iCustom(NULL,0,"in2",1,0); // индикатор 2 стрелка вниз
      Comment("in1b = "+in1b+"\n""in1s = "+in1s);
     if (in1b<999999 && in1s>999999)
           Sell[i]=low[i];
     if (in1s<999999 && in1b>999999)
            Buy[i]=high[i];
             
   
     }
     
//--- return value of prev_calculated for next call
   return(rates_total);
  }
Dateien:
 
jarikn:

Ich habe die Schaltfläche " Screenshot hinzufügen ", von der Sie geschrieben haben, nicht, ich werde einen Screenshot auf diese Weise hinzufügen.

Ich habe es schon ein bisschen gemacht, aber es funktioniert immer noch nicht)

Führen Sie Ihren Indikator in einem sauberen Diagramm aus, öffnen Sie das Datenfenster und machen Sie einen Screenshot.
 
Hier sind zum Beispiel 2 Indikatoren. Wenn ein Pfeil und ein Punkt auf einer Kerze erscheinen, brauchen wir ein Kaufsignal und umgekehrt.
Dateien:
in1.ex4  11 kb
in2.ex4  3 kb
Grund der Beschwerde: