Símbolos personalizados. Errores, fallos, preguntas, sugerencias. - página 33

 
RusPro #:

Probé su prueba, es exactamente lo mismo - se retrasa por un par de segundos. no en la costumbre, pero en los futuros de plata

Instrumento Silv-12.21. MICEX, broker BCS. Pero creo que no importa.

Pero en su caso es posible que el gráfico se construya no en las ofertas, o que el corredor tiene diferentes flujos de cotización y comercio (aunque, en la bolsa - poco probable).

El tema que nos ocupa es el de los instrumentos personalizados.

 
Andrey Khatimlianskii #:

No hablamos de herramientas ordinarias, sino de castum. Por definición, toda la información sobre ellos está disponible en el terminal, nada debe ir al servidor.

Tal vez hay alguna tontería allí - como la solicitud de tiempo del servidor o algo así. En general, es un error garrafal. Y si se inicia una prueba si no hay conexión física, ¿qué ocurrirá? Tengo curiosidad, pero no tengo nada para probarlo.

 

Hola a todos!
Por alguna razón la historia no se está copiando en el símbolo personalizado. El código es el más sencillo. No me da ningún error, pero no hay comillas en el símbolo personalizado.

Sólo quiero transferir las cotizaciones reales con un desfase de 1 hora al símbolo personalizado.

¿Puede decirme por qué el resultado está vacío?
Gracias.


int OnInit()
  {
   
   string Sym1 = "EURUSD"; /// источник
   string Sym2 = "EURUSD2";   /// приемник
   int HBack = 1;   /// количество часов сдвига
   datetime tc = StringToTime(TimeCurrent());   /// конец участка
   datetime sht = tc - HBack * 60 * 60;
   datetime sht2 = tc - 2 * HBack * 60 * 60;
   
   MqlRates mrates[];
   
   if( CopyRates(Sym1, PERIOD_M1, sht, tc, mrates) < 0 ){
        
        Alert("Ошибка копирования исторических данных - ошибка:", GetLastError() );
        return(INIT_FAILED);
        
        }
        
   if( CustomRatesReplace(Sym2, sht2, sht, mrates, WHOLE_ARRAY) < 0 ){
      
      Alert("Ошибка вставки исторических данных - ошибка:", GetLastError() );
        return(INIT_FAILED);
        
        }
      
   
   return(INIT_SUCCEEDED);
  }
 

SymbolInfoXXX se está quedando atrás en comparación con iClose:

los símbolos personalizados (tanto los ticks como las barras).

He encontrado queSymbolInfoDouble y SymbolInfoTick, que son llamados en el EA, trabajando en este gráfico, en algún momento"cuelgan": en la visión general del mercado las cotizaciones cambian, el gráfico se actualiza, iClose y CopyTicksRange obtienen datos reales, pero SymbolInfoXXX da información obsoleta.

En el proceso de análisis llegó al código más simple, que pretendía detectar estos "cuelgues", pero mucho antes demostró el problema desde el otro lado:¡SymbolInfoXXX simplemente se retrasa implacablemente en comparación con iClose! Se puede ver a simple vista:


Ejecute dicho EA en su gráfico de castum, por favor:

int OnInit(void)
{
        EventSetMillisecondTimer(10);
        return(INIT_SUCCEEDED);
}

void OnDeinit(const int reason)
{
        EventKillTimer();
        Comment("");
}

void OnTimer(void)
{
        MqlTick tick;
        SymbolInfoTick( _Symbol, tick );

        Comment( "SymbolInfoInteger( _Symbol, SYMBOL_TIME ) = ", TimeToString( SymbolInfoInteger( _Symbol, SYMBOL_TIME ), TIME_SECONDS ),
                                        "\nSymbolInfoDouble( _Symbol, SYMBOL_BID ) = ", SymbolInfoDouble( _Symbol, SYMBOL_BID ),
                                        "\ntick.time = ", TimeToString( tick.time, TIME_SECONDS ),
                                        "\ntick.bid = ", tick.bid,
                                        "\niClose[0] = ", iClose( _Symbol, PERIOD_CURRENT, 0 ) );
}

(OnTimer puede ser cambiado por OnTick, no cambia la esencia)

¿Tiene usted retrasos similares?


 
Andrey Khatimlianskii #:

Ejecuta un EA como este en tu gráfico de náufrago, por favor:

¿Tiene frenos similares?

En un símbolo personalizado que no se actualiza y no tiene un tick en Market Watch, no se siente ningún freno.

 
MOZART09 el símbolo personalizado. El código es el más sencillo.

No se puede crear un símbolo personalizado con el código más sencillo. Hay muchas volteretas. Mira esto.

Пользовательские символы: основы применения на практике
Пользовательские символы: основы применения на практике
  • www.mql5.com
Статья посвящена программной генерации пользовательских символов, с помощью которых демонстрируется несколько популярных способов отображения котировок. Предложен вариант малоинвазивной адаптации советников для торговли реальным символом с графика производного пользовательского символа. Исходные коды MQL прилагаются.
 
fxsaber #:

En un símbolo personalizado que no se actualiza y no tiene un tick en Market Watch, no siento los frenos.

Probablemente porque los frenos están precisamente en la actualización (o más bien en la recepción de la información actualizada por el EA que se ejecuta en dicho gráfico)?

 
Andrey Khatimlianskii #:

¿Probablemente porque es la actualización (o más bien la obtención de información actualizada de un EA que se ejecuta en dicho gráfico) lo que ralentiza las cosas?

No utilizo símbolos personalizados actualizables, así que no lo sé.

 

Construir 3091, atrapado citas colgantes (clic):


El último tick devuelto por SymbolInfoDouble y SymbolInfoTick es 04:52:07 (bid 61083.19)

Al mismo tiempo que los nuevos ticks están en el historial del instrumento, el gráfico y el marketwatch se actualizan, iClose devuelve el valor correcto.

Hay un código para reproducirlo. ¿Qué más tengo que arreglar?

 

Encontré una correlación - sólo los instrumentos en los que los gráficos estaban abiertos (y el EA se estaba ejecutando para seguirlos, respectivamente) se congelaron.

Si cambio el instrumento gráfico por otro (también castrum, pero no activo hasta ahora), todo está bien allí. Si volvemos a un instrumento "congelado", o abrimos un nuevo gráfico para él, allí SymbolInfoDouble y SymbolInfoTick siguen en el mismo estado de congelación.