Debate sobre la implantación de los consejeros. - página 2

 
Georgiy Merts:

NO ENTIENDO cómo funciona, es más, este mismo forista cuando se le hizo la pregunta dijo que ya no se acordaba, sólo que ese código ya había sido probado muchas veces y era de confianza.

Bueno, si consigo sustituir estas estúpidas "preguntas" por verdaderos enunciados "if", lo resolveré... Por ahora...

Por cierto, hoy he echado un vistazo a este horror.

Esto es lo que significa:

ENUM_ORDER_TYPE_FILLING otfMyRes  = WRONG_VALUE;   

if(iFillingMode == 0 || (otfFilingType >= ORDER_FILLING_RETURN) || ((iFillingMode & (otfFilingType + 1)) != otfFilingType + 1))
	{
        if(steExeMode == SYMBOL_TRADE_EXECUTION_EXCHANGE || steExeMode == SYMBOL_TRADE_EXECUTION_INSTANT)
                otfMyRes = ORDER_FILLING_RETURN;
        else   
                if(iFillingMode == SYMBOL_FILLING_IOC)
                        otfMyRes = ORDER_FILLING_IOC;
                else
                        otfMyRes = ORDER_FILLING_FOK;
        }
   else      
        otfMyRes = otfFilingType;

return(otfMyRes);  

En mi opinión, es mucho más claro sin estas "preguntas", a través de si y con sangría. Aunque la eficiencia del código es absolutamente la misma.

Por cierto, se puede ver enseguida que el autor se ha ceñido a los valores numéricos de iFillingMode y otfFilingType, lo que, en mi opinión, no es una buena práctica.

 
Georgiy Merts:

Por cierto, hoy he echado un vistazo a este horror.

Esto es lo que significa:

En mi opinión, es mucho más claro sin estas "preguntas", a través de si y con guiones. Aunque la eficiencia del código es absolutamente la misma.

Por cierto, se puede ver enseguida que el autor se ha ceñido a los valores numéricos de iFillingMode y otfFilingType, lo que, en mi opinión, no es una buena práctica.

En mi lib es así:

#ifdef __MQL5__
   ENUM_ORDER_TYPE_FILLING COrder::GetFilling(ENUM_FILLING_MODE mFilling){
      if (!_fillingMode) return ORDER_FILLING_RETURN;
      else if (mFilling==FILLING_AUTO||mFilling==FILLING_FOK) return !(_fillingMode&SYMBOL_FILLING_FOK)?ORDER_FILLING_IOC:ORDER_FILLING_FOK;
      else return  !(_fillingMode&SYMBOL_FILLING_IOC)?ORDER_FILLING_FOK:ORDER_FILLING_IOC;}
#endif

_fillingMode es una macro que se expande en la desreferenciación de este campo

fillingMode=(int)SymbolInfoInteger(symbol,SYMBOL_FILLING_MODE);
 
Georgiy Merts:

Eso es otra cosa.

Ahora que lo pienso, a veces miro mi propio código y no entiendo por qué está escrito en ese lugar concreto. Por eso intento comentar esos lugares con mucho detalle, tratando de mencionar todos los detalles. Pero aún así veo regularmente que no he tenido en cuenta algunas cosas.

Además, utilizo el siguiente código (para determinar el tipo de ejecución), que fue escrito por un usuario muy autorizado del foro:

NO ENTIENDO cómo funciona, es más, este mismo forista dijo cuando le preguntaron que ya no se acordaba, es que este código ya ha sido probado muchas veces y es de confianza .

Bueno, si tengo la oportunidad de sustituir estas estúpidas "preguntas" por verdaderos enunciados de "si", lo resolveré... Por ahora...

Amarillo - muy extraño que una persona no pueda entender inmediatamente el código trivial que él mismo escribió.

Rojo - No era demasiado perezoso y comprobado de nuevo, al ejecutar en el mercado, no puedo ORDER_FILLING_RETURN, es sólo para el stock (hay un error en los muelles), y esto es lo que el respetado propietario del foro ha devuelto))

 
Vladimir Simakov:

Amarillo - es muy extraño que una persona no pueda entender un código trivial, que él mismo escribió.

Rojo - No me dio pereza y lo comprobé de nuevo, al ejecutar en el mercado, no se puede ORDER_FILLING_RETURN, es sólo para el intercambio (hay un error en los muelles), y esto es lo que devuelve el respetado miembro del foro))

No sé, no sé. lo "trivial" que es este código en tal entrada. Tardé al menos 15 minutos en comprender su lógica, y sólo al escribir los "si" tuvo sentido para mí.

Y sobre lo de "hay un error en los documentos", ¿puede explicarlo con más detalle?

 
Georgiy Merts:

No sé, no sé hasta qué punto es "trivial" este código en un post como este. Tardé al menos 15 minutos en entender la lógica de su trabajo, y sólo al escribir los "si" me quedó claro.

Y sobre el "error en los muelles", ¿puede decirme más al respecto?

En la ejecución del intercambio

SymbolInfoInteger(symbol,SYMBOL_FILLING_MODE)

devuelve 0, pero en el mercado (lo he comprobado en Alpari)

SYMBOL_FILLING_IOC | SYMBOL_FILLING_FOK

Lo he comprobado con Alpari y devuelve 0x3. Si lo intentas de esta manera

MqlTradeRequest::filling_mode=ORDER_FILLING_RETURN

Si lo intentas, no se abrirá.

 
Vladimir Simakov:

entonces no se abrirá.

Comprobada la función original.

#include <MT4Orders.mqh>

#define  Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)

void OnTick()
{
  if (!OrdersTotal())
  {
    OrderSend(_Symbol, OP_BUY, 0.1, Ask, ORDER_FILLING_FOK, 0, 0);    
    OrderSend(_Symbol, OP_BUY, 0.1, Ask, ORDER_FILLING_IOC, 0, 0);    
    OrderSend(_Symbol, OP_BUY, 0.1, Ask, ORDER_FILLING_RETURN, 0, 0);    
  }  
}

Funciona.

 
fxsaber:

Comprobada la función original.

Funciona.

Pruébelo en la ejecución del mercado en lugar de la ejecución de la bolsa)

UPD: corrección, en la ejecución inmediata, la que

SÍMBOLO_COMERCIO_EJECUCIÓN_INSTANTE

 
Vladimir Simakov:

Intentar la ejecución en el mercado en lugar de la ejecución en la bolsa)

UPD: corrección, en la ejecución inmediata, la que

SÍMBOLO_COMERCIO_EJECUCIÓN_INSTANTE

Prueba de EA arriba. Pruébalo.

 
Vladimir Simakov:

Intentar la ejecución en el mercado en lugar de la ejecución en la bolsa)

UPD: corrección, en la ejecución inmediata, la que

SÍMBOLO_COMERCIO_EJECUCIÓN_INSTANTE

Son, por ejemplo, cuentas de tipo estándar en A-ri, ¿no?

Y los corredores de bolsa que negocian siempre tienen este tipo de ejecución, ¿verdad?

Sólo para aclarar.

 

¿Por qué molestarse?

Utiliza las clases estándar y no necesita llenar ninguna estructura(MqlTradeRequest) y no necesita conocer ningún relleno e instantes:


#include<Trade\SymbolInfo.mqh>
#include<Trade\AccountInfo.mqh>
#include<Trade\Trade.mqh>

CTrade  
CAccountInfo 
CPositionInfo 
Razón de la queja: