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

 
ilnur17021992:
SELL_Lvl es el número de rodillas (órdenes) de la parrilla de venta ySELL_NoLossLevel es el nivel total (precio) de la UC de estas órdenes. Bien, la idea es la siguiente: necesitamos una línea dibujada a nivel de una Línea de Compra y redibujada respectivamente cuando se abren nuevas Líneas. No sé cómo hacerlo.

¿No entiende cómo determinar la línea BU de todos los pedidos?

 

¿Pueden decirme cómo anotarlo para ahorrar recursos y obtener precios actualizados?

  for(int i=OrdersTotal(); i>=0; i--) {
   if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES)) {
    if(OrderSymbol()==symb) {
      if(OrderType()==OP_BUY) {
       tk=OrderTicket();
       SymbolInfoTick(OrderSymbol(),Last_Tick); <<<
       ask=Last_Tick.ask;
       bid=Last_Tick.bid;
       ...

¿o así?

 SymbolInfoTick(symb,Last_Tick); <<<
  for(int i=OrdersTotal(); i>=0; i--) {
   if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES)) {
    if(OrderSymbol()==symb) {
      if(OrderType()==OP_BUY) {
       tk=OrderTicket();
       ask=Last_Tick.ask;
       bid=Last_Tick.bid;
       ...
 
Vitaly Muzichenko:

¿Pueden decirme cómo anotarlo para ahorrar recursos y obtener precios actualizados?

  for(int i=OrdersTotal(); i>=0; i--) {
   if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES)) {
    if(OrderSymbol()==symb) {
      if(OrderType()==OP_BUY) {
       tk=OrderTicket();
       SymbolInfoTick(OrderSymbol(),Last_Tick); <<<
       ask=Last_Tick.ask;
       bid=Last_Tick.bid;
       ...

¿o así?

SymbolInfoTick(OrderSymbol(),Last_Tick); <<<
  for(int i=OrdersTotal(); i>=0; i--) {
   if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES)) {
    if(OrderSymbol()==symb) {
      if(OrderType()==OP_BUY) {
       tk=OrderTicket();
       ask=Last_Tick.ask;
       bid=Last_Tick.bid;
       ...


La primera opción es más correcta. En la segunda, deberías escribir esta líneaSymbolInfoTick(symb,Last_Tick); <<<<
 
Vitaly Muzichenko:

¿Pueden decirme cómo anotarlo para ahorrar recursos y obtener precios actualizados?

  for(int i=OrdersTotal(); i>=0; i--) {
   if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES)) {
    if(OrderSymbol()==symb) {
      if(OrderType()==OP_BUY) {
       tk=OrderTicket();
       SymbolInfoTick(OrderSymbol(),Last_Tick); <<<
       ask=Last_Tick.ask;
       bid=Last_Tick.bid;
       ...

¿o así?

SymbolInfoTick(OrderSymbol(),Last_Tick); <<<
  for(int i=OrdersTotal(); i>=0; i--) {
   if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES)) {
    if(OrderSymbol()==symb) {
      if(OrderType()==OP_BUY) {
       tk=OrderTicket();
       ask=Last_Tick.ask;
       bid=Last_Tick.bid;
       ...


Yo diría que depende del tamaño de OrdersTotal() y de la probabilidad de cambios de precio durante el ciclo.

En mi opinión, obtener datos frescos directamente en el bucle es más correcto.

Y creo que las variables adicionales (resaltadas en el código) son absolutamente innecesarias.

 
Alexey Viktorov:

Hay un ejemplo en la documentación.

Probablemente sería mejor recorrer las órdenes en el bucle y, siempre que la siguiente orden sea inferior a la anterior, seleccionarla para seguir trabajando con ella. Así, tras salir del bucle, se seleccionará la orden que se va a eliminar.

O bien, puede memorizar primero su posición en la lista de órdenes y luego seleccionarla después de salir del bucle utilizando el índice memorizado.

No es tan fácil establecer órdenes superiores e inferiores si
 
Sergey Gritsay:
La primera opción es más correcta. La segunda debería escribirSymbolInfoTick(symb,Last_Tick); <<<<

Sí, lo he copiado y no me he dado cuenta.

Me pregunto siSymbolInfoTick es la forma correcta de ponerlo dentro del bucle, si es necesario, o si se puede poner antes del bucle. Se utiliza en el trailing stop, puede tirar de una red hasta 50pc.

 
Vitaly Muzichenko:

Sí, lo he copiado y no me he dado cuenta.

Me pregunto siSymbolInfoTick es la forma correcta de ponerlo dentro del bucle, si es necesario, o si se puede poner antes del bucle. Utilizado en el trailing stop, puede tirar de una parrilla de hasta 50pc.

Para el trailing stop es por supuesto mejor ponerlo una vez antes del ciclo.
 
Alexey Viktorov:

¿No sabe cómo determinar la línea BU de todos los pedidos?

Sé cómo determinar la BU, necesito que la línea se dibuje a este nivel
 
Alexey Viktorov:
Para el trailing stop es por supuesto mejor una vez antes del ciclo.

Ahora lo estoy reescribiendo poco a poco para 5. Me refiero a que el precio puede cambiar muy rápidamente y el nivel puede ser menor que el valor del stop-loss, lo que llevará a un error. Me refiero a que el precio puede cambiar muy rápidamente y el nivel será menor que el nivel de parada permitido, lo que dará lugar a un error.

¿Entiendo que este sombrero"SymbolInfoTick" es necesario para obtener los precios reales?

 
problema resuelto comparando precios
Razón de la queja: