[¡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í.

 
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.