[ARCHIVO] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 3. - página 302

 
OK chicos, muchas gracias, muy útil, perdón por las "tripas" ))
 
Parn25:

¡Ayúdenme, gente!

Estoy tratando de desarrollar un Asesor Experto basado en la estrategia del canal de la mañana. La esencia es esta: a las 6:01 en el par EURGBP determinar el canal de movimiento de los precios desde las 0 hasta las 6 de la mañana. Establecemos dos órdenes pendientes y si la orden pendiente activada es cerrada por un stopper, abrimos una orden en sentido contrario. Es la segunda parte de la estrategia la que no funciona. Es decir, si se ha activado un stop, no podemos abrir una orden en sentido contrario.

Hay que poner un tope de inmediato. Lo activará automáticamente.

Encontré esto en la basura, tal vez sea útil.

void OrderCloseAll(){
   for (int i=0;i<OrdersTotal();i++)
     if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      if(OrderType()==OP_BUY)
       OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, CLR_NONE);
      else
      if(OrderType() == OP_SELL)
       OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, CLR_NONE);
}

void OrderDeleteAll(int lots){
     for (int i=0;i<OrdersTotal();i++)
         if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
         if (OrderType()>1&&OrderType()<6)
         if(OrderLots()==lots){
          OrderDelete(OrderTicket());
          i=0;
         }
}
 //----------------------------------------------------
// покупка
void OpenBuyLIMIT(double lot, double price){
   double   SL = NormalizeDouble(price,Digits) - Loss*Point;
   double TP = NormalizeDouble(price,Digits) + Target*Point-MarketInfo(Symbol(),MODE_SPREAD)*Point;
    OrderSend(Symbol(), OP_BUYLIMIT, lot,  NormalizeDouble(price,Digits), Slippage, SL, TP, NULL, STUPID, 0, Blue);
}
 //----------------------------------------------------
// продажа
void OpenSellLIMIT(double lot, double price){
   double   SL = NormalizeDouble(price,Digits) + Loss*Point;
   double TP = NormalizeDouble(price,Digits) - Target*Point+MarketInfo(Symbol(),MODE_SPREAD)*Point;
   OrderSend(Symbol(), OP_SELLLIMIT, lot,  NormalizeDouble(price,Digits), Slippage,  SL, TP, NULL, STUPID, 0, Red);
}
 //----------------------------------------------------
// покупка
void OpenBuySTOP(double lot, double price){
   double   SL = NormalizeDouble(price,Digits) - Loss*Point;
   double TP = NormalizeDouble(price,Digits) + Target*Point-MarketInfo(Symbol(),MODE_SPREAD)*Point;
   OrderSend(Symbol(), OP_BUYSTOP, lot,  NormalizeDouble(price,Digits), Slippage, SL, TP, NULL, STUPID, 0, Blue);
}
 //----------------------------------------------------
// продажа
void OpenSellSTOP(double lot, double price){
  double   SL = NormalizeDouble(price,Digits) + Loss*Point;
  double TP = NormalizeDouble(price,Digits) - Target*Point+MarketInfo(Symbol(),MODE_SPREAD)*Point;
   OrderSend(Symbol(), OP_SELLSTOP, lot,  NormalizeDouble(price,Digits), Slippage,  SL, TP, NULL, STUPID, 0, Red);
}
Archivos adjuntos:
 
Parn25:

Amigos, ¡¡¡ayudadme un poco!!!

Estoy tratando de escribir un EA utilizando la estrategia del canal de la mañana. La esencia es la siguiente: a las 6:01 en el par EURGBP determinamos el canal de movimiento del precio desde las 0 hasta las 6 de la mañana. Establecemos dos órdenes pendientes y si la orden pendiente activada es cerrada por un stopper, abrimos una orden en sentido contrario. Es la segunda parte de la estrategia la que no funciona. Es decir, si se ha activado un stop, no podemos abrir una orden en sentido contrario.
El ejemplo con una orden pendiente es aproximadamente el siguiente.
Archivos adjuntos:
 
costy_:
El ejemplo del péndulo es algo así.
Bien, gracias, lo intentaré.
 

Hola.

Hoy es fin de semana, así que sólo tengo el probador visual funcionando :) Inicio en el Probador de Estrategias el script para descargar los valores de los indicadores a un archivo, pero descarga desde la fecha real actual (28 de octubre 23:55).

¿Cómo puedo transferir el valor (tiempo) de la última barra del comprobador visual al script?

int start =iBarShift(NULL,0,Time[2200+EndB-1]);
int end   =iBarShift(NULL,0,Time[EndB]);

¿Cómo pasar y calcular en el script EndB - el valor de la última barra en el probador?

P.D. Como último recurso, pondré todo el código del script en el Asesor Experto, etc.

 

¡Buenas tardes!

Estoy estudiando el libro de texto, si puedo hacer una pregunta sobre el material de estudio. Si hay un tema aparte para estas preguntas, agradecería un enlace.

Estoy tratando de averiguar el indicador ROC (el código está en el archivo adjunto).

Si lo entiendo bien, la lógica del indicador es la siguiente:

en el gráfico actual se toma la referencia MA, a partir de ella se traza la línea de cambio de velocidad V,

Además, se calcula la MA del siguiente (mayor TF), pero no se muestra; la siguiente línea V se calcula a partir de ella.

Lo mismo para el siguiente plazo.

Pregunta: No entiendo el registro dado

extern int Bars_V =13; // Número de barras para el cálculo de la velocidad
Las explicaciones del código del indicador dicen que la velocidad se calcula como una diferencia de 2 barras.

Y más .....

He descargado el código de este indicador en MT4, en H4 no está en la barra actual sino hace unos 9-10 días según el historial.

En otros plazos está bien. ¿Por qué es así?

Gracias de antemano por su ayuda, Saludos Olga

Archivos adjuntos:
my_roc.mq4  8 kb
 

¡Buenos días!

Todas las posiciones abiertas deben cerrarse después del intervalo de tiempo especificado, es decir, la vida de la posición abierta debe corresponder al intervalo seleccionado.

Pregunta. ¿Hay alguna otra solución que no sea OrderOpenTime()?

 
Zar:

Hola.

Hoy es fin de semana, eso significa que sólo funciona el probador visual :) Inicio el script en el probador para descargar los valores de los indicadores a un archivo, pero se descarga desde la fecha real actual (28 de octubre 23:55).

¿Cómo puedo transferir el valor (tiempo) de la última barra del comprobador visual al script?

¿Cómo pasar y calcular en el script EndB - el valor de la última barra en el probador?

P.D. Como último recurso, pondré todo el código del script en el Asesor Experto, etc.

El script no encontrará el tiempo del probador tan fácilmente (el indicador sí lo hará), puedes adjuntarlo al inicio del test.EA

int start()
{
GlobalVariableSet( "Time_test", Time[0]) ;
.....................

y en el guión

datetime time_start=GlobalVariableGet( "Time_test");

de forma rápida y fiable ...

 
Operr:

¡Buenos días!

Todas las posiciones abiertas deben cerrarse después del intervalo de tiempo especificado, es decir, la vida de la posición abierta debe corresponder al intervalo seleccionado.

Pregunta. ¿Existe alguna otra solución, excepto OrderOpenTime()?

Hay muchas opciones, por ejemplo, podemos escribir el tiempo de apertura en el archivo, pero sería más fácil desplazarse por las órdenes abiertas y comparar el tiempo restante.

En general, reformular... "Todas las posiciones abiertas deben cerrarse después del intervalo de tiempo especificado" para cada posición individual (así es como he entendido la pregunta).

 
LOA:

¡Buenas tardes!

Estoy estudiando el libro de texto, si puedo hacer una pregunta sobre el material de estudio. Si hay un tema aparte para estas preguntas, agradecería un enlace.

Estoy estudiando el indicador ROC (el código está en el archivo adjunto).

Si lo he entendido bien, la lógica del indicador es la siguiente:

en el gráfico actual se toma la referencia MA, a partir de ella se traza la línea de cambio de velocidad V,

Además, se calcula la MA de la siguiente (TF más grande), pero no se muestra; la siguiente línea V se calcula a partir de ella.

Lo mismo para el siguiente plazo.

Pregunta: No entiendo este registro

extern int Bars_V =13; // Número de compases para el cálculo de la velocidad
Las explicaciones del código del indicador indican que la velocidad se calcula como una diferencia entre los valores de 2 barras.

Y más.....

He cargado el código de este indicador en MT4, en H4 no está en la barra actual sino hace unos 9-10 días según el historial.

En otros plazos todo está bien. ¿Por qué es así?

Agradezco de antemano su ayuda.

"larger TF" - no, la misma MA pero los datos se toman con un desplazamiento Sh_1 re Sh_1=Bars_V; // El periodo de velocidad medido (bares)

"Similar para el siguiente marco temporal" - no, hay un cambio al principio (para cada marco temporal los coeficientes son diferentes K2, K3)

    switch(Period())                 // Расчёт коэффициентов для..
     {                             // .. различных ТФ
      case     1: K2=5;K3=15; break;// Таймфрейм М1
      case     5: K2=3;K3= 6; break;// Таймфрейм М5
      case    15: K2=2;K3= 4; break;// Таймфрейм М15
      case    30: K2=2;K3= 8; break;// Таймфрейм М30
....
Period_MA_2 =K2*Period_MA_1;   // Расчётн.период МА для ближ. ТФ
Period_MA_3 =K3*Period_MA_1;   // Расчётн.период МА для след. ТФ

La definición "calculado período de MA para el próximo TF" no es cierto, los errores están siempre presentes en los libros de texto (especialmente las "historias" son muy como)

"Pregunta: No entiendo la siguiente entrada

extern int Bars_V =13; // Número de barras para el cálculo de la velocidad" buscar más por el código Bars_V ...

   Sh_1=Bars_V;                   // Период измерен скорости (баров)

entonces qué es Sh_1, este valor es un desplazamiento MA 1 línea de velocidad, etc.

// Предназначен для использования в качестве примера в учебнике MQL4.
no es un buen ejemplo, lea algo más sencillo de los indicadores estándar...
Razón de la queja: