Fin de semana por la noche - página 9

 
Aleksey Panfilov:

Hay seis asas de un indicador en tres marcos temporales.

Y la compensación del valor a tomar, ya está establecida. Copié de ellos un valor a la vez.

Me confundí al usar tres manijas de un indicador en tres marcos de tiempo y copiar el posible intervalo de desplazamiento de ellos.

Si necesita obtener el valor de un indicador de más de una barra a la vez, debe copiar los valores en una matriz. Utilizando el iATR como ejemplo:

//+------------------------------------------------------------------+
//| Get value of buffers for the iATR                                |
//+------------------------------------------------------------------+
double iATRGet(const int index)
  {
   double ATR[1];
//--- reset error code 
   ResetLastError();
//--- fill a part of the iATR array with values from the indicator buffer that has 0 index 
   if(CopyBuffer(handle_iATR,0,index,1,ATR)<0)
     {
      //--- if the copying fails, tell the error code 
      PrintFormat("Failed to copy data from the iATR indicator, error code %d",GetLastError());
      //--- quit with zero result - it means that the indicator is considered as not calculated 
      return(0.0);
     }
   return(ATR[0]);
  }
//+------------------------------------------------------------------+
//| Get value of buffers for the iATR in the array                   |
//+------------------------------------------------------------------+
bool iATRGetArray(const int start_pos,const int count,double &arr_buffer[])
  {
   bool result=true;
   if(!ArrayIsDynamic(arr_buffer))
     {
      Print("This a no dynamic array!");
      return(false);
     }
   ArrayFree(arr_buffer);
   int       buffer_num=0;          // indicator buffer number 
//--- reset error code 
   ResetLastError();
//--- fill a part of the iATRBuffer array with values from the indicator buffer that has 0 index 
   int copied=CopyBuffer(handle_iATR,buffer_num,start_pos,count,arr_buffer);
   if(copied!=count)
     {
      //--- if the copying fails, tell the error code 
      PrintFormat("Failed to copy data from the iATR indicator, error code %d",GetLastError());
      //--- quit with zero result - it means that the indicator is considered as not calculated 
      return(false);
     }
//---
   return(result);
  }
 
Vladimir Karputov:

Si quiere recibir el valor de un indicador de más de una barra a la vez, tiene que copiar los valores en un array. Utilizando el iATR como ejemplo:

Sí, parece que fue un error dejar los arrays que copié como dinámicos. :(

Lo comprobaré.

 
Aleksey Panfilov:

Sí, parece que fue un error dejar los arrays que copié como arrays dinámicos. :(

Lo comprobaré.

Sólo copio en matrices dinámicas. Y, antes de copiar, hacer forzosamenteArrayFree. Tuve problemas con las matrices estáticas. Desde entonces, sólo las dinámicas.

 
Vladimir Karputov:

Sólo copio en matrices dinámicas. Y antes de copiar, fuerzoArrayFree. Había problemas con las matrices estáticas. Desde entonces, sólo las dinámicas.

Lo tengo. El error no está aquí.

Aquí está el Asesor Experto que no fue.

Archivos adjuntos:
 
Aleksey Panfilov:

Lo tengo. El error no está aquí.

Aquí está el experto que no fue.

ERROR: ¿está copiando UN valor o DOS?

   //---  Используя функцию CopyBuffer, мы копируем по 1 последних новых значения индикаторов в динамические массивы

   if(CopyBuffer(Handle_4P72_L0_1,0,0,200,line1_L0)<0  // || CopyBuffer(Handle_4P72_L0_2,0,0,1,line2_L0)<0   || CopyBuffer(SMA_Handle_00,0,0,1,SMA_L0)<0
   || CopyBuffer(Handle_4P72_L1_1,0,0,200,line1_L1)<0  // || CopyBuffer(Handle_4P72_L1_2,0,0,1,line2_L1)<0   || CopyBuffer(SMA_Handle_01,0,0,1,SMA_L1)<0
   || CopyBuffer(Handle_4P72_L2_1,0,0,200,line1_L2)<0  // || CopyBuffer(Handle_4P72_L2_2,0,0,1,line2_L2)<0   || CopyBuffer(SMA_Handle_02,0,0,1,SMA_L2)<0
   ||  CopyTime(_Symbol,_Period,0,1,New_Time)<0)
 
Vladimir Karputov:

ERROR: ¿está copiando UN valor o DOS valores?

En este EA (es diferente en fecha) he probado tres handels y doscientos valores.

 

Si estás preparado para hacer robots para MT5, puedo empezar a darte ideas. Simulo las condiciones en TS-Lab, pero me gustaría operar con ellas en MT5 en modo automático.

Si no hay problemas con la prueba, describiré la lógica comercial. El primero será probablemente éste.

Archivos adjuntos:
 
Vladimir Karputov:

Empezaré con pequeñas porciones.

En cuanto haya"Segundos antes del cierre de la vela de señal" segundos antes del cierre de la vela actual, calculamos el tamaño medio de"Número de velas para calcular el tamaño medio de las velas". Si la vela actual excede el tamaño medio en"Vela actual:exceso de tamaño del cuerpo, porcentajes" - abrimos una posición con el volumen"L otes" y colocamos una ordenpendiente de límite con el volumen"Lotes" *"Factor de multiplicación" del precio de apertura a la distancia de"Nivel de límite pendiente: porcentaje de la altura de la vela actual" en porcentaje de la altura de la vela de señal.

¿Parece esto correcto?


Necesito tiempo para recordar lo que hice allí :) Me estoy resfriando por las corrientes de aire. Da rabia y es divertido a la vez: coger fiebre en verano y resfriarse :)

 
Vladimir Karputov:

Se necesita tiempo para recordar lo que he estado haciendo :) Y entonces, como si fuera a propósito, hay corrientes de aire y el resultado es un resfriado. Es divertido y a la vez enfadado: coger fiebre y resfriarse en verano :)

Siéntete mejor.

 
Vladimir Karputov:

Sólo copio en matrices dinámicas. Y antes de copiar, fuerzoArrayFree. Había problemas con las matrices estáticas. Desde entonces, sólo las dinámicas.

Oh, vamos... Tampoco tengo problemas con los estáticos. Sin embargo, depende de lo que estemos hablando. En los índices, sí, son mejores los dinámicos, si no se quiere gestionar el buffer y atrapar errores. Pero en los búhos no hay ninguna diferencia, de hecho.

Razón de la queja: