[¡Archivo!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. No puedo ir a ningún sitio sin ti - 4. - página 492

 
hoz:

Por cierto, sí... Ya he añadido el código completo de esta función arriba:

Pensé que sería más lógico no escribirlo así:

y luego establecer el bucle de esta manera:

¿Verdad? Es que el contador del número de posiciones a partir de cero no se percibe como tal... No es lógico y, por tanto, no hay razón para confundirse...

Hay que ir a cero, no a uno, para buscar pedidos.

for(i=total; i>=0; i--)

Un profesional me explicó una vez que estamos buscando un conjunto de órdenes, y es mejor empezar la búsqueda con un número más alto. En el array, el primer elemento tiene índice 0 (cero), por lo que no deberíamos llegar a 1 y esta es también la razón por la que deberíamos ir a OrdersTotal() - 1, en lugar de a OrdersTotal() simple.

Tengo la búsqueda de pedidos hecha de esta manera:

for (int i=OrdersTotal()-1; i>=0; i--)
 
paladin80:

Hay que llegar hasta el cero, no el uno, para buscar órdenes.

Un profesional me explicó una vez que es una serie de órdenes y entonces sí, es mejor empezar con un dígito mayor. En el array, el primer elemento tiene un índice de 0 (cero), por lo que no a 1 y también por esta razón necesitamos OrdersTotal() - 1, no sólo OrdersTotal().

Es muy interesante. Y lo primero que hice fue abrir el libro de texto y tratar de encontrar la respuesta allí. Y entonceshttps://book.mql4.com/ru/trading/ordermodify vio cómo el tutorial hizo el desborde:

 for(int i=1; i<=OrdersTotal(); i++)          // Цикл перебора ордер

Este es el factor que me ha engañado...

 
hoz:

Muy interesante. Y lo primero que hice fue abrir el libro de texto y tratar de encontrar la respuesta allí. Y entonceshttps://book.mql4.com/ru/trading/ordermodify vi como el libro de texto estaba exagerado:

Ese es el factor que me ha confundido...


¿No te has fijado en la siguiente línea?

   for(int i=1; i<=OrdersTotal(); i++)          // Цикл перебора ордер     
   {      
     if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
//
//Тут компенсируется отсутствие нуля с i-1
 
borilunad:


¿No te has fijado en la siguiente línea?

No. Pero de alguna manera es torcido escribirlo. No quiero criticar el libro de texto, pero... es mucho más adecuado contar desde 0 en lugar de -1. Si no, ya podrías haber empezado desde -30...

Como señalópaladin80 más arriba, desde 0 el valor de los arrays sería más adecuado que desde -N.

 
hoz:

No. Pero de alguna manera es torcido escribirlo. No quiero criticar el libro de texto, pero... es mucho más adecuado contar desde 0 en lugar de -1. Si no, ya podrías haber empezado desde -30...

Como señalópaladin80 más arriba, desde 0 el valor de las matrices sería más adecuado, que desde -N.


Ahora piensa con lógica.

Estas variantes son idénticas, ya que si i = 0, hay que buscar desde 1 hasta OrderTotal(), es decir, desde 0+1 hasta OrderTotal() - 1+1 (+1, porque i++ está al final de la sentencia for) Lo mismo en el tutorial, sólo que escrito desde 1 hasta OrderTotal() y, para no contar desde 2 hasta OrderTotal()+1, enla función OrderSelect el autor del libro de texto añadió -1 a i. ¿Entendido?

Por cierto, que por muchos programadores que haya, hay casi tantas variantes. Cada uno tiene su propia visión, su propia letra.

 
hoz:

No. Pero de alguna manera es torcido escribirlo. No quiero criticar el libro de texto, pero... es mucho más adecuado contar desde 0 en lugar de -1. Si no, ya podrías haber empezado desde -30...

Como señalópaladin80 más arriba, 0 sería más adecuado para las matrices que -N.

Si está interesado en la búsqueda de pedidos, puedo sugerir el siguiente esquema:

if (OrdersTotal()>0)
{  for (int i=OrdersTotal()-1; i>=0; i--)
   {  if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) // ордер выбирается среди открытых
                                                    // и отложенных ордеров
      {  if (OrderSymbol()!=Symbol()) continue;     // если не наш символ, то уходим
         if (OrderMagicNumber()!=555) continue;     // если не наш магик номер, то уходим
                                                    // можно поставить любые другие фильтры
         // ... ваши вычисления
      }
   }
}
 
hoz:

No. Pero de alguna manera es torcido escribirlo. No quiero criticar el libro de texto, pero... es mucho más adecuado contar desde 0 en lugar de -1. Si no, ya podrías haber empezado desde -30...

Como señalópaladin80 más arriba, 0 sería la forma más adecuada de leer arrays, a diferencia de -N.

Tengo el mismo punto de vista, el tutorial fue escrito por una persona concreta, esta es su visión de las cosas (organización del bucle de orden), y SIEMPRE hay muchas decisiones correctas. Hay puntos de vista correctos, y hay correctos y elegantes al mismo tiempo... :)
 
borilunad:


Y ahora piensa, ¡incluyendo la lógica!

Estas variantes son idénticas, porque si i = 0, se trata de ir de 1 a OrderTotal(), es decir, de 0+1 a OrderTotal() - 1+1 (+1, porque i++ está al final de la sentencia for) Y lo mismo en el tutorial, sólo se escribe de 1 a OrderTotal() y, para no contar de 2 a OrderTotal()+1, el autor del libro de texto añadió -1 a i en la función OrderSelect ¿Entendido?

Por supuesto, lo entiendo. Pero no he visto antes que se analicen las órdenes de tal manera:

if (OrderSelect(i-1,SELECT_BY_POS)==true)

normalmente sólo sin ==true... Incluso me gustó este punto. Aunque es interesante, nunca había encontrado este método en otros EAs. Entiendo la lógica, pero aún así.

[Deleted]  
Por favor, díganme cómo puedo utilizar un valor de muving de hace unas cuantas barras, es decir, del historial, para calcularlo. Si es sólo una media móvil
AlligatorJawsBuffer[i]=iMA(NULL,0,13,8,MODE_SMMA,PRICE_MEDIAN,i);
¿Y si es hace -5 bares?
 
hoz:

Por supuesto que lo entiendo. Excepto que nunca he visto la presencia de una orden analizada de esta manera antes:

normalmente sólo sin ==true... Me gustó ese punto. Aunque es interesante, no he visto este método en otros EAs. Entiendo la lógica, pero aún así.


Prueba y experimenta con diferentes variantes, ¡será más fácil entenderlo todo! Buena suerte.