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

 
hoz:

Voy a repetir la pregunta que hice ayer. No quiero publicarlo en un hilo aparte. Si algo no está claro, responderé a todas las preguntas.

Me sigue costando cerrar las posiciones requeridas. La situación es la siguiente:

1. Se está realizando un seguimiento del cierre de posiciones.

2. Tan pronto como la última posición se haya cerrado en la línea de toma... ...todas las posiciones abiertas y pendientes deben cerrarse de una vez. Todo se cierra ordenado por lotes, es decir, lotes grandes a la vez, y luego más pequeños. Esto está pensado sólo para ganar experiencia con las órdenes.

La aplicación es la siguiente:

En start() en cada tick:

Nos interesa cerrar las órdenes de mercado, ya que la pendiente se borra como es debido. Esto es lo que tenemos:

Por alguna razón algunos de los pedidos no se están cerrando. Imprimo algunos segmentos cuando los veo, no entiendo nada. He aquí un ejemplo:

El comentario muestra que lastOOTHist = 01:30:00, aunque en realidad no es correcto. Si comprobamos lastOOTHist en la ventana de resultados, veremos que

sus horarios de cierre son diferentes...

¿Qué ocurre aquí?

Lo tienes todo mezclado...

aquí:

for(i=0; i<p; i++)
      {
         if (OrderSelect(a[i][1], SELECT_BY_TICKET, MODE_TRADES)) // выделенное красным лишнее, тут pool не имеет значения
         {
             if (OrderCloseTime() == 0) ClosePosBySelect();
         }
      }

Desimprime los valores de todas las celdas de la matriz antes del bucle - ¿tal vez haya un perro ahí?

 
Forexman77:
¿Pueden decirme cómo averiguar el tamaño del spread cuando se abre una operación, o mejor aún, cómo hacer que se muestre en el registro?

Inmediatamente después de abrir una operación:

ticket=OrderSend(......);
if(ticket>=0)Print("ticket #",ticket," Spread=",doubleToStr(Ask-Bid,Digits)); 
Su difusión está en el registro.
 
Sepulca:

Inmediatamente después de la apertura del trato:

Su difusión está en el registro.



¡Muchas gracias! Hice un EA, en el tester hace dinero, en la demo es peor. Probablemente lo hará aún peor en el real. No he visto cuántas veces he mirado las imágenes.

Cuando observaba el spread visualmente no veía más de tres pips. Mi idea es que durante los movimientos más fuertes no se muestra en absoluto o se ensancha por lo que no tengo suficiente tiempo para notarlo.

Alpari tiene un diferencial bajo, pero supongo que aumenta significativamente durante los movimientos fuertes. En DucasCopi el spread es aún más bajo pero las comisiones son grandes, se reducen si la cuenta es de varios millones de dólares.

¿Has investigado el tamaño del spread, con movimientos superiores a 50 pips por minuto? ¿A qué valor aumenta el diferencial medio con estos movimientos?

Le pregunté a Alpari y no me lo dijeron.

 
FAQ:


Cuando pasas una variable (array) a una función por valor, se crea una variable local dentro de la función y la declaras en la cabecera: miFunción(int mi_var). De este modo, los cambios de esta variable no pueden verse fuera de la función. Y en el caso de un array, el compilador te lo recordará.

Si quieres que los cambios en el valor de la variable sean visibles fuera (fuera de la función), pasa las variables por referencia : myFunct(int & my_var)


Pero sí. Al fin y al cabo, un array se declara globalmente. Pero el cambio dentro de la función es local. Por eso hay funciones, como microestructuras. Para aplicar localmente los microproblemas.
 

¡Buen provecho para todos! Por favor, dígame cómo hacer que OrderOpenPrice() devuelva el precio con cinco decimales. Si el terminal devuelve 4 dígitos, si es 5, sigue devolviendo 4, redondeando el quinto.

 
ivan180976:

¡Buen provecho para todos! Por favor, dígame cómo hacer que OrderOpenPrice() devuelva el precio con cinco decimales. Si el terminal devuelve 4 dígitos, si es 5, sigue devolviendo 4, redondeando el quinto.


DoubleToStr(número, precisión)
 

Forexman77:
Forexman77:



¡Muchas gracias! Hice un EA, gana dinero en el probador, es peor en la demo. Probablemente lo hará aún peor en el real. He visto las imágenes durante tres veces.

Cuando observaba el spread visualmente no veía más de tres pips. Mi idea es que durante los movimientos más fuertes no se muestra en absoluto o se ensancha por lo que no tengo suficiente tiempo para notarlo.

Alpari tiene un diferencial bajo, pero supongo que aumenta significativamente durante los movimientos fuertes. En DukasCopi el spread es aún más bajo pero las comisiones son grandes, se reducen si la cuenta es de varios millones de dólares.

¿Has investigado el tamaño del spread, con movimientos superiores a 50 pips por minuto? ¿A qué valor aumenta el diferencial medio con estos movimientos?

He preguntado a Alpari y no me han dicho nada.


Estuve analizando el spread justo el viernes, justo en Alpari por cierto:

Los amarillos finos representan la máxima dispersión por barra (he utilizado un minuto). Rojo intenso - mínimo margen por barra. Como puede ver, durante el día el spread oscila entre 5 y 14 pips en cinco dígitos. Pero después de las 21:00 horas, el diferencial horario del servidor no baja de 10 puntos, y al final del día suele subir hasta 52 puntos. He captado un momento interesante antes del cambio brusco de precios, el diferencial sube bruscamente:

 
artmedia70:

Es un poco de un montón ...

ahí mismo:

for(i=0; i<p; i++)
      {
         if (OrderSelect(a[i][1], SELECT_BY_TICKET, MODE_TRADES)) // выделенное красным лишнее, тут pool не имеет значения
         {
             if (OrderCloseTime() == 0) ClosePosBySelect();
         }
      }

Eso es sólo para facilitar la percepción. Cuando estaba escribiendo, pero por lo demás, sí, no tienes que hacerlo. Pero tampoco me molestará.

No imprimirá ningún valor de la matriz:

artmedia70:

Desimprimir el valor de todas las celdas de un array antes del bucle - ¿tal vez el perrito está cavando allí?



//+-------------------------------------------------------------------------------------+
//| Закрытие ордеров, отсортированных по размеру лотов                                  |
//+-------------------------------------------------------------------------------------+
void ClosePosBySortLots()
{
   double a[][2];
   int p = 0;
   
   for (int i=OrdersTotal()-1; i>=0; i--)
   {
      if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
      if (OrderMagicNumber() != i_magic) continue;
      if (OrderSymbol() != Symbol()) continue;
      if (OrderType() < 2)
      {
         p++;
         ArrayResize(a, p);
         a[p-1][0] = OrderLots();
         a[p-1][1] = OrderTicket();
      }
   }
//   pr ("ClosePosBySortLots(): " + "p = " + p);
   if (p > 0)
   {
      ArraySort(a, WHOLE_ARRAY, 0, MODE_DESCEND);
      
      for(i=0; i<=p; i++)
      {
          pr("a[i][1] = " + a[i][1]);
          i++;
      }
      
      for(i=0; i<p; i++)
      {
         if (OrderSelect(a[i][1], SELECT_BY_TICKET, MODE_TRADES))
         {
             if (OrderCloseTime() == 0) ClosePosBySelect();
         }
      }
   }
}

La salida está vacía en absoluto...

 
hoz:

No da salida a ningún valor de la matriz en absoluto:


No produce nada en absoluto...

¿Cómo de vacío? ¿No imprime nada en absoluto, o sigue habiendo ceros en las celdas de la matriz?
 

¿Por qué aumenta i en el cuerpo del bucle?

 for(i=0; i<=p; i++)
      {
          pr("a[i][1] = " + a[i][1]);
          i++;    // ??????????????????????????????????????
      }

y esto: i<=p, ¿por qué "o igual a"?