[¡Archivo!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. No puedo ir a ningún sitio sin ti - 4. - página 249

 
Leo59:

¡Estimado granit77! Si no te importa, por favor, haz las correcciones directamente en el código, si algo está mal. Será claro y comprensible.

Ejemplo. De las ocho memorias intermedias de los indicadores disponibles, siete se utilizan para mostrar las líneas en la ventana del indicador, la octava se utiliza para los cálculos, sin mostrar en la ventana del indicador.
Si no hay suficientes tampones indicadores, los cálculos pueden realizarse en matrices convencionales.

#propiedad indicator_buffers 7 double ind_buffer1[]; double ind_buffer2[]; double ind_buffer3[]; double ind_buffer4[]; double ind_buffer5[]; double ind_buffer6[]; double ind_buffer7[]; double ind_buffer8[];//el octavo buffer se utiliza para cálculos adicionales //double ind_buffer9[];   //no hay un noveno buffer en el indicador; este array no tiene donde ir int() { IndicatorBuffers(8); SetIndexBuffer(0,ind_buffer1); SetIndexBuffer(1,ind_buffer2);
SetIndexBuffer(2,ind_buffer3); SetIndexBuffer(3,ind_buffer4); SetIndexBuffer(4,ind_buffer5); SetIndexBuffer(5,ind_buffer6); SetIndexBuffer(6,ind_buffer7); SetIndexBuffer(7,ind_buffer8); //ind_buffer1...ind_buffer7 dibuja siete líneas //se muestran en la ventana del indicador según la #propiedad indicator_buffers 7 //ind_buffer8 no se muestra en la ventana, pero está disponible para participar en los cálculos return(0); }
 
granit77:
Ejemplo. Siete de los ocho búferes del indicador se utilizan para mostrar las líneas en la ventana del indicador, el octavo búfer se utiliza para los cálculos, pero no se mostrará en la ventana del indicador.
Si no hay suficientes buffers de indicadores, los cálculos se pueden hacer en matrices normales.



Gracias. Eso es comprensible.

No entiendo otra. No sé por qué el array que participa en los cálculos, pero que no se muestra en la ventana del indicador, debe ser identificado como el SetIndexBuffer. Y si necesitamos 10 arrays para los cálculos y 8 para la visualización (18 arrays en total), ¿cómo declarar e identificar estos 10 correctamente? Quiero que tengan las mismas propiedades que las matrices adjuntas a los buffers de los indicadores, excepto que no se dibujan.

 
Zhunko:

No tienes que cambiar el nombre si no funciona. Lo cual es extraño. Puedes abrirlo desde el menú contextual seleccionando WinRar. O abra WinRar, luego desde el elemento de menú "Archivo" "Abrir archivo" busque el archivo y ábralo.

He dicho más arriba que la extensión es necesaria sólo para la asociación automática del archivo.

¿Ha activado la visibilidad de las extensiones? Captura de pantalla o vídeo aquí si no funciona.


Gracias por las instrucciones detalladas. ¡Sí descargué este WinRar, aparentemente no estaba allí y el archivo se abrió!
 
No veo que la función funcione. Es cierto que los ticks no funcionan ahora, pero al menos el inicio debería funcionar al unirse al gráfico, ¿no? Bueno, ¡¡¡por lo menos compila!!! Estoy probando esto.
//+------------------------------------------------------------------+
//|                                                  таймфрейммм.mq4 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
#include <ServicesMT4.mqh>
void start()
  {
   int hwndChart = WindowHandle(Symbol(),Period());
   while (!IsStopped())
    {
     for (int i = 0; i < 9; i++)
      {
       ServiceSetTimeframeByNumber(hwndChart, i);
       Sleep(4000);
      }
    }
  }
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
 
PR //Beneficio
UB /Pérdida
Pk //Variable que toma valores de compra
Pr //Variable que toma valores de venta
ADR //Variable que toma valores del script

/Condición de beneficio
if(PR==Pk) //Si el beneficio en la compra
ADR=1; //Ajuste de la secuencia de comandos 1
else //Si el beneficio de la venta
ADR=2; //Configuración de la secuencia de comandos 2

/Condición de venta
if(UB==Pk) //Si hay pérdidas en la compra
ADR=2; //configuración del script 2
else //Si hay pérdidas en la venta

ADR=1; //Ajuste de la secuencia de comandos 1

¿Cómo puedo mejorar esto para el comercio? Necesito un EA que controle qué orden se cerró (compra o venta), y cómo se cerró con ganancias o pérdidas. Después de dicho análisis, el EA ejecutará 1 o 2 scripts.

 
¿Cómo se llaman las variables take profit y stop loss? ¿Y cómo se especifica la dirección del script a ejecutar?
 
Dimka-novitsek:
No veo que esta función funcione. Es cierto que los ticks no se producen ahora, pero al menos el inicio debería funcionar al conectarse al gráfico, ¿no? Bueno, ¡¡¡por lo menos compila!!! Probando esto

No hay garrapatas. El inicio no se activa. Se puede compilar como un script. Pero tendrá que especificar el descriptor del gráfico adyacente, que se actualizará.

O así:

#include <ServicesMT4.mqh>
int hwndChart = NULL;
void init()
 {
  hwndChart = WindowHandle(Symbol(),Period()); // Получаем системный дескриптор графика.
  ServiceRefreshChart(hwndChart, 1000); // Запускаем обновление графика каждую 1 секунду.
 }

void start()
 {
  ServiceStopRefreshChart(hwndChart); // Останавливаем обновление. Больше не требуется.
  while (!IsStopped())
   {
    for (int i = 0; i < 9; i++)
     {
      ServiceSetTimeframeByNumber(hwndChart, i);
      Sleep(4000);
     }
   }
 }

Pero probablemente no te funcione. Parece que la función ServiceRefreshChart () no está disponible para todos.

Puedes probarlo en el indicador. Se refresca 2 veces cuando se une al gráfico y cambia de TF.

 
¡¡¡¡¡¡Gracias!!!!!!
 
Compila, pero no ejecuta.
 
Dimka-novitsek:
Se compila, pero no se ejecuta.

Lo he comprobado. ServiceRefreshChart () no está disponible para usted.

¿Qué opción no funciona? Ya es demasiado. La opción con el script y un gráfico separado siempre funcionará.

Abra un gráfico, por ejemplo, EURUSD H1.

2. En el guión esto:

void start()
  {
   int hwndChart = WindowHandle("EURUSD", PERIOD_H1);
   while (!IsStopped())
    {
     for (int i = 0; i < 9 && !IsStopped(); i++)
      {
       ServiceSetTimeframeByNumber(hwndChart, i);
       Sleep(4000);
      }
    }
  }

3. Ejecute el script en otro gráfico.

4. El gráfico H1 del EURUSD cambiará el TF.