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

 
kwadrad:

¿Qué puede hacer al respecto?

actualizar los datos antes de la apertura, normalizar el precio

Vinin:

Escribí enseguida que este cierre no es recomendable. Se está utilizando una función no documentada. Pero cualquier posición abierta tiene un tiempo de cierre de cero, y el precio de cierre será igual al precio de cierre actual.

después de todas estas experiencias esto ya es obvio)

 
kwadrad:

¿Qué se puede hacer al respecto?

Fíjate bien en los precios que fijas cuando abres una posición. Seguramente debe haber... ¿Se confunde Ask con Bid?
 
artmedia70:
Fíjate bien en los precios que fijas al abrir una posición. Seguramente debe haber... ¿Se confunde Ask con Bid?

Sí, lo es. Lo he hecho.
 
kwadrad:

lo es. Gracias.
De nada, es lo primero que confunden los novatos, lo sé...
 
¿Alguien ha hecho un simple trailing stop mover una orden pendiente detrás del precio en lugar del nivel de parada? ¿Es posible hacerlo?
Lo he intentado y lo he intentado, pero lo único que he conseguido es que la orden pendiente se mueva de un lado a otro detrás del precio como un enfermo...

¿Es posible modificar la función de arrastre simple para que se ocupe de las órdenes en lugar de los stops? Por ejemplo este:

//+----------------------------------------------------------------------------+
//|  Сопровождение позиции простым тралом                                      |
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ("" - текущий символ)                   |
//|    op - операция                   (-1 - любая позиция)                    |
//|    mn - MagicNumber                (-1 - любой магик)                      |
//+----------------------------------------------------------------------------+
  void TrailingPositionsSimplTR(string sy="", int op=-1, int mn=-1) {
  double p, pp;
  int    i, k=OrdersTotal();

  if (sy=="" || sy=="0") sy=Symbol();
  p=MarketInfo(sy, MODE_POINT);
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy && (op<0 || OrderType()==op)) {
        if (mn<0 || OrderMagicNumber()==mn) {
          if (OrderType()==OP_BUY) {
            pp=MarketInfo(sy, MODE_BID);
            if (!ProfitTrailing || (pp-OrderOpenPrice())>TrailingStopBuy*p) {
              if (OrderStopLoss()<pp-(TrailingStopBuy+TrailingStepSimplTR-1)*p) {
                ModifyOrder(sy, -1, pp-TrailingStopBuy*p, 0, clModifyBuy);//
              }
            }
          }
          if (OrderType()==OP_SELL) {
            pp=MarketInfo(sy, MODE_ASK);
            if (!ProfitTrailing || OrderOpenPrice()-pp>TrailingStopSell*p) {
              if (OrderStopLoss()>pp+(TrailingStopSell+TrailingStepSimplTR-1)*p || OrderStopLoss()==0) {
                ModifyOrder(sy, -1, pp+TrailingStopSell*p, 0, clModifySell);
              }
            }
          }
        }
      }
    }
  }
}
 
ToLik_SRGV:

Print() redondea a 4 dígitos para mostrar correctamente en la consola el tipo double(que devuelve iOpen() 5 decimales, en este caso), debe utilizar la función DoubleToStr()

string DoubleToStr( double value, int digits)
Convierte un valor numérico en una cadena de texto que contiene una representación de caracteres de un número en el formato de precisión especificado.

Parámetros:

value - Величина с плавающей точкой.

digits - Формат точности, число цифр после десятичной точки (громное спасибо.


Muchas gracias.
 
Roger:


Mira este EA, lo he implementado allí

http://www.rogersignals.com/ru/experts.php?a=Support_Resistance

Bien, gracias, lo investigaré...
 
artmedia70:
¿Alguien ha hecho un simple trailing stop mover una orden pendiente detrás del precio en lugar del nivel de parada? ¿Es posible hacerlo?
Lo intenté y lo intenté, pero todo lo que obtuve fue que la orden pendiente se mueve de un lado a otro detrás del precio como un enfermo...

¿Es posible modificar la función de arrastre simple para que se ocupe de las órdenes en lugar de los stops? Por ejemplo este:

Todo es demasiado complicado :)))
Este es mi código

//+------------------------------------------------------------------+
void trailingOrder(int magic, int trailing){
   int index = 0;
   while(trailing > 0 && OrdersTotal() != 0 && OrderSelect(index, SELECT_BY_POS)){
      if(OrderMagicNumber() == magic){
         if(OrderType() == OP_BUYSTOP){
            if(OrderOpenPrice() - Ask > Point*trailing){
               if((Ask+Point*trailing)-Ask >= MarketInfo(Symbol(), MODE_STOPLEVEL)*Point && (Ask+Point*trailing)-Ask > MarketInfo(Symbol(), MODE_FREEZELEVEL)*Point){
                  if(!OrderModify(OrderTicket(),Ask+Point*trailing,OrderStopLoss(),OrderTakeProfit(), 0))Print(">>> ERROR ", GetLastError());
               }else{
                  Print(">>> Слишком близко к рынку!");
               }
            }
            return;
         }
         if(OrderType() == OP_SELLSTOP){
            if(Bid - OrderOpenPrice() > Point*trailing){
               if(Bid-(Bid-Point*trailing) >= MarketInfo(Symbol(), MODE_STOPLEVEL)*Point && Bid-(Bid-Point*trailing) > MarketInfo(Symbol(), MODE_FREEZELEVEL)*Point){
                  if(!OrderModify(OrderTicket(),Bid-Point*trailing,OrderStopLoss(),OrderTakeProfit(), 0))Print(">>> ERROR ", GetLastError());
               }else{
                  Print(">>> Слишком близко к рынку!");
               }
            }
            return;
         }
      }
      index++;
   }
}
//+------------------------------------------------------------------+
Se pasa en el método como parámetros un medge retrasado, y trall deseado.
 
      for (i =0;i<OrdersTotal();i++)
      {
         if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true&&OrderMagicNumber()==MAGICMA&&OrderSymbol()==Symbol())
         {
            if (MathAbs(funk-OrderOpenPrice())>Point)
            {
               if (OrderType()==OP_BUYSTOP||OrderType()==OP_BUYLIMIT&&MathAbs(Ask-funk)>MarketInfo(Symbol(),MODE_STOPLEVEL)*Point)
               {
                  OrderModify(OrderTicket(),NormalizeDouble(funk,Digits),OrderStopLoss(),NormalizeDouble(funk+TakeProfiti*Point,Digits),0);
               }
               if (OrderType()==OP_SELLSTOP||OrderType()==OP_SELLLIMIT&&MathAbs(Bid-funk)>MarketInfo(Symbol(),MODE_STOPLEVEL)*Point)
               {
                  OrderModify(OrderTicket(),NormalizeDouble(funk,Digits),OrderStopLoss(),NormalizeDouble(funk-TakeProfiti*Point,Digits),0);
               }
            }
         }
      }
algo así, donde el orden es arrastrado por el valor de funk calculado
 
ToLik_SRGV:

Es demasiado complicado para ti :))
Este es mi código

Pasar en el método como parámetros un medjw retrasado, y trall deseado.

Gracias. ¡Creo que esto es todo!
Razón de la queja: