Por favor, explique qué puede estar mal en esta función. - página 5

 
Karputov Vladimir:
Será mejor que nos diga lo que le ha aconsejado el servicio técnico: ha seguido hablando con ellos, ¿no?
Por alguna razón no llamo a una puerta cerrada más de tres veces. Ni una respuesta a mis tres comentarios... ¿Y por qué gritar al vacío?
 
Alexey Viktorov:
Por alguna razón, no llamo a una puerta cerrada más de tres veces. Ni una sola respuesta a mis tres comentarios... ¿Y por qué gritar al vacío?

CopyRates() en cada tick, corriendo en M15 soportará el caché de la historia por período no nativo (timeframe) (H1 y D1).

Y también es posible, en lugar de copiar las series mediante CopyRates(), solicitar simplemente

SYMBOL_TIME

Última hora de cotización

datetime

y utilizar este tiempo para determinar si es un nuevo día o una nueva hora... En este caso, en lugar de copiar la serie, simplemente se sondea el terminal y se realiza un simple análisis temporal. También puede utilizar unSymbolInfoTick más informativo.

 
Karputov Vladimir:

CopyRates() en cada tick, corriendo en M15 soportará el caché de la historia por periodo no nativo (timeframe) (H1 y D1).

Y también es posible, en lugar de copiar las series a través de CopyRates(), simplemente solicitar

SYMBOL_TIME

Última hora de cotización

datetime

y utilizar este tiempo para determinar si es un nuevo día o una nueva hora... En este caso, en lugar de copiar la serie, simplemente se sondea el terminal y se realiza un simple análisis temporal. También puede utilizar unSymbolInfoTick más informativo.

Vladimir, la pregunta de los tirones no fue una coincidencia. En ese EA en el que se encontraron esos problemas, CopyRates() es llamado en cada tick, por lo que la teoría del tirón de la historia equivale a tirar del gato por su sitio causal... No quiero ser grosero...

E incluso ahora, cuando ha comprendido que el problema existe, la aplicación que ignora en SD continúa obstinadamente. No estoy realmente interesado, se ha encontrado una solución y puedo acostumbrarme a otros problemas y tener en cuenta la estupidez de algunas funciones, pero mi deseo de informar a la CA sobre cualquier problema se acerca rápidamente a cero.

Estoy escribiendo ahora desde otro ordenador, sin código, pero puedes comprobarlo tú mismo... ¿Cuántas barras diarias crees que hay entre el 27.06.2016 00:00:00 y el 27.06.2016 00:00:00?

Te equivocas, compruébalo con Bars() Estúpido, pero puedes tenerlo en cuenta si es necesario, y cuando se les ocurra arreglarlo... Bueno, arreglaremos nuestro propio código...

 
Alexey Viktorov:

Vladimir, la pregunta sobre las sacudidas no fue accidental. En ese EA, en el que se detectaron esos problemas, se llama a CopyRates() en cada tic, por lo que la teoría del tic de la historia equivale a tirar del gato por el lugar causal... No lo consideres una grosería...

E incluso ahora, cuando te has dado cuenta de que hay un problema, la ignorancia de la aplicación en la SD continúa obstinadamente. No me interesa mucho, la solución está encontrada, puedes acostumbrarte a otros problemas y tener en cuenta la estupidez de ciertas funciones, pero las ganas de reportar cualquier problema a la AC se van acercando rápidamente a cero.

Estoy escribiendo ahora desde otro ordenador, sin código, pero puedes comprobarlo tú mismo... ¿Cuántas barras diarias crees que hay entre el 27.06.2016 00:00:00 y el 27.06.2016 00:00:00?

¿Crees que el cero?? mal, comprobar con Bars() Estúpido, pero sólo puede tener en cuenta si es necesario, y cuando usted tiene la idea de arreglarlo ... Bueno, arreglaremos nuestro propio código...

No hay necesidad de inventar cosas - usted ha proporcionado un EA SINCopyRates().
 
Karputov Vladimir:
No hay necesidad de inventar cosas - usted proporcionó un EA SIN CopyRates().
Di el código cuando no se hablaba de tirones. Repito, estoy escribiendo desde un ordenador en el que no tengo código e instalado MT5, así que por favor, haz tú mismo los cambios, no en la función de determinar una nueva barra, sino antes de su llamada en el código principal OnTick(). y repite el experimento.
 
Alexey Viktorov:
He dado el código cuando no se hablaba de tirones. Repito, estoy escribiendo desde mi PC donde no tengo ningún código y se ha instalado MT5, por eso te pido que hagas tú mismo los cambios no en la función que define una nueva barra sino antes de su llamada en el código principal OnTick() y pruebes de nuevo el experimento.

Si hay un código, hay un juicio. Si no hay ningún código, entonces todo pasa al modo de los posos del café. Si estás en el ordenador, inventa un código con mis recomendaciones

Foro sobre trading, sistemas de trading automatizados y comprobador de estrategias

Sólo tengo una configuración y tengo que operar con Expert Advisor.

Karputov Vladimir, 2016.06.27 13:36

***

O puede utilizar CopyRates() en lugar de copiar las series, puede simplemente solicitar

SYMBOL_TIME

Última hora de cotización

datetime

y utilizar este tiempo para determinar si es un nuevo día o una nueva hora... En este caso, en lugar de copiar la serie, simplemente se sondea el terminal y se realiza un simple análisis temporal. También puede utilizar unSymbolInfoTick más informativo.


y compruébalo por tu cuenta.

 

Es más o menos así

datetime oldDay, oldHour;
MqlDateTime mqlDateTime;
MqlRates    mqlRates;
/*******************Expert initialization function*******************/
int OnInit()
{
   return(INIT_SUCCEEDED);
}/*******************************************************************/

/************************Expert tick function************************/
void OnTick()
{
  bool newDay, newHour;
   TimeToStruct(TimeCurrent(), mqlDateTime);
   CopyRates(_Symbol, PERIOD_H1, 0, 1 mqlRates);
    if((int)mqlDateTime.hour == 0)
     {
      newDay = IsNewBar(_Symbol, PERIOD_D1, oldDay);
   if(newDay)
    Print("***** newDay ", newDay, " mqlDateTime.hour ", mqlDateTime.hour); // Судя по распечатке newDay = true
       newHour = IsNewBar(_Symbol, PERIOD_H1, oldHour); // А это совсем другая переменная
    if(newHour)
     Print("***** newHour ", newHour); // Судя по распечатке newHour = true
        if(newDay && newHour) // A ЭТО УСЛОВИЕ НЕ ВЫПОЛНЕНО НЕСМОТРЯ НА ПРЕДЫДУЩИЕ РАСПЕЧАТКИ.
         {
          Print("Ордер должен откыться. ");
         }
     }
}/*******************************************************************/

/*****************Определение появления нового бара******************/
bool IsNewBar(string symbol, ENUM_TIMEFRAMES timeframe, datetime &m_tOld)
 {
  datetime tNew = (datetime)SeriesInfoInteger(symbol, timeframe, SERIES_LASTBAR_DATE);
   if(tNew > m_tOld)
    {
     m_tOld = tNew;
     return(true);
    }
   return(false);
 }
/********************************************************************/

/******************Expert deinitialization function******************/
void OnDeinit(const int reason)
{
 Comment("");
}/*******************************************************************/
 
Alexey Viktorov:

Es más o menos así

¿Dónde están las comprobaciones de respuesta de CopyRates()?
 
Karputov Vladimir:

Si hay un código, hay un juicio. Si no hay ningún código, entonces todo pasa al modo de los posos del café. Si estás en el ordenador, inventa un código con mis recomendaciones


y compruébelo usted mismo.

Sí, bueno... Presunción de inocencia en acción...

¿Lo necesito? Hay errores en el programa MQ. Puedo trabajar alrededor de ellos yo mismo o con su consejo, pero los errores y tonterías en el software MQ seguirán siendo errores y tonterías.

No estaré en el ordenador hasta el próximo viernes. Y los tirones del gato ya han sido probados. Y da igual que lo tires con la mano derecha o con la izquierda... Los errores son errores, la estupidez es la estupidez.

 
Karputov Vladimir:
¿Dónde están las comprobaciones de respuesta de CopyRates()?
Entiendo que su interés por confirmar el error es nulo. Por eso no puedes hacer nada por ti mismo... Y no tengo que hacerlo, no voy a demostrártelo. ¿Qué me aporta? Nada...
Razón de la queja: