Errores, fallos, preguntas - página 445

 
komposter:

Para el seguimiento de la normalización del lote

Chicos, ¿por qué teorizar?

Para reírse y no oxidarse la cabeza.

Todo tiene que ser con moderación. Mi versión lleva más de 5 años trabajando con dinero real, con diferentes brokers, tipos de cuenta e instrumentos, y nunca me he equivocado.
Nunca he cometido un error y nunca lo haré. No importa, no hablamos en serio.
 
komposter:

El paso debe ser un múltiplo del lote mínimo.

¿Por qué estás tan seguro? Práctica: lo entiendo, pero no la limitación del motor.
Los argumentos de las partes son claros. En cualquier caso, agradezco sinceramente la simpatía. :)

Cisne:

Mirado, todos los instrumentos se negocian al mismo tiempo en las cuentas del campeonato. Registro)

Sí parece que se ha registrado. Ese es el que me da este error.

Cisne:

Puede que lo intente de nuevo:

if(precio actual == 0,0) return;

Gracias por la idea. Tendré que probar esta opción. :)

 

voix_kas:

Sí, creo que estoy registrado. Ahí es donde me encuentro con este error.

Hay una barra de minutos en GBPCHF 2011.01.03 a las 00:00. ¿No se ha puesto en contacto con servicedesk?
 
Swan:
En GBPCHF 2011.01.03 a las 00:00 hay una barra de minutos. ¿Se ha puesto en contacto con servicedesk?

No fui a la SD.

Esta es la situación. Estoy escribiendo un EA multidivisa. Lo pongo en el gráfico de Eurobucks y trato de seguir todos los pares de divisas válidos pasados al Asesor Experto como parámetro.

Falta de metodología/documentación. He aquí algunas preguntas, por ejemplo:

1. ¿Por qué el precio puede ser cero? Al fin y al cabo, en ese momento (2011.01.03 00:00:00) todavía existía el último precio conocido (tanto Bid como Ask)... En qué principios se basa el terminal para dar esto.

2. hay una sesión de cotización. ¿En qué se diferencia, en principio, de una sesión de negociación? Es lógico suponer que es posible operar durante la segunda. Y si no podemos negociar durante la primera sesión (de cotización), ¿por qué cambian las cotizaciones? Las cotizaciones cambian debido a, perdón por esta interpretación, "el desequilibrio de la oferta y la demanda".

3. Supongamos que recibimos un Tick en un par de divisas. En el mismo evento tratamos de "ver" el estado de otro par. ¿Dónde está la garantía de que el último presupuesto que llegó para el otro par sigue siendo válido? ¿Cuál es la duración de una cotización? La explicación más racional es la comprobación de la última cotización con la comprobación simultánea del volumen del lote en el mercado. Es decir, tal y como yo lo veo: se recibe N cotización de eurusd. No viene de balde, sino que se coloca una opción a esta cotización por un determinado volumen. Los que quieren comprar/vender se están llevando el pastel. En algún momento, se acaba (el pastel) y esta cita "deja de vivir". A continuación, el terminal da la siguiente cotización (menos atractiva). ¿Y si no hay ninguna cotización (nadie quiere vender/comprar divisas)? ¿Entonces el precio es igual a cero?

De todas formas, no soy un experto en bolsa/forex.

Agradecería que alguien me diera una respuesta detallada a las preguntas formuladas. ¿Cómo es realmente y cómo se presentan estas o aquellas situaciones en el terminal MT5?

 
voix_kas:

No fui a la SD.

Esta es la situación. Estoy escribiendo un EA multidivisa. Lo pongo en el gráfico de Eurobucks y trato de seguir todos los pares de divisas válidos pasados al Asesor Experto como parámetro.

Falta de metodología/documentación. He aquí algunas preguntas, por ejemplo:

1. ¿Por qué el precio puede ser cero? Al fin y al cabo, en ese momento (2011.01.03 00:00:00) todavía existía el último precio conocido (tanto Bid como Ask)... En qué principios se basa el terminal para dar esto.

2. hay una sesión de cotización. ¿En qué se diferencia, en principio, de una sesión de negociación? Es lógico suponer que es posible operar durante la segunda. Y si no podemos negociar durante la primera sesión (de cotización), ¿por qué cambian las cotizaciones? Las cotizaciones cambian debido a, perdón por esta interpretación, "el desequilibrio de la oferta y la demanda".

3. Supongamos que recibimos un Tick en un par de divisas. En el mismo evento tratamos de "ver" el estado de otro par. ¿Dónde está la garantía de que el último presupuesto que llegó para el otro par sigue siendo válido? ¿Cuál es la duración de una cotización? La explicación más racional es la comprobación de la última cotización con la comprobación simultánea del volumen del lote en el mercado. Es decir, tal y como yo lo veo: se recibe N cotización de eurusd. No viene de balde, sino que se coloca una opción a esta cotización por un determinado volumen. Los que quieren comprar/vender se están llevando el pastel. En algún momento, se acaba (el pastel) y esta cita "deja de vivir". A continuación, el terminal da la siguiente cotización (menos atractiva). ¿Y si no hay ninguna cotización (nadie quiere vender/comprar moneda)? ¿Entonces el precio es igual a cero?

De todas formas, no soy un experto en bolsa/forex.

Agradecería que alguien me diera una respuesta detallada a las preguntas formuladas. ¿Cómo es en la realidad, y cómo se representan estas o aquellas situaciones en el terminal MT5?

Tratemos el tema punto por punto. Un Asesor Experto es multidivisa, por lo que debe comportarse en consecuencia.

1. Excluyamos el principal problema posible de obtener el precio 0 - la lista de símbolos que se supone que se negocian seleccionados selectivamente (es decir, usted no necesita preocuparse por la disponibilidad de los símbolos necesarios en MarketWatch)?

2. En cuanto a las sesiones de negociación y cotización, el comentario ya ha sido realizado por los desarrolladores (en particular, Rashid Umarov lo comentó aquí). Sobre una situación en la que hay una cotización, pero no se puede operar - es bastante normal (especialmente para el mercado de valores). Además, nadie garantiza que las cotizaciones se actualicen durante una sesión de negociación. 3.

3. sobre el vaso - y dónde conseguir el vaso (sobre todo, qué poner en él) en el mercado de divisas? Para las preguntas las respuestas son así (si todo está bien y hay conexión con el servidor):

(a) La "última cotización" (información sobre el último tick) es válida desde que se produce un tick hasta que aparece un nuevo tick. En el terminal, la hora de la última cotización puede verse en la "visión general del mercado".

b) Si usted recoge la información sobre los ticks sólo en el manejador OnTick() de un Asesor Experto multidivisa, nadie puede garantizar, que entre los ticks del par principal no habrá una docena de ticks de otros pares. Porque dependiendo de un par y de la actividad comercial en él, entre los ticks puede pasar desde una fracción de segundo hasta varios minutos.

Por supuesto, para el mercado Forex (especialmente para el EURUSD) no es muy esencial, pero debe ser recordado y tenido en cuenta en la lógica del Asesor Experto.

c) Se puede determinar programáticamente la hora de la última cotización analizando la estructura de MqlTick y comparando la hora de la última cotización con un valor determinado, se puede determinar fácilmente la relevancia de una cotización.

struct MqlTick
  {
   datetime     time;          // Время последнего обновления цен
   double       bid;        // Текущая цена Bid
   double       ask;        // Текущая цена Ask
   double       last;       // Текущая цена последней сделки (Last)
   ulong        volume;     // Объем для текущей цены Last
  };

d) Como ya he mencionado anteriormente, debe supervisar la conexión con el servidor y, si es posible, comprobar/recibir las cotizaciones no sólo en OnTick(), sino también en OnTimer().

 

Vayamos al revés. ¿En qué circunstancias el precio (oferta/demanda) puede tomar valores cero en la terminal?

Luego viene la segunda pregunta. Pues bien, hemos comprobado que la última cotización de este símbolo se recibió hace 2 segundos/minutos/hora. La sesión de negociación no se cerró. ¿Cómo podemos evitar el error de "no tener precio"?

Документация по MQL5: Получение рыночной информации / SymbolInfoSessionQuote
Документация по MQL5: Получение рыночной информации / SymbolInfoSessionQuote
  • www.mql5.com
Получение рыночной информации / SymbolInfoSessionQuote - Документация по MQL5
 
voix_kas:

Vayamos al revés. ¿En qué circunstancias el precio (oferta/demanda) puede tomar valores cero en la terminal?

Luego viene la segunda pregunta. Pues bien, hemos comprobado que la última cotización de este símbolo se recibió hace 2 segundos/minutos/hora. La sesión de negociación no se cerró. ¿Cómo es posible que no aparezca un error de "no hay precio"?

Cuando recibió un precio cero, ¿preguntó a GetLastError?
 
stringo:
Cuando obtuviste el precio cero, ¿preguntaste a GetLastError?

Código de error: 4756. Puedes verlo en la captura de pantalla.

Además. Aquí está el mismo error recibido. Al mismo tiempo, el marketwatch muestra la presencia del precio y la herramienta se sincroniza en los registros.

 
voix_kas:

Código de error: 4756. Puedes verlo en la captura de pantalla.

Además. Aquí está el mismo error recibido. Mientras que el mercado muestra la disponibilidad de precios y la herramienta se sincroniza en los registros.

Necesita un código de error después de "no hay precio...", no después de "falló...".
 
uncleVic:
Necesita el código de error después de "no hay precio...", no después de "falló...".
  ...
  // Формирование торгового приказа.
  MqlTradeResult TradeResult;
  MqlTradeRequest TradeRequest;

  TradeRequest.action = TRADE_ACTION_DEAL;
  TradeRequest.symbol = Instrumet;
  TradeRequest.volume = NormalizeDouble(Volume, 8);
  TradeRequest.price = SymbolInfoDouble(Instrumet, SYMBOL_ASK);
  TradeRequest.sl = 0;
  TradeRequest.tp = 0;
  TradeRequest.deviation = Deviation;
  TradeRequest.type = ORDER_TYPE_BUY;
  TradeRequest.type_filling = TypeFilling;

  // Отправка торгового приказа.
  ResetLastError();
  if (!IsTradeAllowed()) return;
  if (OrderSend(TradeRequest, TradeResult)) TradeResultAnalyse("Buy.OrderSend", TradeResult.retcode);
  else Print("Buy.OrderSend = false! Код ошибки: \'", _LastError, "\'.");

¿Y cómo capto el código de error en el punto que indicas? Registro el error en la última línea del código anterior.

Este error no aparece si se añade el siguiente término justo antes de este código:

if(!NormalizeDouble(SymbolInfoDouble(Instrumet, SYMBOL_ASK), 8)) return;
Razón de la queja: