Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 1525

 
Artyom Trishkin:

Publicidad de un recurso de terceros y canales privados. Si no fuera por mí, podrían haberme expulsado.

¿Qué anuncio? Un video tutorial sobre lo que se pide.

 
Andrey Sokolov:

¿Qué tipo de anuncio? Un video tutorial sobre lo que se pide.

Lecciones de vídeo a través del botón
 
¿Qué estoy haciendo mal?
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:
¿qué estoy haciendo mal?
if (in1b)

¿qué? más, menos o igual... con qué comparas "in1b"?

 

Buenas tardes a todos. Estoy tratando de adjuntar un beneficio de puntos fijos a mi EA además del beneficio calculado en el tamaño del riesgo. El beneficio en el tamaño del riesgo está funcionando bien. Pero establece un valor irreal en pips. Tengo un listado de lo que será el beneficio en el tamaño del riesgo o en puntos

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


Establezco una variable que define el tamaño del beneficio en puntos.

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

A continuación, escribo el siguiente cálculo de beneficios y compruebo su corrección en el 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); // ПРОФИТУ ПРИСВАЕВАЕМ МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ ЕГО УСТАНОВКИ
  }
  //} // КОНЕЦ ПРОВЕРКИ НА НОЛЬ 
  
  //+--КОНЕЦ РАСЧЁТА ПРОФИТА---------------------------------------------------------------------- Разделитель ---+


Para el beneficio en tamaño de riesgo funciona bien, pero no para el beneficio fijo en pips. Por favor, aconséjeme qué estoy haciendo mal y qué debería corregirse para que mi cálculo de beneficios funcione correctamente en puntos.

 
DanilaMactep:

Buenas tardes a todos. Estoy tratando de adjuntar una ganancia de puntos fijos a mi Asesor Experto, además de la ganancia calculada en el tamaño del riesgo. El beneficio en el tamaño del riesgo está funcionando bien. Pero establece un valor irreal en pips. Tengo un listado de lo que será el beneficio en el tamaño del riesgo o en puntos


Establezco una variable que define el tamaño del beneficio en puntos.

A continuación, escribo el siguiente cálculo de beneficios y compruebo su corrección en el on-tick.


Para el beneficio en tamaño de riesgo funciona bien, pero no para el beneficio fijo en pips. Por favor, aconséjenme qué estoy haciendo mal y qué debería corregirse a la hora de calcular el beneficio en puntos.

Me gustaría pedirle que multiplique el beneficio en pips por"Punto".

 
jarikn:
¿Qué estoy haciendo mal?

¿Qué estás haciendo?

 
MakarFX:

¿qué? más, menos o igual... con qué comparas "in1b"?

No tengo el botón de añadir captura de pantalla que has escrito, voy a añadir una captura de pantalla de esta manera.

Lo he escrito un poco pero sigue sin funcionar)

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);
  }
Archivos adjuntos:
 
jarikn:

No tengo el botón de añadir captura de pantalla que has escrito, añadiré una captura de pantalla de esta manera.

Lo he hecho un poco pero sigue sin funcionar)

Ejecute su indicador en un gráfico limpio, abra la ventana de datos y tome una captura de pantalla
 
Por ejemplo, aquí hay 2 indicadores. Cuando una flecha y un punto aparecen en una vela necesitamos una señal de compra y viceversa
Archivos adjuntos:
in1.ex4  11 kb
in2.ex4  3 kb