Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 102

 
Dozol:


¡Roger, no puedo entenderlo!

Lanzó una línea horizontal en el gráfico, fijar su precio, eliminar la línea - ya no es necesario. Inmediatamente se establece una orden a ese precio.

¿Cuál es el error? ¿Y por qué no se abre un Sell Stop?

¿Por qué seguir el precio si sólo necesito el valor del precio de la línea horizontal?

¡¡Explícate!! ¡Ayuda! Más detalles, por favor.

Sellstop se equivocó, se abrirá.

Ahora sobre las líneas. Cuando opero en vivo, miro el gráfico y coloco una línea horizontal, las condiciones son adecuadas, la línea se borra y la orden se abre. ¿Cómo es esto mejor que un simple script de teclas de acceso rápido? En el probador, para dibujar la línea, hay que activar la visualización y observar el gráfico. Ni siquiera entiendo por qué hay que añadirlo al probador.

 
borilunad:
Lo siento. Entonces, ¡sube al orinal y duérmete! ¡Que tengas una buena mañana! ;)
De acuerdo. Lo resolveré yo mismo, no es un acertijo irresoluble. Pero hasta ahora sólo se me ocurren muletas. El método de la muleta no es un buen método...
 
Buenas personas, pueden decirme qué pasa. En una operación de venta, que se abre en el primer tick de la barra 0, el stop loss debe fijarse 30 pips (5 dígitos) por encima del High de la primera vela. Lo escribí de esta manera, pero el stop loss no está fijado en absoluto.
     Price = NormalizeDouble(Bid, Digits); // округляем до нужного нам числа цифр после запятой
     if(StopLoss > 0)
     if(Bid < iHigh(Symbol(),0,1)) 
     {
       StopLoss = iHigh(Symbol(),0,1)+30*Point;
       SL= Price + StopLoss*Point;
       SL = NormalizeDouble(SL, Digits); // округляем до нужного нам числа цифр после запятой
      }
 
artmedia70:

¿Y en los dedos? ¿Cómo pueden el tiempo y el precio decirte que cierres la toma? Ciertamente puedo pensarlo yo mismo, pero son las 7.43 de la mañana y aún no me he acostado.


Si son las 7.43 y no me he acostado... Así que voy a suponer que es Grial.
 
alexey1979621:
Buenas personas, díganme qué es lo que está mal. En una operación de venta, que se abre en el primer tick de la barra 0, el stop loss debe fijarse 30 pips (5 dígitos) por encima del High de la primera vela. Escribió así, pero el stop loss no está colocado en absoluto.

StopLoss = iHigh(Symbol(),0,1)+30*Point;

Este es el nivel de stop loss que desea, por ejemplo, 1,5000+30*0,00001 = 1,5003.


SL= Price + StopLoss*Point; 
Por qué si no añadiría StopLoss*Punto al Precio(1,5003*0,00001=0,000015). El SL se vuelve casi igual al Precio, por eso no se establece ningún StopLoss.
 
El stop loss sigue sin estar fijado, pero el take profit funciona. Se adjunta el código de stop loss y take profit
Price = NormalizeDouble(Bid, Digits);  
     if(StopLoss > 0)
     if(Bid < iHigh(Symbol(),0,1)) 
      {
       StopLoss = iHigh(Symbol(),0,1)+30*Point;
       SL = NormalizeDouble(SL, Digits); 
      }
       else SL = 0;
       if(TakeProfit > 0)
      {
       TP = Price - TakeProfit*Point;
       TP = NormalizeDouble(TP, Digits); 
      }
       else TP = 0;
      { 
      ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,SL,TP,"Pattern_1",Magic,0,Red);
      return;
      }
 
artmedia70:
1. Busque la última posición cerrada (MODE_HISTORY).
2. Si cerró en (o cerca de) la comida para llevar --> Recuerda su hora de apertura -->
3. Mira todas las posiciones abiertas (MODE_TRADES) y compara su tiempo de apertura con el recordado (desde el punto 2) --> Si el tiempo recordado de apertura de la posición cerrada por la posición actual (desde el punto 2) es el más largo desde el tiempo de apertura de otras posiciones abiertas --> Significa que la última posición abierta fue cerrada por la posición actual -->
4. Recorta/borra todo lo demás.


Parece que está escrito. Pero el resultado no es el mismo.

Esto es lo que me ha salido:

//+-------------------------------------------------------------------------------------+
//| Получаем состояние последней позиции (Открыта или закрыта)                          |
//+-------------------------------------------------------------------------------------+
datetime GetLastOrderState()
{
   datetime lastOrderCloseTime = -1,               // Время закрытия последнего открытого ордера
            lastOOTMarket = -1,          // Время открытия последнего открытого ордера рыночного
            lastOOTHist = -1;            // Время открытия последнего открытого ордера из истории
   
   for (int i=OrdersHistoryTotal()-1; i>=0; i--)
   {
      if (!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) continue;
      if (OrderMagicNumber() != i_magic) continue;
      if (OrderSymbol() != Symbol()) continue;
      if (OrderType() > 1) continue;               // Все удалённые отложки нас не интересуют..
  
      if (lastOrderCloseTime < OrderCloseTime())   // Находим время закрытия..
          lastOrderCloseTime = OrderCloseTime();   // ..последней закрытой позиции в истории
      
      if (MathAbs(OrderTakeProfit() - OrderOpenPrice()) < i_tp * pt) return(0);
      
      lastOOTHist = OrderOpenTime();   // Тогда время открытия последней закрытой позиции из истории
   }
   
   Comment("Время открытия последнего открытого ордера = ", lastOOTHist);
  
   for (int h=OrdersTotal()-1; i>=0; i--)
   {   
      if (!OrderSelect(h, SELECT_BY_POS, MODE_TRADES)) continue;
      if (OrderMagicNumber() != i_magic) continue;
      if (OrderSymbol() != Symbol()) continue;
      {
         if (lastOOTMarket < OrderOpenTime())
             lastOOTMarket = OrderOpenTime();
  
         if (lastOOTMarket < lastOOTHist)      // Если время открытия последнего открытого ордера (рыночного) ниже последнего открытого ордера из истории..
             lastOrderCloseTime = OrderCloseTime(); // Значит это искомый ордер
      }
   }

   Comment("Время закрытия последнего открытого ордера = ", lastOrderCloseTime);
   return (lastOrderCloseTime);
}
 
alexey1979621:
Buenas personas, pueden decirme qué pasa. En una operación de venta, que se abre en el primer tick de la barra 0, el stop loss debe fijarse 30 pips (5 dígitos) por encima del High de la primera vela. Lo escribí de esta manera, pero el stop loss no está fijado en absoluto.

Lo que tienes aquí no es nada en absoluto. Empecemos por el hecho de que los cierres en corto siempre se producen en el ASC, no en el BID.
 
alexey1979621:
El stop loss sigue sin estar fijado, pero el take profit funciona. Se adjunta el código de stop loss y take profit

Price = NormalizeDouble(Bid, Digits);  
     if(StopLoss > 0)
     if(Bid < iHigh(Symbol(),0,1))               // Здесь еще STOPLEVEL нужно проверять, иначе частые ошибки будут
      {
       StopLoss = iHigh(Symbol(),0,1)+30*Point;  // Здесь вместо переменной StopLoss попробуйте поставить SL
       SL = NormalizeDouble(SL, Digits); 
      }
       else SL = 0;
       if(TakeProfit > 0)
      {
       TP = Price - TakeProfit*Point;
       TP = NormalizeDouble(TP, Digits); 
      }
       else TP = 0;
      { 
      ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,SL,TP,"Pattern_1",Magic,0,Red);
      return;
      }
 
hoz:


Hmm. Parece haber sido escrito. Pero la salida está mal...

Esto es lo que tengo:

Al buscar la última orden cerrada, se debe encontrar primero la más reciente, pero se debe sacar del bucle la comprobación del cierre en la toma, de lo contrario comprueba cada orden cerrada para el cierre en la toma y, si es así, recuerda la hora de la primera cerrada en la toma en el bucle, no la más reciente.
Razón de la queja: