Errores, fallos, preguntas - página 623

 
MetaDriver:
Tendrás un duro despertar... :))

Probablemente,

He leído la esencia del problema, no entiendo por qué cada indicador debe tener un temporizador, y por qué hay tantos indicadores,

si es posible obtener las ofertas del instrumento requerido directamente en el temporizador EA y almacenarlas en el conjunto general,

Si quieres usar un indicador, necesitarás un temporizador más grande, pero en este caso, habrá un flujo de datos no sincronizado.

Es diferente con los espías: no tienen relojes y los eventos de todos los instrumentos pueden no ocurrir durante mucho tiempo, o pueden empezar a sonar uno tras otro.

SZZ Por cierto, en las operaciones en las que hay un último precio, los datos de la oferta no siempre están ahí, así que compruebe y escriba la oferta o el último precio.

 

MetaDriver:

Propongo un compromiso: capturar los ticks con los espías y enviarlos inmediatamente al Asesor Experto principal con una etiqueta de milisegundos (GetTickCount()). El Asesor Experto los ordena según sus etiquetas y los divide en segundos bloques.

No es muy sencillo, pero será preciso.

No es una mala variante. En mi opinión, es la única que merece la pena tomar como base.

Urain:

Por cierto, en las operaciones en las que hay un último precio, los datos de la oferta no siempre están ahí, así que compruebe y escriba la oferta o el último precio.

Buena aclaración, yo no me he encontrado con eso. Habrá que tenerlo en cuenta.
 

MetaDriver:

Предлагаю компромисс: ловишь тики шпионами и сразу отправляешь в головной эксперт, снабдив милисекундной меткой(GetTickCount()). Эксперт их упорядочивает в соответствии с метками и нарезает секундные блоки.

Не очень просто, зато с точностью будет порядок.

Interesante:

No es una mala opción. En mi opinión, la única que vale la pena tomar como base.

Buena aclaración, no me he encontrado con esto. Habrá que tenerlo en cuenta.

Puede que no sea una mala variante, pero el mecanismo de envío de ticks está ausente en el terminal. Intenta pensar en 5-10 ticks/seg en 16 pares. Una vez más - ya se ha ido)).

Y no hace falta tanta precisión, con 1 segundo es suficiente.

Gracias a todos: el tema está terminado.

 

El problema es muy desagradable debido a la sustitución de las barras de minutos por barras de plazos superiores en el pasado histórico lejano, cuando todavía no se disponía del historial minuto a minuto. La única solución que se me ocurre es la compleja conversión de barras falsas en reales, y no puede garantizar la exactitud. No se trata tanto de la complejidad como de las dudas sobre la exactitud de dicha conversión.

La tarea inicial es comprobar la pertinencia de las zonas horarias de Fibonacci que se están construyendo. Si la zona está demasiado alejada y el ancho de trabajo de todas sus subzonas (hasta 34 anchos de base por defecto) es tan estrecho que el borde derecho no llega al momento actual, entonces no la construimos, de lo contrario creamos un objeto en el gráfico. Intenté resolver esto de dos maneras similares, una de las cuales cito. La única diferencia es que en la primera forma, estaba bailando desde el principio de la historia usando

   datetime firstDate=(datetime)SeriesInfoInteger(_Symbol,_Period,SERIES_FIRSTDATE);
Y en el segundo - por el contrario (cito este método), la esencia y los resultados son absolutamente los mismos. Probado en el NZD/USD.

Si tienes un historial falso que termina en una fecha distinta a 2009, como es mi caso, reordena las dos zonas horarias de Fibo para que una de ellas pase por esa fecha de inflexión, y la segunda esté ya completamente a la derecha del historial, donde todas las barras son reales. En este caso, no olvide cambiar los valores de startTime1, endTime1 y, si es necesario, startTime2, endTime2 en el script; no puede ajustar los precios - no es importante. Ahora puedes probarlo... El resultado será triste: si el algoritmo de comprobación se mantiene sin cambios para ambas zonas horarias, sólo funcionará correctamente para la zona que tiene un pie antes de la fecha de propina y otro pie después, el algoritmo la filtrará erróneamente y nos impedirá construirla. Tenga en cuenta que ambas zonas están bastante cerca la una de la otra y tienen anchos similares, y estos dos anchos se extienden mucho en el futuro y serán relevantes durante mucho tiempo, de hecho ninguno de ellos debe ser filtrado (comente las condiciones y vea que ambas zonas horarias se construyen).

void OnStart()
  {
   datetime startTime1=D'2009.07.08 18:00:00';
   datetime endTime1=D'2009.11.03 12:17:00';
   datetime startTime2=D'2009.06.30 08:00:00';
   datetime endTime2=D'2009.10.21 20:16:00';

   double startPrice1=0.61930;
   double endPrice1=0.70948;
   double startPrice2=0.65470;
   double endPrice2=0.76300;

   int FTZ1pos1,FTZ2pos1,bandwidth;
   datetime Arr[],time1;

   CopyTime(_Symbol,PERIOD_M1,0,1,Arr);
   time1=Arr[0];

   FTZ1pos1=CopyTime(_Symbol,PERIOD_M1,time1,startTime1,Arr);
   bandwidth=CopyTime(_Symbol,PERIOD_M1,endTime1,startTime1,Arr)*(34+2); // +2 - небольшой запас общей ширины
                                                                         // зоны на всякий случай

   if(FTZ1pos1<=bandwidth)
      ObjectCreate(0,"FTZ1",OBJ_FIBOTIMES,0,
                   startTime1,startPrice1,
                   endTime1,endPrice1
                  );


// ---
   FTZ2pos1=CopyTime(_Symbol,PERIOD_M1,time1,startTime2,Arr);
   bandwidth=CopyTime(_Symbol,PERIOD_M1,endTime2,startTime2,Arr)*(34+2); // +2 - небольшой запас общей ширины
                                                                         // зоны на всякий случай

   if(FTZ2pos1<=bandwidth)
      ObjectCreate(0,"FTZ2",OBJ_FIBOTIMES,0,
                   startTime2,startPrice2,
                   endTime2,endPrice2
                  );
  }

Resultado deseado:Debe haber dos zonas horarias Fibo

En algún punto entre la primera y la segunda línea de base 0 hay un punto de inflexión que separa las barras de minutos falsas de las reales.

Si se rechazan los cálculos en el número de barras, y todo se calcula con fechas, entonces ciertamente no dará la precisión deseada, porque hay que restar los fines de semana (+/- hora de cierre/apertura del mercado), los días festivos, etc., y ni hablar de las barras perdidas en ausencia de ticks de más de un minuto y la divergencia de la línea de tiempo.

¿Qué aconseja como solución fiable?

 

Error al cargar el archivo en el Asesor Experto. Encuentre 10 diferencias. El primer código se refiere al script, el segundo al Asesor Experto, son idénticos Ctrl-C Ctrl-V. El código funciona en el script, no funciona en el Asesor Experto.

#include <\\MyClass\RegulFind-v1-1.mqh>
#include <Trade\Trade.mqh>
int hMa,hRsi ;
double mMa[],mRsi[];                             
Kohonen  koh;
CTrade trade ;
void OnStart()
  {
   koh.LoadMap("KitMaRsi.csv") ;
   hMa=iMA(_Symbol,Period(),10,0,MODE_EMA,PRICE_CLOSE) ;
   if(hMa ==INVALID_HANDLE)
      Print("Ошибка загрузки машки====================== ",GetLastError());
   hRsi=iRSI(_Symbol,Period(),10,PRICE_CLOSE);
   if(hRsi ==INVALID_HANDLE)
      Print(" Ошибка загрузки РСИ ==========");   
   
  }
#include <\\MyClass\RegulFind-v1-1.mqh>
#include <Trade\Trade.mqh>
int hMa,hRsi ;
double mMa[],mRsi[];                             
Kohonen  koh;
CTrade trade ;
int OnInit()
  {
   koh.LoadMap("KitMaRsi.csv") ;
   hMa=iMA(_Symbol,Period(),10,0,MODE_EMA,PRICE_CLOSE) ;
   if(hMa ==INVALID_HANDLE)
      Print("Ошибка загрузки машки====================== ",GetLastError());
   hRsi=iRSI(_Symbol,Period(),10,PRICE_CLOSE);
   if(hRsi ==INVALID_HANDLE)
      Print(" Ошибка загрузки РСИ ==========");   
   return(0);
  }
 
ivandurak:

Error al cargar el archivo en el Asesor Experto. Encuentre 10 diferencias. El primer código se refiere al script, el segundo al Asesor Experto, son idénticos Ctrl-C Ctrl-V. El código funciona en el script, no funciona en el Asesor Experto.

El probador tiene una caja de arena de archivos diferente. Si quiere que el Asesor Experto en el probador y de forma normal trabaje con un archivo *.csv, póngalo en el directorio común y abra el archivo con el modificador FILE_COMMON


P.D. Para ponerlo en la carpeta común, hay que escribir un archivo con el modificador
FILE_COMMON, o encontrar algo como esto (una variante para XP):

C:\NDocumentos y Ajustes\NTodos los Usuarios\NDatos de Aplicación\NMetaQuotes\NTerminal\NCommon\Files



 
x100intraday:

¿Qué aconseja como solución fiable?

Volver a MT4.

Me he puesto en contacto con los desarrolladores sobre el futuro de este problema, pero han guardado silencio, así que personalmente no tengo ni idea de lo que nos depara el futuro.

 

El cambio con variables de carácter no parece funcionar...

En lugar de:

string type = "Buy";

switch(type)
{
case "Buy" : {direction = ORDER_TYPE_BUY;  price = SymbolInfoDouble(zSymbol,SYMBOL_ASK); break;}
case "Sell": {direction = ORDER_TYPE_SELL; price = SymbolInfoDouble(zSymbol,SYMBOL_BID); break;}
default: {return(lot_value);}
}

'type' - tipo de expresión de conmutación ilegal
'Comprar' - la expresión constante no es integral

Tengo que dibujarlo así:

if(zShift == "Buy")  {direction = ORDER_TYPE_BUY;  price = SymbolInfoDouble(zSymbol,SYMBOL_ASK);}
if(zShift == "Sell") {direction = ORDER_TYPE_SELL; price = SymbolInfoDouble(zSymbol,SYMBOL_BID);}
if(zShift != "Buy" || zShift != "Sell") {return(lot_value);}

No es tan claro y está torcido.

Funciona bien en otros idiomas.

¿Debo escribirlo de otra manera?

 
awkozlov:

El cambio no parece funcionar con las variables de carácter...


La documentación dice (el subrayado es nuestro) - Cambiar de operador:

Compara el valor de una expresión con las constantes en todas las variantes del caso y pasa el control al operador que coincide con el valor de la expresión. Cada variante de caso puede marcarse con una constante entera , una constante de carácter o una expresión constante. Una expresión constante no puede incluir variables ni llamadas a funciones. La expresión del operadorswitch debe ser de tipo entero.

 
awkozlov:

Funciona en otros idiomas...

El hecho de que funcione en otros idiomas es una característica. Switch estaba pensado originalmente sólo para los tipos integrales. En este caso no existe tal característica.