Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 398

 
Copiando de nuevo.

Es necesario escribir parte del código del robot de comercio para que realice una operación una vez si se cumplen las condiciones de comercio.
Por ejemplo:
1) Si la Línea_1 es mayor que la Línea_2, se ejecuta una operación de compra,
2) La operación se cierra en SL o TP,
3) Si la Línea_1 es mayor que la Línea_2, no se ejecuta una operación hasta que las condiciones cambien. .

Si las condiciones cambian, es decir, si la Línea_2 es mayor que la Línea_1, se ejecuta una operación. Entonces todo se repite.
1) Si la Línea_2 es mayor que la Línea_1, se ejecuta una operación de compra,
2) La operación se cierra con el SL o el TP,
3) Si la Línea_2 es mayor que la Línea_1, no se ejecuta una operación hasta que las condiciones cambien. .

Y.
1) Si la Línea_1 es mayor que la Línea_2, se ejecuta una operación de compra..,
2) La operación se cierra con el SL o el TP,
3) Si la Línea_1 está por encima de la Línea_2, la operación no se ejecuta hasta que las condiciones cambien. .

etc.
 
Link_x:
Lo copio de nuevo.

Usted necesita escribir una parte del código de su robot de comercio, para que se realice una operación una vez, si se cumplen las condiciones de comercio.
Por ejemplo:
1) Si la Línea_1 es mayor que la Línea_2, se ejecuta una operación de compra,
2) La operación se cierra en SL o TP,
3) Si la Línea_1 es mayor que la Línea_2, no se ejecuta la operación hasta que se modifiquen las condiciones. .
...

etc.


(3) El párrafo no es claro. "...hasta que las condiciones cambien" - no se indica a qué condiciones se refiere.

¿Sólo es necesario abrir una orden de compra? Tampoco está claro si pueden existir varias órdenes en el mercado simultáneamente o sólo una.

 
fozi:

Hola camadistas.

¿Quién puede operar con el SP500 a través de MT4-5?


mmcis tiene una demo de _SP500 mt4

Pero dice Comercio: No.

Tal vez sea sólo en la demo, no lo sé.

 
Link_x:
Lo copio de nuevo.

Usted tiene que escribir una parte del código de un robot de comercio, por lo que sería hacer un acuerdo una vez, cuando las condiciones de comercio se cumplen.
Por ejemplo:
1) Si la Línea_1 es mayor que la Línea_2, se ejecuta una operación de compra,
2) La operación se cierra en SL o TP,
3) Si la Línea_1 es mayor que la Línea_2, no se ejecuta una operación hasta que las condiciones cambien. .

Si las condiciones cambian, es decir, si la Línea_2 es mayor que la Línea_1, se ejecuta una operación. Entonces todo se repite.
1) Si la Línea_2 es mayor que la Línea_1, se ejecuta una operación de compra,
2) La operación se cierra con el SL o el TP,
3) Si la Línea_2 es mayor que la Línea_1, no se ejecuta una operación hasta que las condiciones cambien. .

Y.
1) Si la Línea_1 es mayor que la Línea_2, se ejecuta una operación de compra..,
2) La operación se cierra con el SL o el TP,
3) Si la Línea_1 es mayor que la Línea_2, la operación no se ejecuta hasta que las condiciones cambien. .

etc.


Lo he pensado y creo que lo entiendo, pero aún quiero que me confirmen si lo he entendido bien.

Siempre hay un solo pedido en el mercado. La orden se abre siempre cuando la condición cambia y siempre sólo para comprar.

 
khorosh:

(3) El párrafo no es claro. "...hasta que las condiciones cambien" - no se indica a qué condiciones se refiere.

¿Sólo es necesario abrir una orden de compra? Tampoco está claro si pueden existir varias órdenes simultáneamente en el mercado o sólo una.

Tanto en la compra como en la venta.
Sólo un pedido.

....
 
Link_x:
Tanto en la compra como en la venta.
Sólo un pedido.

....
Su asignación no dice una palabra sobre la venta, sólo comprar en todas partes.
 
khorosh:
Su tarea no dice ni una palabra sobre vender, sólo sobre comprar.


Mi error. Lo arreglaré. :)


1) Si la Línea_1 es mayor que la Línea_2, entonces hacemos una operación de compra,
2) La operación se cierra con el SL o el TP,
3) Si la Línea_1 está por encima de la Línea_2, no se ejecuta una operación hasta que las condiciones cambien. .

Si las condiciones cambian, es decir, si la Línea_2 es mayor que la Línea_1, se ejecuta una operación. Entonces todo se repite.
1) Si la Línea_2 es mayor que la Línea_1, se ejecuta una operación de venta,
2) La operación se cierra en el SL o TP,
3) Si la Línea_2 está por encima de la Línea_1, no se ejecuta una operación hasta que las condiciones cambien. .

Y.
1) Si la Línea_1 es mayor que la Línea_2, se ejecuta una operación de compra..,
2) La operación se cierra con el SL o el TP,
3) Si la Línea_1 está por encima de la Línea_2, no se ejecuta una operación hasta que las condiciones cambien. .
 
Una explicación visual:
Archivos adjuntos:
 
Link_x:

Lo he estropeado. Lo arreglaré. :)


1) Si la Línea_1 es mayor que la Línea_2, se ejecuta una operación de compra,
2) La operación se cierra con el SL o el TP,
3) Si la Línea_1 está por encima de la Línea_2, no se ejecuta una operación hasta que las condiciones cambien. .

Si las condiciones cambian, es decir, si la Línea_2 es mayor que la Línea_1, se ejecuta una operación. Entonces todo se repite.
1) Si la Línea_2 es mayor que la Línea_1, se ejecuta una operación de venta,
2) La operación se cierra en el SL o TP,
3) Si la Línea_2 está por encima de la Línea_1, no se ejecuta una operación hasta que las condiciones cambien. .

Y.
1) Si la Línea_1 es mayor que la Línea_2, se ejecuta una operación de compra..,
2) La operación se cierra con el SL o el TP,
3) Si la Línea_1 está por encima de la Línea_2, no se ejecuta una operación hasta que las condiciones cambien. .

int start()
  {
//----
   
   if(Lin1>Lin2)
     {
      if(!ExistPositions("0", -1, -1, 0))
        {
         if(OrdersHistoryTotal()<1 || GetTypeLastClosePos("0", -1)==OP_SELL)
           {
            OpenPosition("0",OP_BUY,NormalizeDouble(Ask-SL*Point,Digits),
                       NormalizeDouble(Ask+TP*Point,Digits), -1);
           }
        }                         
     }
   if(Lin1<Lin2)
     {
      if(!ExistPositions("0", -1, -1, 0))
        {
         if(OrdersHistoryTotal()<1 || GetTypeLastClosePos("0", -1)==OP_BUY)
           {
            OpenPosition("0",OP_SELL,NormalizeDouble(Bid+SL*Point,Digits),
                          NormalizeDouble(Bid-TP*Point,Digits), -1);
           }
        }                         
     }  
//----
   return(0);
  }
Чтобы код работал нужно ещё записать коды всех использованных функций KimIV вне тела функции start() и
определить все значения констант и переменных ошибки по которым будут выданы при компиляции ввиду 
того что здесь они не определены..

	          
 

¡Feliz Año Nuevo a todos! Felicidad, buena suerte, amor y, por supuesto, grandes beneficios para todos. =))


Si eres un experto, por favor, comprueba que la función no tenga errores. El punto principal de esta función: debe calcular un lote necesario para que la siguiente orden abierta cubra sus pérdidas en una determinada cantidad de puntos en caso de cerrar la parrilla de órdenes.

double FindRightLot (int otype)
{
  double Lot=0; double TotalLot=0;
  for (int i = OrdersTotal()-1; i>0; i--)
  {
    if (OrderSelect(i, SELECT_BY_POS,MODE_TRADES))
    {
       if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType() == otype)
       {
         if (otype == OP_BUY)
         {
           Lot = NormalizeDouble ((OrderOpenPrice()-Bid)*OrderLots()/TP,2); // ТP это то к-во пунктов, за которое след. ордер должен закрыть убыток
           if (Lot>0) // т.е. нас интересуют только убыточные ордера
           {
             TotalLot=TotalLot+Lot;
           }
         }
           
       
         else if (otype == OP_SELL)
         {
           Lot = NormalizeDouble ((Ask-OrderOpenPrice())*OrderLots()/TP,2);
           if (Lot>0)// выбираем только убыточные
           {
             TotalLot=TotalLot+Lot;
           }
           
         }
       }
     }
   }
   return (TotalLot);
   
 }