Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 1143

 
Alexey Viktorov:

Uno de ellos soy yo. Y nunca he estudiado C# o C++ y nunca he sabido lo que es la POO.

Por favor, comprenda la simple verdad, que mql5 difiere de mql5 sólo en la función OrderSend() y tal vez algunas funciones más que no recuerdo. Otra diferencia importante es el sentido de la indexación de los topes indicadores. Sin embargo, puede solucionarse muy rápidamente, pero será mejor que te acostumbres a las nuevas funciones. Y la obtención de los valores de los indicadores sigue siendo la misma. No he leído el libro de Kovalev, no sé lo que hay, pero dudo que cualquier solución de este libro no se pueda escribir usando el MetaEditor mql4 actualizado.

Genial. )))) Sin embargo, no lo logré con Fortran procedimental y Basic en la carga. Es un buen tutorial, bien estructurado, suficientemente claro y que realmente puede tomarse como base, si los creadores necesitan estudiantes, por supuesto. Por desgracia, no hay otros. No tengo suficiente con la PLO, así que tengo que leer artículos. He probado muchos de los tutoriales en el terminal MT4 actualizado. Hay muchas observaciones sobre los tipos de datos que no se dan. El compilador no vio ningún error ni siquiera en la comprobación estricta.

 
Valeriy Yastremskiy:

Genial. )))) No lo conseguí, sin embargo, con Fortran procedimental y Basic en la carga. Buen tutorial, bien estructurado, lo suficientemente claro y que realmente podría ser tomado como base, si los creadores necesitan estudiantes, por supuesto. Por desgracia, no hay otros. No tengo suficiente con la PLO, así que tengo que leer artículos. He probado muchos de los tutoriales del terminal MT4 actualizado. Hay muchas observaciones sobre los tipos de datos que no se dan. El compilador no vio ningún error ni siquiera en la comprobación estricta.

Aquí están mis pensamientos sobre la OOP. Y no estaría de más leer todo el hilo desde el principio.

ООП для школьников.
ООП для школьников.
  • 2019.10.04
  • www.mql5.com
======================================================================================================================== В этой теме будет нескольк...
 

Saludos. Por favor, avise, después de seleccionar un pedido no está claro por qué razón el billete cambia. Código:

      for(int i=OrdersTotal()-1; i>=0; i--){
         if(OrderSelect(i ,SELECT_BY_POS, MODE_TRADES)){
            if(OrderSymbol()==Symbol() && OrderMagicNumber()==magic && OrderType()==OP_BUYSTOP){
               Print("111  OrderTicket() ", OrderTicket(), "  OrderType() ", StringType(OrderType()));
               temp=OrderTicket();
               if( OrderOpenPrice()>start_bid
               +((MathCeil( (Bid-start_bid)/(bs_distance*Point) )+bs_orders+Orders("bs")+1)*bs_distance*Point) ){
                  Print("222 OrderDelete bs Bid ", Bid, "  OrderOpenPrice() ", OrderOpenPrice()); 
                  if(!OrderDelete(OrderTicket(), clrBlack)){
                     Print("333 OrderDelete bs Bid ", Bid, "  OrderTicket() ", OrderTicket(), "  OrderType() ", StringType(OrderType()));
                  }
               }
            }
         } 
      }

Hay dos órdenes en el mercado,BUYSTOP ticket 10 yBUY ticket 9 .

Registro:


 
Alexey Viktorov:

Aquí están mis pensamientos sobre la OOP. Y no estaría de más leer todo el hilo desde el principio.

Gracias, estoy de acuerdo))))

 
Andrey Sokolov:

Saludos. Por favor, avise, después de seleccionar un pedido no está claro por qué razón el billete cambia. Código:

Hay dos órdenes en el mercado,BUYSTOP ticket 10 yBUY ticket 9 .

Registro:


Supongo que una de las funciones escritas por uno mismo está recorriendo los pedidos (por ejemplo,Orders("bs")) y, por tanto, volviendo a ejecutar OrderSelect(). en el momento en que vuelve al bucle presentado, se dan todos los datos del último pedido seleccionado allí.

 
Igor Zakharov:

Supongo que una de las funciones escritas por uno mismo recorre los pedidos (por ejemplo,Orders("bs")), y en consecuencia re OrderSelect(). en el momento de volver al bucle presentado, se dan todos los datos del último pedido seleccionado allí.

gracias

 
Andrey Sokolov:

Saludos. Por favor, avise, después de seleccionar un pedido no está claro por qué razón el billete cambia. Código:

Hay dos órdenes en el mercado,BUYSTOP ticket 10 yBUY ticket 9 .

Registro:


Su código de trabajo no coincide con el código publicado.

Print("222 OrderDelete bs Bid ", Bid, "  OrderOpenPrice() ", OrderOpenPrice());

Donde en este código se imprime "OrderTicket()"

Preste atención a las llamadas a otras funciones del usuario que pueden incluir la selección de pedidos.

 
Alexey Viktorov:

Ha llegado al lugar adecuado. Aquí hay un consejo sobre cómo hacer mql4 correctamente, guiado por la nueva documentación de mql4.

Si te resulta difícil escribir algo, haz una pregunta concreta, qué has escrito y qué no has conseguido. Sólo hay que tener en cuenta que nadie leerá un código kilométrico con una línea incomprensible. Ciertamente no lo haré.

Usted es la persona a la que iba dirigida mi pregunta. Porque en base a su petición he hecho mi código Mql4 para el probador corto, sólo para mostrar mi problema claramente. Pero desgraciadamente Artem no lo entendió.

Te agradecería mucho que cambiaras el código para solucionar mi problema. Una vez más te diré su esencia.

Cuando cierro cada orden (y hay muchas órdenes abiertas al mismo tiempo), necesito emitir algunos parámetros de una orden cerrada en Print (). He aprendido a hacerlo con mucho éxito. Pero ..... hay un problema que mi mente no alcanza a resolver. Algunas órdenes se cierran por stop en el mismo tick y al mismo precio. En este caso, el programa ignora la primera orden cerrada e imprime Print() sólo la última orden cerrada. Y no se imprime después de la primera.

Q: .

¿Qué construcción del lenguaje se puede utilizar para que el programa imprima () en los casos que he descrito anteriormente incluso después de la primera orden cerrada por el stop?

int H;
int L;
int TP;  
int start()
{
int Ht = OrdersHistoryTotal();
if (OrderSelect (Ht-1,SELECT_BY_POS, MODE_HISTORY))                                             
if (TP!=OrderTicket( ))
{
Print("---------------------------------------------------------------=",TimeToString(OrderOpenTime()) );
TP=OrderTicket( );
}

if (TimeCurrent()==1262598040)
if (H==0)
{
OrderSend(Symbol(),OP_SELL,0.1,Bid, 3,1.6217,1.60919,"300",10 );
H=1;
}
if (TimeCurrent()==1262601140)
if (L==0)
{
OrderSend(Symbol(),OP_SELL,0.1,Bid, 3,1.62199,1.61758,"300",10 );
L=1;
}
return(0);


 
ANDREY:

Usted es exactamente la persona a la que iba dirigida mi pregunta. Porque en base a su petición he hecho mi código Mql4 para el probador corto, sólo para demostrar claramente mi problema. Pero desgraciadamente Artem no lo entendió.

Les agradeceré mucho si pueden cambiar el código para solucionar mi problema. Una vez más te diré su esencia.

Cuando cierro cada orden (y hay muchas abiertas al mismo tiempo), necesito imprimir () algunos parámetros de una orden cerrada. He aprendido a hacerlo con mucho éxito. Pero ..... hay un problema que mi mente no alcanza a resolver. Algunas órdenes se cierran por stop en el mismo tick y al mismo precio. En este caso, el programa ignora la primera orden cerrada e imprime Print() sólo la última orden cerrada. Y no se imprime después de la primera.

Q: .

¿Qué construcción lingüística se puede utilizar para que la aplicación imprima () incluso después de que la primera orden se haya cerrado en la parada, en los casos que he descrito anteriormente?


¿Qué hace su código además de abrir dos posiciones de venta, cada una a una hora estrictamente especificada, e imprimir la hora de apertura de la última posición cuando se permite? Eso es todo. El uso de variables no inicializadas, que puede conducir a "milagros" en el comportamiento del código, y muy, muy viejo start() manejador, que fue sacado de la estantería polvorienta con años de telarañas, y en el mercado (algún día quieres vender algo) con los antiguos manejadores nunca se perderá validador - dirá que el tipo de programa equivocado.

 
ANDREY:

Usted es exactamente la persona a la que iba dirigida mi pregunta. Porque en base a su petición he hecho mi código Mql4 para el probador corto, sólo para demostrar claramente mi problema. Pero lamentablemente Artem no lo entendió.

Les agradeceré mucho si pueden cambiar el código para solucionar mi problema. Una vez más te diré su esencia.

Cuando cierro cada orden (y hay muchas abiertas al mismo tiempo), necesito imprimir () algunos parámetros de una orden cerrada. He aprendido a hacerlo con mucho éxito. Pero ..... hay un problema que mi mente no alcanza a resolver. Algunas órdenes se cierran por stop en el mismo tick y al mismo precio. En este caso, el programa ignora la primera orden cerrada e imprime Print() sólo la última orden cerrada. Y no se imprime después de la primera.

Q: .

¿Qué estructura del lenguaje se puede utilizar para que el programa imprima () incluso después de que la primera orden se haya cerrado en la parada en los casos que he descrito anteriormente?

No recuerdo la respuesta de Artem. Todos los códigos de sus artículos son multiterminales o tienen dos versiones, una para mql5 y otra para mql4. He comprobado estas versiones en mql4. Todo funciona correctamente y detecta el cierre por parada o toma y no da errores.

Sí, estos artículos son difíciles de entender, pero vale la pena si no eres mayor que yo. Y yo, para ser programador, soy obscenamente viejo.

La otra opción es más sencilla, pero funcionará mucho más lentamente. Escriba los tickets de pedido en un array, y utilizando este array seleccione el pedido, compruebe la hora de cierre del mismo. Si es mayor que cero, significa que está cerrado. Si el comentario de una orden cerrada contiene las letras "sl", significa que la orden se cierra con un stop. Si la orden se cierra, se elimina de la matriz. O bien, una vez completada la matriz, se rellena con las órdenes abiertas restantes. La imaginación vuela en general.

La opción que elija depende de usted. Y lee algunos de mis posts sobre el libro de texto de Kovalev. El tutorial sugiere escribir int start(), mientras que en el mql4 actualizado, se debe escribir void OnTick() para los Asesores Expertos.

Para los indicadores y los scripts, consulte la documentación. Y por cierto, es mucho más fácil escribir indicadores en mql4 actualizado que cuando Sergey escribió este tutorial.

Razón de la queja: