devuelve la política de ejecución. - página 8

 

Así es como obtengo los datos actuales de la media móvil, ¿es esto correcto?

input int      ma_period = 10;
 int ma_handle = 0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
    ma_handle = iMA(_Symbol,_Period,ma_period,0,MODE_SMA,PRICE_MEDIAN);
   if(ma_handle == INVALID_HANDLE)
     {
      Print("ma_handle == INVALID_HANDLE");
      return(INIT_FAILED);
     }

   return(INIT_SUCCEEDED);


  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  { 
  double   ma[1] ;
   if(CopyBuffer(ma_handle,0,0,1,ma)==1)
     {
     
     
     }
 }

Dos preguntas.

1.Nada de no asociar el número de la memoria intermedia del indicador. Como hay un indicador, automáticamente tiene el buffer 0 y eso es lo que he especificado.

2. Si tengo el manejador del indicador en la inicialización, cuando cambie los parámetros que se le pasan al indicador, ¿tengo que volver a rellenar el EA al gráfico para que llegue el evento de inicialización y se apliquen los nuevos parámetros?

 
Ivan_Invanov:

Así es como obtengo los datos actuales de la media móvil, ¿es esto correcto?

Dos preguntas.

1.Nada de no asociar el número de la memoria intermedia del indicador. Como hay un indicador, automáticamente tiene el buffer 0 y eso es lo que he especificado.

2. Si tengo el manejador del indicador en la inicialización, cuando cambie los parámetros que se le pasan al indicador, ¿necesito recargar el EA al gráfico para que llegue el evento de inicialización y se apliquen los nuevos parámetros?

1. No hay ninguna "asociación". Nunca lo hubo.

Leamos la ayuda sobre CopyBuffer

int  CopyBuffer(
   int       indicator_handle,     // handle индикатора
   int       buffer_num,           // номер буфера индикатора
   int       start_pos,            // откуда начнем 
   int       count,                // сколько копируем
   double    buffer[]              // массив, куда будут скопированы данные
   );

Hay una función que toma el mango del indicador (en su caso es la variablema_handle y el número de buffer '0' - cero, porque el indicador Moving Average tiene sólo un buffer).


2. Si usted cambia los parámetros de entrada en su EA, se inicializará su EA de nuevo y el manejador del indicador se creará en OnInit con los parámetros que usted introdujo.

Документация по MQL5: Доступ к таймсериям и индикаторам / CopyBuffer
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyBuffer
  • www.mql5.com
Отсчет элементов копируемых данных (индикаторный буфер с индексом buffer_num) от стартовой позиции ведется от настоящего к прошлому, то есть стартовая позиция, равная 0, означает текущий бар (значение индикатора для текущего бара). При копировании заранее неизвестного количества данных в качестве массива-приемника buffer[] желательно...
 
Vladimir Karputov:

1. No hay ninguna "asociación". Nunca lo ha habido.

...

Significado de la llamada aSetIndexBuffer()

 
Dmitry Fedoseev:

Significa una llamada a SetIndexBuffer()

Sí, no está claro cuál es el número de búfer del indicador, cómo se crean estos búferes, si pertenecen a un indicador específico o tienen una numeración común. La documentación dice que hay que escribir SetIndexBuffer(), pero en el ejemplo de la Media Móvil se escribe sin. He leído la referencia y he buscado artículos adicionales, pero sigue sin estar claro. ¿Es necesario que el preprocesador especifique los buffers y por qué los buffers deben ser uno menos que en la directiva del preprocesador y no el mismo?
 
Ivan_Invanov:
Sí, no sé qué es un número de búfer de indicador, cómo se crean estos búferes, si pertenecen a un determinado indicador o tienen una numeración general. La documentación dice que hay que escribir SetIndexBuffer(), pero en el ejemplo de Media Móvil se escribe sin. He leído la referencia y he buscado artículos adicionales, pero sigue sin estar claro. ¿Es necesario que el preprocesador especifique los buffers y por qué los buffers deben ser uno menos que en la directiva del preprocesador y no el mismo?

Si buscas algún significado metafísico... entonces muchas cosas se vuelven incomprensibles. De lo contrario, es sólo un número. Pertenece a un indicador específico.

Los Asesores Expertos no tienen buffers de indicadores en absoluto, por lo tanto no puede haber una llamada a SetIndexBufer().

No uno menos, sino exactamente el mismo. Al contar desde cero, el último número es 1 menos que el número total.

 
Gracias.
 

Si no le importa, responda a algunas preguntas más, por favor.

1. No entiendo por qué tengo que asignar 0 a una variable declarada si luego voy a asignar algo de todos modos. Y además, a veces no se asigna el 0 y otras veces sí.

Y dicen que hay que borrar los objetos en la desinicialización (no entiendo por qué), pero un manejador de indicador es un objeto, pero no se suele borrar, ¿por qué?

3.MqlTradeRequest request={0}; ¿Qué significa? Probablemente, toda la estructura tiene asignado un 0, pero no contiene sólo tipos numéricos.

4. ¿Y por qué hay una operación lógica aquí?

bool  OrderSend(
   MqlTradeRequest&  request,      // структура запроса
   MqlTradeResult&   result        // структура ответа
   );
 
Ivan_Invanov:

Si no le importa, responda a algunas preguntas más, por favor.

1. No entiendo por qué tengo que asignar 0 a una variable declarada si luego voy a asignar algo de todos modos. Y además, a veces no se asigna el 0 y otras veces sí.

Y dicen que hay que borrar los objetos en la desinicialización (no entiendo por qué), pero un manejador de indicador es un objeto, pero no se suele borrar, ¿por qué?

3.MqlTradeRequest request={0}; ¿Qué significa? Probablemente, toda la estructura tiene asignado un 0, pero no contiene sólo tipos numéricos.

4. ¿Por qué necesitamos aquí una operación lógica?

1. Por costumbre.

2. es otro objeto. Se descargará por sí mismo, pero puede ser acelerado por la función IndicatorRelease().

3. se borra y ya está.

4. no se trata de una operación lógica, sino de la transferencia de una variable por referencia.

 
Dmitry Fedoseev:

1. Por costumbre.

2. se trata de un objeto diferente. Luego se descargará por sí mismo, pero puede ser acelerado por IndicatorRelease().

3. se borra y ya está.

4. no se trata de una operación lógica, sino de la transferencia de una variable por referencia.

gracias)
 
Estoy confundido sobre algo. Cuando se ejecuta SYMBOL_TRADE_EXECUTION_MARKET. ¿Puedo hacer algo para abrir órdenes a un precio determinado, como en la ejecución inmediata? ¿Necesito una orden pendiente? Escriba un formato de solicitud de mercado para una orden pendiente.