EA para cada par de divisas - ¿qué código para abrir sólo una vez por par de divisas? - página 4

 
onewithzachy:
Estás muy equivocado. Tu código nunca se ejecuta !!!. Usa el de RaptorUK.

Bien :)

Simplemente me confundí con esto:

"terminar cuando j = 0"

¡gracias!

 
grey.unit:

Así que debería ser así:

porque tú escribiste esto:

¿o me equivoco?

Te equivocas . . . echa un vistazo a esto: for

En mi código la expresión 2 es j >= 0 , lo que significa . . . mientras ( j >= 0 ) que el bucle se ejecuta mientras j es 0 o mayor, es decir, desde OrdersTotal() - 1 hasta 0 inclusive

Si usas j = 0 (quizás habría que escribir j == 0) significa while (j == 0) y el bucle sólo se ejecuta cuando j es 0

 
Ah vale, ahora lo he entendido
 
RaptorUK:

No, haz esto. . .

La primera posición de la orden es 0, así que si tienes 5 órdenes las posiciones son 0, 1, 2, 3, 4... así que la última es OrdersTotal() - 1... así que para contar hacia abajo empiezas en OrdersTotal()-1 y terminas en 0

¿Significa esto que OrdersTotal() -1 es No Orders , entonces 0 es el primer pedido, 1 es 2 pedidos y así hasta 4 que es igual a los 5 pedidos.

¿Alguien podría decirme si mi interpretación de que -1 es igual a No orders, es correcta?

Gracias

 
barnacle7:

¿Significa esto que OrdersTotal () -1 es No Orders , entonces 0 es el primer pedido, 1 es 2 pedidos y así sucesivamente hasta 4 que equivalen a los 5 pedidos.

OrdersTotal() es el número de órdenes abiertas. Sí, si tiene 5 en total se numeran del 0 al 4
 

Yo también necesito ayuda sobre el mismo tema. Soy un codificador novato y he estado tratando de introducir el código que vi aquí, pero no funciona en absoluto puede usted ayudarme. El Orderselect fue utilizado

para reemplazar OrdersTotal y controlar el número de operaciones que hace cada EA pero ahora los otros no colocan operaciones

void OnTick()

{
       double movingAverageSS = iMA(NULL,60,LowerMAS,0,MODE_SMA,PRICE_CLOSE,0);    
       double lastmovingAverageSS = iMA(NULL,60,LowerMAS,0,MODE_SMA,PRICE_CLOSE,1);     
       double movingAverageSB = iMA(NULL,60,LowerMAB,0,MODE_SMA,PRICE_CLOSE,0);       
       double lastmovingAverageSB = iMA(NULL,60,LowerMAB,0,MODE_SMA,PRICE_CLOSE,1);          
       double movingAverageFS = iMA(NULL,60,UpperMAS,0,MODE_SMA,PRICE_CLOSE,0);    
       double lastmovingAverageFS = iMA(NULL,60,UpperMAS,0,MODE_SMA,PRICE_CLOSE,1);   
       double movingAverageFB = iMA(NULL,60,UpperMAB,0,MODE_SMA,PRICE_CLOSE,0);    
       double lastmovingAverageFB = iMA(NULL,60,UpperMAB,0,MODE_SMA,PRICE_CLOSE,1);    
       int b;int bM;int s;int sM;    
       bool res = (OrderSelect(b,SELECT_BY_POS));    
       bool resM = (OrderSelect(bM,SELECT_BY_POS));    
       bool ses = (OrderSelect(s,SELECT_BY_POS));    
       bool sesM = (OrderSelect(sM,SELECT_BY_POS));    
       
       if((lastmovingAverageFB<lastmovingAverageSB) && (movingAverageFB > movingAverageSB) && res == false  && resM == false )      
         {
         b = OrderSend (Symbol(),OP_BUY,lotSize,Ask,4,Ask - SLPB*_Point, Ask + TPB1*_Point,NULL,1,0,Green);       
         bM = OrderSend (Symbol(),OP_BUY,lotSize,Ask,4,Ask - SLPB*_Point, Ask + TPB2*_Point,NULL,2,0,Green);       
         }       
         else if((lastmovingAverageFS>lastmovingAverageSS)&&(movingAverageFS<movingAverageSS) && ses == false && sesM == false)     
         {  
         s = OrderSend (Symbol(),OP_SELL,lotSize,Bid,4,Ask + SLPS*_Point,Ask - TPS1*_Point,NULL,3,0,Red);       
        sM = OrderSend (Symbol(),OP_SELL,lotSize,Bid,4,Ask + SLPS*_Point,Ask - TPS2*_Point,NULL,4,0,Red);   
}


 
&& res == false

Orderselect devolverá true si ha seleccionado una orden.

Tal vez usted puede utilizar un número mágico en combinación con el symbolname.

Aquí hay un ejemplo en el artículo que puede estudiar:https://www.mql5.com/en/articles/1359

MagicNumber: "Magic" Identifier of the Order
MagicNumber: "Magic" Identifier of the Order
  • www.mql5.com
In МТ3, management of open positions was rather time-taking. Traders had at their disposal a rather limited tool set to work with the list of open and closed positions. The problem of distinguishing between "own" and "someone else's" positions was solved in rather complicated ways. In МТ4, the situation has cardinally changed. Now, trader can...
 
  1.        int b;int bM;int s;int sM;    
           bool res = (OrderSelect(b,SELECT_BY_POS));    
           bool resM = (OrderSelect(bM,SELECT_BY_POS));    
           bool ses = (OrderSelect(s,SELECT_BY_POS));    
           bool sesM = (OrderSelect(sM,SELECT_BY_POS));    

    b como sin valor, OrderSelect falla. bM como sin valor, OrderSelect falla. s como sin valor, OrderSelect falla. sM como sin valor, OrderSelect falla.

  2. ¿Para qué sirve la selección de varios pedidos? El resultado es la última selección exitosa.

  3.          b = OrderSend (Symbol(),OP_BUY,lotSize,Ask,4,Ask - SLPB*_Point, Ask + TPB1*_Point,NULL,1,0,Green);       
             bM = OrderSend (Symbol(),OP_BUY,lotSize,Ask,4,Ask - SLPB*_Point, Ask + TPB2*_Point,NULL,2,0,Green);       
    
    b y bM son variables locales. Los números de las entradas se pierden al volver.

  4. ¿Por qué se intenta seleccionar por posición, pero se intenta almacenar los números de ticket? Si selecciona por un número de ticket válido no significa que la orden esté abierta.

  5. Usted compra al Ask y vende al Bid.

    1. El TP/SL de tu orden de compra (o la entrada del Stop de Venta/Límite de Venta) se activa cuando el Bid / OrderClosePrice lo alcanza. Utilizando el Ask±n, hace que su SL sea más corto y su TP más largo, por el spread. ¿No quieres que la cantidad especificada se utilice en cualquier dirección?

    2. El TP/SL de su orden de venta (o la entrada del Buy Stop/Buy Limit) se activará cuando el Ask / OrderClosePrice lo alcance. Para disparar a un precio Bid específico, añada el spread medio.
      MODE_SPREAD (Paul) - Foro de programación MQL4 - Página 3 #25

    3. Los gráficos muestran sólo los precios de Oferta. Active la línea Ask para ver el tamaño del spread(Herramientas → Opciones (control+O) → gráficos → Mostrar línea Ask).
      La mayoría de los corredores con spread variable se amplían considerablemente al final del día (5 PM ET) ± 30 minutos. Mi GBPJPY (OANDA) muestra un spread medio = 26 puntos, pero un spread medio máximo = 134.