[ARCHIVO] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 3. - página 240

 
a1 = OrdersTotal();
for (i = 0; i < a1; i++)
{
OrderSelect(i,SELECT_BY_POS);
OrderDelete(OrderTicket());

}

Aquí hay un simple script como este debería borrar todas las órdenes pendientes, pero borra exactamente la mitad de las órdenes ... ???

 
        
FAQ 04.03.2011 12:56 

Подскажите, как найти цену последнего фрактала?


sergeev: Для этого можно воспользоваться индикатором iFractals. Он возвращает значение 0, если на баре нет фрактала и значение цены фрактала если он есть. Фракталы делятся на верхние и нижние. Если вам надо получить верхние, то в функцию iFractals передается MODE_UPPER, а для нижних - MODE_LOWER. Поэтому для поиска фрактала надо пройти в цикле по барам и первое не 0 значение и будет искомым фракталом.

пример:

double frac;
for (int i=3; i<Bars; i++)
{
   frac=iFractals(Symbol(), Period(), MODE_UPPER, i); if (frac>0) break;
   frac=iFractals(Symbol(), Period(), MODE_LOWER, i); if (frac>0) break;
}
if (frac>0) Print("Цена последнего фрактала: ", frac);


пример организации отдельной функции:

//---------------------------------------------------------------   GetLastFrac
double GetLastFrac(string smb, int tf, int iB)
{
   int n=iBars(smb, tf);  double frac;
   for (int i=iB; i<n; i++)
   {
      frac=iFractals(smb, tf, MODE_UPPER, i); if (frac>0) return(frac);
      frac=iFractals(smb, tf, MODE_LOWER, i); if (frac>0) return(frac);
   }
   return(0);
}
.....
Print("Последний фрактал: ", GetLastFrac("EURUSD", 60, 3));
Estaba en las FAQ, las primeras veces las hojeé y no me di cuenta.
 
Neo333:
a1 = Total de pedidos();
for (i = 0; i < a1; i++)
{
OrderSelect(i,SELECT_BY_POS);
OrderDelete(OrderTicket();

}

Este sencillo script debería borrar todas las órdenes pendientes pero borra exactamente la mitad de ellas... ???

Digamos que hay 10 pedidos.

Aquí has borrado la mitad (de cero a cinco)

ahora quiere seleccionar el sexto... y sólo quedan 5. Hay un error y no hay nada que borrar. Lo mismo ocurre con los demás.

 
Neo333:
a1 = PedidosTotal();
for (i = 0; i < a1; i++)
{
OrderSelect(i,SELECT_BY_POS);
OrderDelete(OrderTicket();

}

Este sencillo script debería borrar todas las órdenes pendientes, pero borra exactamente la mitad de las órdenes ... ???

Cambiar la dirección de la búsqueda de órdenes:

for (i=a1-1; i>=0; i--) {....}

 
artmedia70:

Cambiar la dirección de la enumeración de la orden:

for (i=a1-1; i>=0; i--) {....}

Obras ... pero la lógica, ¿qué diferencia hay entre i++ o i--?
 
Zhunko:

1. ¿Lo has comprobado?

Informe: Ayudó, pero parece que tiene fallos.

Primera terminal. Se han eliminado todos los gráficos y símbolos, se han añadido 7 símbolos de dólar y se han añadido gráficos. Todo con recargas.

Se ha ampliado el teletipo a 3/4 de la pantalla. Llenó los 6 primeros, el 7º llegó a 5 casillas.

Después del siguiente reinicio no se llenan todas por completo, la distribución es casi aleatoria - cuanto más bajo es el símbolo en la lista, menos celdas recibe.

La segunda terminal. Tenía 7 pares de yenes en él. Eliminados los caracteres extra, reiniciado - se llenan mucho más profundo, pero la profundidad de llenado resultó ser distribuido al azar.

Me inclino por el hecho de que se trata de un error debido al pequeño caché: no es suficiente para todos, mientras que la distribución es aleatoria o "por orden de llegada".

En cualquier caso, para una moneda el método funciona. Resumen: receta al hecho :) Gracias.

 
Neo333:
Funciona... Pero, ¿cuál es la lógica? ¿Qué diferencia hay entre i++ o i--?

Ya se le ha dicho cuál es el motivo. No se trata de i++ o i--, se trata de desde qué extremo de la lista empiezas a borrar órdenes: el principio de la lista (como has hecho) o el final de la lista (como tienes que hacer en este caso).

Para entender lo que ocurre cuando se borran los pedidos, es necesario conocer y comprender cómo se almacenan los pedidos en la matriz.

Cuando se elimina primero el primer pedido (está indexado por i=0), los índices de todos los pedidos se desplazan en la matriz: el primer pedido se convierte en nulo, el segundo en primero, el tercero en segundo, y así sucesivamente. Por ello, no se eliminan completamente todas las órdenes, de hecho, cuando i se convierte en 6, la sexta orden se desplaza a la quinta posición en la matriz de órdenes y la orden simplemente no se selecciona por el índice 6.

Cuando se eliminan pedidos del final de la lista, el desplazamiento no se produce: el primer pedido tiene una posición cero en la lista, y la seguirá teniendo. La décima orden tenía la posición 9, se eliminó, luego la novena orden, que tiene una posición 8 en la lista se elimina, y así sucesivamente, hasta la primera orden con una posición cero en la matriz de órdenes.

 
Neo333:
Obras .... pero cual es la lógica - ¿que diferencia hay entre i++ o i--?
ya ha sido contestado por un usuario
152
ilunga a esta pregunta
 
nadya:
ya ha sido contestado por un usuario
152
ilunga a esta pregunta
Algo me decía que debería haberlo masticado y haber dado una respuesta más detallada... :)
 
Zhunko:
... abrir el horario de forma autónoma.
El resto de los gráficos son "tic-tac". No es una opción.
Razón de la queja: