FORTALEZAS Por favor, ayuda - página 30

 
demonsn:
Gracias. Se ha añadido su opción como comprobación paralela. Ahora sólo es cuestión de aprovechar el momento adecuado.

¡Estoy 100% seguro de que funcionará!

Porque no has rellenado la estructura correctamente (no sólo los campos, sino también los valores).

Es extraño que el compilador no "jure".

A ti:

MqlTradeRequest.action = TRADE_ACTION_DEAL;

Es necesario:

MtRequest.action = TRADE_ACTION_DEAL;
 

¡Pero no! El código de mi mensaje no es del Asesor Experto, es un fragmento corregido de los registros donde se escribe la información de depuración del Asesor Experto. Mi culpa, mi error).

La propia EA rellena la estructura como es debido, pero el resultado de la comprobación es diferente. O calcula el margen correctamente o da alguna tontería como en el ejemplo.

Este es un fragmento del sitio en vivo

   MqlTradeRequest MtRequest = {0}; 

   switch(OrderType)
   {
      case ORDER_TYPE_BUY:         
         MtRequest.price     = CurrentTick.ask;         
         break;

      case ORDER_TYPE_SELL:         
         MtRequest.price     = CurrentTick.bid;
         break;

      default:
         LogFile.Log(LOG_PRINT,__FUNCTION__," error: Invalid OrderType");
         return(false);
   }

   MtRequest.tp        = 0.0;
   MtRequest.sl        = 0.0;
   MtRequest.action    = TRADE_ACTION_DEAL;
   MtRequest.magic     = 0;
   MtRequest.symbol    = strSymbol;
   MtRequest.volume    = dblLots;
   MtRequest.deviation = Config.Deviation;
   MtRequest.type      = OrderType;
   MtRequest.type_filling = Config.OrdersFillingType;
 

Hazlo:

   MqlTradeRequest MtRequest = {0}; 
   MqlTradeRequest MtResult = {0}; 

   switch(OrderType)
   {
      case ORDER_TYPE_BUY:         
         MtRequest.price     = CurrentTick.ask;         
         break;

      case ORDER_TYPE_SELL:         
         MtRequest.price     = CurrentTick.bid;
         break;

      default:
         LogFile.Log(LOG_PRINT,__FUNCTION__," error: Invalid OrderType");
         return(false);
   }

   MtRequest.action    = TRADE_ACTION_DEAL;
   MtRequest.magic     = 77777777777777;
   MtRequest.symbol    = strSymbol;
   MtRequest.volume    = dblLots;
   MtRequest.type      = OrderType;
   MtRequest.type_filling = Config.OrdersFillingType;
   MtRequest.type_time = ORDER_TIME_DAY;
 

Aquí hay otro momento en el registro:

 MqlTradeRequest structure:
   action: Action Deal
   magic: 0
   order: 0
   symbol: Si-12.15
   volume: 2.00
   price: 63365
   stoplimit: 0
   sl: 0
   tp: 0
   deviation: 50
   type: ORDER_TYPE_SELL
   type_filling: ORDER_FILLING_FOK
   type_time: gtc
   expiration: 1970.01.01 00:00
   comment: (null)

 MqlTradeCheckResult structure:
   retcode: 10019 (There is not enough money to complete the request)
   balance: 133921.71
   equity: 132772.57
   profit: 0.00
   margin: 172148.68
   margin_free: -39376.11
   margin_level: 77.13
   comment: No money

Paso la misma estructura a OrderSend() y todo se abre perfectamente.

Por cierto, construye 1194.

Se vende Si-12.15, 2 lotes. El precio de un contrato es de 5090 rublos. Una operación debe tener el QR 5090*2 = 10180 RUB. Pero la función devuelve 172148,68 RUB, lo que equivale a 172148,68 / 5090 = ¡33,82 contratos!

Qué milagro...

 
demonsn:

Aquí hay otro momento en el registro:

Paso la misma estructura a OrderSend() y todo se abre perfectamente.

Por cierto, construye 1194.

Vendiendo Si-12.15, 2 lotes. El precio de un contrato es de 5090 rublos. Una operación debería tener un SE de 5090*2 = 10180 rublos. Y la función devuelve 172148,68 rublos, lo que corresponde a 172148,68 / 5090 = ¡33,82 contratos!

Qué maravillas...

1. Te he dado un ejemplo de cómo rellenar correctamente la estructura, y no haces caso de este consejo.

Entonces, ¿por qué lo preguntas?

2. La compilación 1194 no es compatible con los servidores actuales (Renat lo mencionó. Utilice la compilación 1159 por ahora).

3. No uso OrderCheck() en absoluto, compruebo los fondos yo mismo.

//+------------------------------------------------------------------+
//| Expert Check money function                                      |
//+------------------------------------------------------------------+ 
bool CheckMoney( const string a_symbol, const long volume )
{
  if ( volume <= 0 )
  {
    Print( "Check Money: Объём лота указан не правильно!" );
    retutn ( false );
  } 
//---
  double a_go = SymbolInfoDouble( a_symbol, SYMBOL_MARGIN_INITIAL ) * double( volume);
  double free_margin = ( AccountInfoDouble( ACCOUNT_FREEMARGIN ) / 100 ) * 90; //90% от свободных средств
//---  
  if ( a_go <= free_margin )
  {
    return( true );
  }
  Print( "Check Money: Не достаточно средств!" );
  return( false );
}
 
Михаил:

1. Te he dado un ejemplo de cómo rellenar la estructura correctamente y no haces caso de este consejo.

¿Por qué preguntas entonces?

2) La compilación 1194 no es compatible con los servidores actuales (Renat lo mencionó. Usa la compilación 1159 por ahora).

3. No uso OrderCheck() en absoluto, compruebo los medios yo mismo.


1. No lo ignoro en absoluto. No lo ignoro en absoluto. He incluido tu ejemplo en el código, ahora lo estoy observando.

2. ¡Ah, tío! No lo sabía.

3. Yo hice lo mismo. Y la función es casi exactamente la misma, excepto el 90% (buena idea, por cierto).

Planteé esta cuestión porque mi función (similar a la suya) comprueba el CS y permite abrir la posición, mientras que la OrderCheck() estándar a veces falla.


Esto se refiere probablemente al punto 2.

En el registro de la terminal hay un montón de mensajes como:

2015.10.22 21:28:13.966 Ticks   old tick @RTS (tick: 2015.10.22 18:28:21, last: 2015.10.22 18:28:22) 0/0
2015.10.22 21:28:13.966 Ticks   old tick RTS-12.15 (tick: 2015.10.22 18:28:21, last: 2015.10.22 18:28:22) 0/0
2015.10.22 21:28:13.966 Ticks   old tick @RTS (tick: 2015.10.22 18:28:21, last: 2015.10.22 18:28:22) 0/0
2015.10.22 21:28:13.966 Ticks   old tick RTS-12.15 (tick: 2015.10.22 18:28:21, last: 2015.10.22 18:28:22) 0/0
2015.10.22 21:28:13.966 Ticks   old tick @RTS (tick: 2015.10.22 18:28:21, last: 2015.10.22 18:28:22) 0/0
2015.10.22 21:28:13.966 Ticks   old tick RTS-12.15 (tick: 2015.10.22 18:28:21, last: 2015.10.22 18:28:22) 0/0
2015.10.22 21:27:40.995 Ticks   old tick @LKOH (tick: 2015.10.22 18:27:48, last: 2015.10.22 18:27:49) 0/0
2015.10.22 21:27:40.995 Ticks   old tick LKOH-12.15 (tick: 2015.10.22 18:27:48, last: 2015.10.22 18:27:49) 0/0
2015.10.22 21:26:38.952 Ticks   old tick @Si (tick: 2015.10.22 18:26:46, last: 2015.10.22 18:26:47) 0/0
2015.10.22 21:26:38.952 Ticks   old tick Si-12.15 (tick: 2015.10.22 18:26:46, last: 2015.10.22 18:26:47) 0/0
2015.10.22 21:26:38.952 Ticks   old tick @Si (tick: 2015.10.22 18:26:46, last: 2015.10.22 18:26:47) 0/0
2015.10.22 21:26:38.952 Ticks   old tick Si-12.15 (tick: 2015.10.22 18:26:46, last: 2015.10.22 18:26:47) 0/0
2015.10.22 21:26:38.952 Ticks   old tick @Si (tick: 2015.10.22 18:26:46, last: 2015.10.22 18:26:47) 0/0
2015.10.22 21:26:38.952 Ticks   old tick Si-12.15 (tick: 2015.10.22 18:26:46, last: 2015.10.22 18:26:47) 0/0
2015.10.22 21:26:38.952 Ticks   old tick @Si (tick: 2015.10.22 18:26:46, last: 2015.10.22 18:26:47) 0/0
2015.10.22 21:26:38.952 Ticks   old tick Si-12.15 (tick: 2015.10.22 18:26:46, last: 2015.10.22 18:26:47) 0/0
2015.10.22 21:26:38.952 Ticks   old tick @Si (tick: 2015.10.22 18:26:46, last: 2015.10.22 18:26:47) 0/0
 
demonsn:


1. ¿Por qué debería ignorarlo? No lo ignoro en absoluto. He incluido tu ejemplo en el código, ahora estoy mirando.

2. ¡Ah, tío! No lo sabía.

3. Yo hice lo mismo. Y la función es casi exactamente la misma, excepto el 90% (buena idea, por cierto).

Precisamente he hecho esta pregunta porque mi función (similar a la suya) comprueba el CS y permite abrir la posición, mientras que OrderCheck() estándar a veces falla.

Así que utilice el suyo propio en FORTS - es mucho más correcto :)
 
Михаил:
Así que utiliza todos los tuyos en FORTS - es mucho más correcto :)

Así es como acabas haciéndolo. Tentado en algún lugar de utilizar el código o la biblioteca de otra persona, con el fin de ahorrar tiempo en la escritura de una "rueda" o probar alguna idea.

Pero al final tienes que dedicar una semana a coger errores y defectos de otros desarrolladores. Al final todo se reescribe para que no haya rastro del código de otros.

 

¡Hola!

Las colas de futuros aparecieron en la ventana de prueba, lo que en sí mismo es muy agradable, sin embargo, al tratar de hacer coincidir la cola con el contrato, me encontré con que no hay operaciones en la cola en absoluto - todo está bien en los contratos - hay un montón de operaciones. He comprobado en cuatro instrumentos Si,RTS,GAZR,SBRF y el período 01.01.2015 -24.10.2015.

 
Andrey Kotrin:

¡Hola!

Las colas de futuros aparecieron en la ventana de prueba, lo que en sí mismo es muy agradable, sin embargo, al tratar de hacer coincidir la cola con el contrato, me encontré con que no hay operaciones en la cola en absoluto - todo está bien en los contratos - hay un montón de operaciones. He comprobado en cuatro instrumentos Si,RTS,GAZR,SBRF y el período 01.01.2015 -24.10.2015.

El probador no funciona correctamente en los futuros.
Razón de la queja: