Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 662

 
Bueno, ¿alguien tiene ya un RSI iMAOnArray listo para usar?
 
berezhnuy:
Bueno, ¿alguien tiene ya un RSI iMAOnArray listo para usar?

Ya veo por qué nadie te ha respondido con mucha "ayuda"...
 
berezhnuy:
Bueno, ¿alguien tiene ya un RSI iMAOnArray listo para usar?

hay uno en el kodobase, sólo tienes que buscarlo
 
Compañeros. Decidí hacer una simple pantalla de absorción para practicar. Pero al final hubo un problema que si cambio el timeframe en el gráfico y vuelvo al timeframe con la absorción, la alerta se dispara de nuevo. Encontré una opción para alertar sólo una vez por barra, pero de nuevo todo se reinicia cuando cambio de marco temporal.
if (Bars != ThisBarTrade ) {
   ThisBarTrade = Bars;  // ensure only one trade opportunity per bar
   // Trade logic goes here
}
Aquí está el código en sí, sin dibujos gráficos, sólo la lógica. ¿Cómo corregirlo?
   if(engulfAlerter && Open[2]>Close[2] && Open[1]<Close[1] && Close[1]>Open[2])
      {
         Alert("Bullish Engulf");
      }
   if(engulfAlerter && Open[2]<Close[2] && Open[1]>Close[1] && Close[1]<Open[2])
      {
         Alert("Bearish Engulf");
      }
P.D. El inductor reinicia la condicional "ThisBarTrade" durante la desinicialización mientras se cambia a otros marcos temporales.
 

¿Pueden decirme cómo separar el billete para comprarlo y venderlo por separado?

ticket=Enviar orden("EURUSD",OP_SELL,SellLot,Bid,3,0,0,",MAGICMA,0,Red);


si no

{

OrderSelect(ticket-3,SELECT_BY_POS,MODE_TRADES);

OrderClose(ticket-3,SellLot,Ask,3,Red);


}

ticket-3 especialmente, el comercio de TK es una especie de precio promediado a través de múltiples órdenes ) pero ¿cómo puedo separar los boletos de compra de los boletos de venta ? para que pueda tomar una orden que se abrió hace 3 bahías ) También para vender

 

(¡Hola amigos!) Tengo un problema de este tipo:

escribí un prog que abre una plantilla (con los indicadores y el objeto gráfico que necesito) al inicio, luego analiza los datos y negocia. cuando sólo lo ejecuto en un gráfico, todo funciona bien. cuando lo ejecuto en un probador, sólo funciona cuando se visualiza. entiendo que la plantilla sólo puede cargarse en un gráfico visualmente abierto... así que no funciona en el modo de prueba normal, porque sólo se ejecuta en el gráfico sin cargar la plantilla... ¿Y qué pasa con la optimización? Tengo bastantes parámetros, y de alguna manera es muy poco razonable ejecutar cada opción manualmente con la visualización.

ayuda plz)) ¿cómo se puede resolver el problema con la optimización y la plantilla?

 
evillive:

Puntuación ))))


Pero no escribí en MQL, sino formalmente, ese es el problema (:

¿Y cómo se puede determinar?

Como el número de valores es muy limitado, podemos comprobarlo con una fuerza bruta directa:

#property strict

/******************************************************************************/
void fun1(int const A) {
  Print("fun1()");

  if (A == 0 || A == 1) {
    Print("fun1 do!");
  }
}

/******************************************************************************/
void fun2(int const A) {
  Print("fun2()");

  if (A != 2) {
    Print("fun2 do!");
  }
}

/******************************************************************************/
void Гарантия_0_1_2(int const A) {
  switch (A) {
  case 0:
  case 1:
  case 2:
    fun1(A);
    fun2(A);
    break;
  default:
    Print("Не соблюдены условия (теоремы)");
  }
}

/******************************************************************************/
void OnStart() {
  for (int A = 0, limit = 4; A < limit; A++) {
    Print("Проверяем для A = ", A);
    Гарантия_0_1_2(A);
  }
}

Aquí tenemos:

22:52:38 Script 3 EURUSDm,H1: loaded successfully
22:52:38 3 EURUSDm,H1: initialized
22:52:38 3 EURUSDm,H1: Проверяем для A = 0
22:52:38 3 EURUSDm,H1: fun1()
22:52:38 3 EURUSDm,H1: fun1 do!
22:52:38 3 EURUSDm,H1: fun2()
22:52:38 3 EURUSDm,H1: fun2 do!
22:52:38 3 EURUSDm,H1: Проверяем для A = 1
22:52:38 3 EURUSDm,H1: fun1()
22:52:38 3 EURUSDm,H1: fun1 do!
22:52:38 3 EURUSDm,H1: fun2()
22:52:38 3 EURUSDm,H1: fun2 do!
22:52:38 3 EURUSDm,H1: Проверяем для A = 2
22:52:38 3 EURUSDm,H1: fun1()
22:52:38 3 EURUSDm,H1: fun2()
22:52:38 3 EURUSDm,H1: Проверяем для A = 3
22:52:38 3 EURUSDm,H1: Не соблюдены условия (теоремы)
22:52:38 3 EURUSDm,H1: uninit reason 0
22:52:38 Script 3 EURUSDm,H1: removed

Resulta que son iguales. Si no hubiera 3, sino, digamos, 3 millones de valores, todavía se podría hacer una comprobación de la máquina: devolver los resultados de las funciones y compararlos. Si no se encuentra ninguna diferencia para todo el rango, entonces son iguales.

Si se utiliza una expresión en lugar de una variable, por ejemplo, una llamada a una función, la equivalencia se convierte en "equivalencia con reservas" debido al cortocircuito que supone el cálculo de expresiones lógicas.

 

Hola a todos.

Hizo un indicador basado en otro indicador.

El primer búfer cuenta como debería.

La segunda no: quiero que empiece a contar en cada barra después de "línea1 > 0".

Eso es básicamente lo que he hecho en mi Asesor Experto:

if (line1 > 0 && time ==0){time=Time[i+0];}//сработало предварительное условие входа, записываем время
if (time > 0)shift=iBarShift(Symbol(),Period(),i+time);//находим индекс бара

Y después de "shift >= shet", se activa la condición de dibujo.

Si cambio los parámetros externos de la variable "shet", no hay cambios en el indicador.

¿Cuál puede ser el problema?

Código del indicador:

#property indicator_buffers 2
#property indicator_color1 Lime 
#property indicator_color2 Red
//--- input parameters
extern int       Period_MA_r=14;
extern int       r2          =7;
extern int       Period_MA_1=46;
extern int       p2          =19;
extern int       shet=7;
extern int       s        =0;
//--- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexBuffer(0,ExtMapBuffer1);
   SetIndexStyle(0,DRAW_ARROW);
   SetIndexArrow(0,119);
   SetIndexEmptyValue(0,0.0);
   SetIndexBuffer(1,ExtMapBuffer2);
   SetIndexStyle(1,DRAW_ARROW);
   SetIndexArrow(1,119);
   SetIndexEmptyValue(1,0.0);
   IndicatorDigits(Digits+1);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int counted_bars=IndicatorCounted(),
   i,limit1,shift;
   limit1=Bars-counted_bars-1;
   double line1,signal_line;
   static datetime time;
   for(i=limit1;i>=0;i--) 
   {
   line1=0;
   signal_line=0;
   line1=iCustom(NULL,0,"indikator1",Period_MA_r,r2,1,i+0);
   signal_line=iCustom(NULL,0,"indikator2",Period_MA_1,p2,0,i+0);
   
   if (line1 > 0 && time ==0){time=Time[i+0];}//сработало предварительное условие входа, записываем время
   if (time > 0)shift=iBarShift(Symbol(),Period(),i+time);//находим индекс бара
   if (line1 == 0){time=0;}//если индикатор равен нолю, то время сбрасывается на ноль
   if (line1 > 0 && signal_line < s){ExtMapBuffer1[i]=Low[i]-95*Point;}
   if (line1 > 0 && shift >= shet && signal_line < s){ExtMapBuffer2[i]=High[i]+95*Point;}
   }
   return(0);
  }
//+------------------------------------------------------------------+
 
Forexman77:

Hola a todos.

Hizo un indicador basado en otro indicador.

El primer búfer cuenta como debería.

La segunda no: quiero que empiece a contar en cada barra después de "línea1 > 0".

Eso es básicamente lo que he hecho en mi Asesor Experto:

Y después de "shift >= shet", se activa la condición de dibujo.

Si cambio los parámetros externos de la variable "shet", no hay cambios en el indicador.

¿Cuál puede ser el problema?

Código del indicador:


Hay cierta confusión sobre la adición de 0, pero inténtalo de esta manera:

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
{
   int counted_bars=IndicatorCounted(),
   i,limit1,shift = 0;
   limit1=Bars-counted_bars-1;
   double line1,signal_line;
   static datetime time;
   for (i=limit1;i>=0;i--) 
   {
       line1=0.;
       signal_line=0.;
       line1 = iCustom (_Symbol, _Period,"indikator1",Period_MA_r,r2,1, i+0);       // Не понятно - зачем прибавлять 0 ???
       signal_line = iCustom (_Symbol, _Period,"indikator2",Period_MA_1,p2,0,i+0);  // Не понятно - зачем прибавлять 0 ???
   
       if (line1 > 0. && time == 0) {time = Time[i+0];}                   //сработало предварительное условие входа, записываем время [тоже + 0]
       if (time > 0.) shift= i + iBarShift (_Symbol, _Period, time);      //находим индекс бара
       if (line1 == 0.) {time = 0;}                                       //если индикатор равен нолю, то время сбрасывается на ноль
       if (line1 > 0.)
       {
           if (signal_line < s)
           {
               ExtMapBuffer1[i] = Low[i] - 95.*Point;
               if (shift >= shet) {ExtMapBuffer2[i] = High[i]+95.*Point;}
           }
       }
   }
   return(0);
}
//+------------------------------------------------------------------+
 

Buenas tardes.

En el terminal, si hago doble clic en la línea de pedido, se abre una ventana de modificación.

Pero si el precio de apertura de una orden y el take profit de otra orden están en la línea, se abre la última orden modificada.

Por favor, indique si mql4 tiene una función para abrir la ventana de modificación de la orden haciendo clic en la orden necesaria en el indicador?