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

 

Resuelto de esta manera:

int nday;

 if(OrdersTotal()==0)

 {

  double lot=(AccountBalance()/ MinLot)*0.01;

  if(center>Ask && pokupaem>0 && prodaem<1 && prodaem1<1 && SelBuyDaily==Vhodim1 && proverka==1)

  {

   x=OrderSend(Symbol(),OP_BUY,lot,Ask,3,0,0,Komment,Magic,0,Blue);

   nday=DayOfYear();

  }

  if(OrderSelect(x,SELECT_BY_TICKET)==true)

 {

  if((OrdersTotal()>0 && OrderCloseTime()==0 && OrderType()==OP_BUY) && (nday<DayOfYear() || OrderOpenTime()<iTime(NULL,0,0)))

  {

   if(pokupaem>0 && prodaem<1 && Ask+atr<OrderOpenPrice() && proverka==1)

   {

    x=OrderSend(Symbol(),OP_BUY,OrderLots()*Ml,Ask,3,0,0,Komment,Magic,0,Blue);

    nday=DayOfYear();

   }

  }

 }

 

Por primera vez he intentado escribir una apertura de posición en el bucle, ya que no descarto abrir también en otros pares.

¡Pero por alguna razón nada se abre en el bucle! ¿Realmente necesito un lazo especial para abrirlos? Cierto, ¡sólo lo he comprobado en el probador!

Escribí una normal:

    optal = OrdersTotal();
    for(op = optal-1; op >= 0; op--) 
    { 
      if(OrderSelect(op,SELECT_BY_POS,MODE_TRADES))
      { 
        if(OrderSymbol() != Symbol()) continue;
        if(OrderMagicNumber() != magic) continue; 
// и т.д.

¿Qué es lo que falla en la apertura de órdenes y posiciones? Gracias por su ayuda.

 
borilunad:

Por primera vez he intentado escribir una apertura de posición en el bucle, ya que no descarto abrir también en otros pares.

¡Pero por alguna razón nada se abre en el bucle! ¿Realmente necesito un lazo especial para abrirlos? Cierto, ¡sólo lo he comprobado en el probador!

Escribí una normal:

¿Qué es lo que falla en la apertura de órdenes y posiciones? Gracias por la ayuda.



Allí hasta que no haya pedidos no se iniciará el ciclo. ¿Qué sentido tiene el ciclo en general?
 
borilunad:

Por primera vez he intentado escribir una apertura de posición en el bucle, ya que no descarto abrir también en otros pares.

¡Pero por alguna razón nada se abre en el bucle! ¿Realmente necesito un lazo especial para abrirlos?

Escribí una normal:

¿Qué es lo que falla en la apertura de órdenes y posiciones? Gracias por la ayuda.

El bucle se ejecuta más rápido que el hilo comercial se libera. Por eso debemos añadir un bucle de retardo mientras(!IsTradeContextBusy()) Dormir(100);
 
valeryk:


El bucle no se iniciará hasta que no haya pedidos. ¿Cuál es la finalidad del bucle en general?


Gracias. ¡Eso es lo que pensé! Así, si, por ejemplo, quiero abrir en el primer par, es suficiente sin un bucle, pero con if(OrdersTotal == 0). Y cuando quiera abrir otro pedido del mismo u otro par, necesito un bucle, ¡y funcionará! ¡Lo probaré ahora!

¡Supongo que tendré que cambiar muchas cosas en la apertura, pero en principio entiendo cómo debo hacerlo! Gracias.

 

Una lógica perniciosa, en realidad. No me fijé bien al principio.... ¿Por qué necesitamos OrdersTotal( ) al abrir las órdenes?

Pues bien, si necesitamos abrir varias órdenes en el bucle, éste debe organizarse en función del número de órdenes necesarias. Y si necesitamos apoyar constantemente este número, tenemos que utilizar otras reglas.

Por ejemplo, necesitamos abrir 7 órdenes.

for(int i = 0; i < 7; i++)
{
while(!IsTradeContextBusy()) Sleep(100); // Ожидание освобождения торгового потока

int ticket = OrderSend(Symbol(), ..............); // Открытие ордера
if(ticket > 0) Print("Открылся ордер № ", i, " ticket - ", ticket); // Проверка пропусков при открытии.
}
Pero esta es una variante corta. Una buena idea sería añadir la gestión de errores al abrir los pedidos
 
AlexeyVik:

Una lógica perniciosa, en realidad. No me fijé bien en la primera .... ¿Por qué necesitamos OrdersTotal() al abrir las órdenes?

Pues bien, si necesitamos abrir varias órdenes en el bucle, éste debe organizarse en función del número de órdenes necesarias. Y si necesitamos apoyar constantemente este número, tenemos que utilizar otras reglas.

Por ejemplo, necesitamos abrir 7 órdenes

Pero esta es una variante corta. ¡Una buena idea sería añadir la gestión de errores al abrir los pedidos
!

Gracias. Pero necesito un bucle para que los búhos no vean a otras parejas. Ya me ocuparé de los errores más adelante. Incluso me alegré cuando apareció el error 130 en el registro, ¡significa que funciona! ¡Los errores se manejan en mis funciones externas! Gracias de nuevo.
 
borilunad:

Gracias. Pero necesito un bucle para que los búhos no vean a otras parejas. Ya me ocuparé de los errores más adelante. Incluso me alegré cuando apareció el error 130 en el registro, ¡así que está funcionando! ¡Los errores se manejan en mis funciones externas! Gracias de nuevo.
Eso es lo pernicioso de la lógica. El búho no puede no ver a otras parejas. Se puede y se debe obligar a no procesar los PEDIDOS de otros símbolos que ya están ABIERTOS. En la función OrderSend(............), debe escribir un determinado Symbol() o en un formato de texto, por ejemplo "EURUSD"... lo que ponga ahí se abrirá. O puede intentar abrirlo...
 
AlexeyVik:

Una lógica perniciosa, en realidad. No me fijé bien en la primera .... ¿Por qué necesitamos OrdersTotal() al abrir las órdenes?

Pues bien, si necesitamos abrir varias órdenes en el bucle, éste debe organizarse en función del número de órdenes necesarias. Y si necesitamos apoyar constantemente este número, tenemos que utilizar otras reglas.

Por ejemplo, necesitamos abrir 7 órdenes

Pero esta es una variante corta. Una buena idea sería añadir la gestión de errores al abrir los pedidos

Esta es una buena manera de comprobar si podemos abrir hasta ocho órdenes en un solo tick. Nos las prometieron, pero nadie las ha comprobado todavía
 
Vinin:

Una buena manera de probar la capacidad de abrir hasta ocho órdenes en un solo tick. Nos las prometieron, pero nadie las ha comprobado todavía

No lo entiendo...