FUERTES: Para ayudar a los principiantes - página 4

 
Sergey Chalyshev:
¿Qué tiene esto que ver con el ava? No puede escribir en el foro, está baneado permanentemente.
Vale, no sabía que había una prohibición "parcial". Es una pena.
 
Sergey Chalyshev:
¿Qué tiene eso que ver con el ava? No puede escribir en el foro, está baneado para siempre.

No, ha sido desbancado.

Los usuarios prohibidos se escriben tachados.

 
Andrey Khatimlianskii:

No, ha sido desbancado.

Los usuarios prohibidos se escriben tachados.

Yo también lo pensé, mejor pregunta a los moderadores, ellos lo saben seguro.
 
Mikhail Filimonov:

Características:

Recepción de la confirmación (TRADE_RETCODE_PLACED ) en el código de retorno de OrderSend() y en el ticket de pedido,

y para la función OrderSendAsync() en OnTradeTransaction(), esto no significa en absoluto que

el pedido está realmente EXPUESTO a un intercambio.

Por lo tanto, se necesita una comprobación adicional del estado del pedido (al igual que para otras acciones en el pedido).

if ( OrderSend( request, result ) )
{
  if ( result.retcode == TRADE_RETCODE_PLACED )
  { 
    ticket = result.order;
  }
}

https://www.mql5.com/ru/docs/constants/structures/mqltraderesult

Dice que el ticket se llena sólo cuando el tipo deoperación esTRADE_ACTION_PENDING.

Si la operación es TRADE_ACTION_DEAL, ¿se devolverá el ticket de pedido en result.order?

Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура результата торгового запроса
Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура результата торгового запроса
  • www.mql5.com
Стандартные константы, перечисления и структуры / Структуры данных / Структура результата торгового запроса - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Sí.
 
Sergei Vladimirov:
Sí.

¿Cuándo se produce el error 10013 en respuesta a OrderCheck()?

Aquí está el código de mi script:

   MqlTradeRequest   m_request;         
   MqlTradeCheckResult m_check_result;  
   
   m_request.action      =TRADE_ACTION_DEAL;
   m_request.symbol      =Symbol();
   m_request.magic       =001;
   m_request.volume      =1.00;
   m_request.type        =ORDER_TYPE_SELL;
   m_request.type_filling=ORDER_FILLING_RETURN;
   if(!OrderCheck(m_request,m_check_result))
      Print(__FUNCTION__+": order check failed.");
   else
      Print(__FUNCTION__+": order check passed.");
   Print(__FUNCTION__+": symbol=",m_request.symbol,", operation=",m_request.type,", volume=",m_request.volume);
   Print(__FUNCTION__+": retcode=",m_check_result.retcode,", balance=",m_check_result.balance,", equity=",m_check_result.equity,", profit=",m_check_result.profit,
            ", margin=",m_check_result.margin,", margin_free=",m_check_result.margin_free,", margin_level=",m_check_result.margin_level,
            ", comment=",m_check_result.comment);

Este es el registro que estoy recibiendo:

Check (RTS-6.16,M30)    OnStart: retcode=10013, balance=0.0, equity=0.0, profit=2.121995790965272 e-314, margin=0.0, margin_free=0.0, margin_level=0.0, comment=Invalid request
Check (RTS-6.16,M30)    OnStart: symbol=RTS-6.16, operation=1, volume=1.0
Check (RTS-6.16,M30)    OnStart: order check failed.
 
igorbel:

¿Cuándo se produce el error 10013 en respuesta a OrderCheck()?

Aquí está el código de mi script:

Este es el registro que obtengo:

Pasado cuando se añade m_request.expiration =0, aunque la ayuda dice:

Ejecución del intercambio.

Orden de apertura de una posición en el modo de ejecución de la bolsa. Requiere que se especifiquen 5 campos:

  • acción
  • símbolo
  • volumen
  • tipo
  • tipo_relleno

También puede especificar campos mágicos y de comentarios.

 

Pero las rarezas no acaban ahí.

1 lote Comprar:

Check (RTS-6.16,M30) OnStart: retcode=0, balance=530863.24, equity=538989.4399999999, profit=2.121995790965272e-314, margin=211242.25, margin_free=319620.99, margin_level=255.1522907941001, comment=Done

Check (RTS-6.16,M30) OnStart: symbol=RTS-6.16, operation=0, volume=1.0

Margen para la transacción 211242.25, el mismo que el margen actual - todo correcto ya que la posición corta actual para RTS-6.16 es de 2 contratos. Margen inicial para 1 contrato RTS-6.16 17388.75

Agrego un lote más.

2 lotes Comprar:

Check (RTS-6.16,M30) OnStart: retcode=0, balance=651428.4399999999, equity=659212.76, profit=2.121995790965272e-314, margin=211242.25, margin_free=440186.19, margin_level=312.0648260468727, comment=Done

Check (RTS-6.16,M30) OnStart: symbol=RTS-6.16, operation=0, volume=2.0

Todo está bien, ya que la posición actual es de 2 Vender, el margen se mantiene sin cambios.

Ahora 3 contratos de compra:

2016.04.28 01:26:47.319 Check (RTS-6.16,M30) OnStart: retcode=0, balance=651428.4399999999, equity=658739.4, profit=2.121995790965272e-314, margin=246019.75, margin_free=405408.69, margin_level=267.7587470111648, comment=Done

2016.04.28 01:26:47.319 Check (RTS-6.16,M30) OnStart: symbol=RTS-6.16, operation=0, volume=3.0

Valor del margen a la vez 246019,75. ¿Por qué? Por 1 contrato sólo 17k. ¿Y los demás valores (también en los casos anteriores)? ¿De dónde proceden esta equidad y este equilibrio? Ni siquiera tengo esa cantidad en mi cuenta. margin_free también se equivoca, no habla de beneficios.

¿Puede alguien comprobarlo por mí, tal vez estoy haciendo algo mal?


 
igorbel:

Pasó cuando añadí m_request.expiration =0, aunque lo dice en la ayuda:

Inicialice siempre todas las variables y estructuras con ceros inmediatamente después de la declaración. Tenías algo de basura en el campo de expiración, por lo que tienes un error.

MqlTradeRequest   m_request;         
MqlTradeCheckResult m_check_result; 

ZeroMemory(m_request);
ZeroMemory(m_check_result);
// теперь заполняйте нужные поля
 
Sergei Vladimirov:

Inicialice siempre todas las variables y estructuras con ceros inmediatamente después de la declaración. Tenías algo de basura en el campo de expiración, por eso te dio el error.

Gracias. Pero he abandonado OrderCheck(), es una función casi inútil en FORTS al menos. En primer lugar, da resultados poco claros. Pero incluso cuando los valores son más o menos correctos, siempre hay una probabilidad de que la orden sea rechazada en la bolsa. Por eso tenemos que mirar el estado del pedidoORDER_STATE_REJECTED y también ver el comentario. Entonces tenemos que disminuir el volumen del pedido y enviarlo de nuevo. Por supuesto, todo esto no agiliza el comercio, pero ¿qué podemos hacer?