[¡Archivo!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no lo dejéis pasar. No podría ir a ningún sitio sin ti - 2. - página 289

 

Bueno, básicamente, la estrategia en sí es muy largo y complejo, y no hay punto en la descripción, es 1 punto para crear un bucle es decir, tengo que encontrar algo en lugar de total==1 que no se abre una posición no coincide con la solicitud, es decir, si se cierra en st entonces .........open 1, si se cierra en ......... тп abrir 2, la condición de la falta de una orden en el mercado, eso es todo,

 
FoxUA:

Bueno, básicamente, la estrategia en sí es muy largo y complejo, y no hay punto en la descripción, es 1 punto para crear un bucle es decir, tengo que encontrar algo en lugar de total==1 que no se abre una posición no coincide con la solicitud, es decir, si se cierra en st entonces .........open 1, si se cierra en ......... тп abrir 2, la condición de la falta de una orden en el mercado, eso es todo,


Entonces no quieres usar la función de Igor. Se necesita una función que devuelva el tipo de la última orden cerrada y por qué se cerró. No devolverá la razón de la última orden cerrada de un determinado tipo. Intentaré pensar en algo ahora...

 
Figar0:


Entonces simplemente no se ajusta a la función de Igor que está utilizando. Se necesita una función que devuelva el tipo de la última orden cerrada y el motivo por el que se cerró (tap o sl). No devolverá la razón de la última orden cerrada de un determinado tipo. Intentaré pensar en algo ahora...


Si tienes algo similar a Klimovskoe que devuelva un valor sólo para el último cierre de la orden, te estaría muy agradecido
 

Prueba esta función junto con la función de Igor:

//+----------------------------------------------------------------------------+
//|  Версия   : 30.03.2011                                                     |
//|  Описание : Возвращает тип последней закрытой позиции                      |
//|  если Buy 1 , если Sell -1                                                 |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    symbol - наименование инструмента                                       |
//|    magic - MagicNumber                                                     |
//+----------------------------------------------------------------------------+
int LastCloseDeal(string symbol, int magic) 
{
  int lastclosetime=-1;
  int lastcloseticket=-1;
  int lastdealtype=0;

  for (int i=0; i<OrdersHistoryTotal(); i++) 
  {
    if (!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) continue; 
    if (OrderSymbol()==symbol || OrderMagicNumber()==magic) 
    {
      if (lastclosetime<OrderCloseTime()) 
      {
        lastclosetime=OrderCloseTime();
        lastcloseticket=OrderTicket();
      }
    }
  }

  if (OrderSelect(lastcloseticket, SELECT_BY_TICKET, MODE_HISTORY)) 
  {
    if (OrderType()==OP_BUY) lastdealtype=1;
    if (OrderType()==OP_SELL) lastdealtype=-1;   
  }
  return(lastdealtype);
}
 

El código debería tener el siguiente aspecto

bool Buystop=isCloseLastPosByStop(NULL,OP_BUY,MagBuy);
bool BuyTake=isCloseLastPosByTake(NULL,OP_BUY,MagBuy);
bool Sellstop=isCloseLastPosByStop(NULL,OP_SELL,MagBuy);
bool SellTake=isCloseLastPosByTake(NULL,OP_SELL,MagBuy);

//--------------------------------------------------------------------------------+
if(total==1) 
 {

   if (LastCloseDeal(Symbol(), MagBuy)==1)

  {
      if(Buystop==True)    OpenPosition(NULL, OP_SELL, Lot,Bid+Sl3*Point, Bid-Tp3*Point,MagBuy);
      if(BuyTake==True)   OpenPosition(NULL, OP_BUY,  Lot, Ask-Sl*Point, Ask+Tp*Point,MagBuy);      
   }

   if (LastCloseDeal(Symbol(), MagBuy)==-1)

   { 
      if(Sellstop==True)   OpenPosition(NULL, OP_BUY,  Lot, 0, Ask+Tp*Point,MagBuy);
      if(SellTake==True)    OpenPosition(NULL, OP_BUY,  Lot, Ask-Sl*Point, Ask+Tp*Point,MagBuy); 
   }  

}

 
Figar0:

El código debería tener el siguiente aspecto


Gracias. Lo intentaré.
 
Hola, por favor ayúdenme a establecer stops virtuales en puntos específicos. Para ser más precisos: en lugar de enviar datos sobre nuevos SL, el EA debería simplemente almacenarlos en variables (o en algún otro lugar), y mantener el trailing, trailing, y cuando el precio alcanza un cierto nivel (precio), enviar una señal al DC para cerrar la orden, (una especie de trailing stop virtual con stoploss virtual). En otras palabras, el Asesor Experto incluye un trailing stop en un nivel invisible de 1 pip... ¿es realista?
 
Centuriy:
Hola, por favor ayúdenme a establecer stoplosses virtuales en puntos específicos. Para ser más precisos: en lugar de enviar datos sobre un nuevo SL, el EA simplemente los almacenará en variables (o en algún otro lugar), y seguirá trailing, trailing, y cuando el precio alcanza un cierto nivel envía una señal a la casa de corretaje sobre el cierre de una orden, (una especie de trailing stop virtual con stoploss virtual). En otras palabras, el Asesor Experto incluye un trailing stop en un nivel invisible de 1 pip... ¿es realista?


Sí es real, por supuesto. Usted mira a través de las órdenes abiertas, tienen un precio abierto, por ejemplo, tenemos una orden de compra abierta al precio de X, virtual stop-loss Y puntos, por lo que si el precio actual Z < = X-Y*Punto la orden debe ser cerrada. Por supuesto, también hay que tener en cuenta los spreads y si el stop loss no es fijo sino calculado, el valor calculado debe ser almacenado de forma segura en algún lugar, etc.

Busque "virtual stop", "virtual stoploss", etc.

 
Figar0:


Es realista, por supuesto. Si miramos a través de las órdenes abiertas, se establecerá su precio de apertura, por ejemplo, tenemos una orden de compra abierta al precio X y el stoploss virtual es Y puntos por lo que si el precio actual Z <=X-Y*Punto la orden se cerrará. Por supuesto, hay que tener en cuenta los diferenciales, y si el stop loss no es fijo sino calculado, entonces el valor calculado tiene que ser almacenado de forma segura en algún lugar, etc.

Busque "virtual stop", "virtual stoploss", etc.

Creo que no podemos prescindir de algún tipo de contabilidad de órdenes.

Cree su propia matriz de órdenes y almacene en ella todos los datos necesarios de la parada virtual.

 
Figar0:


Sí es real, por supuesto. Usted mira a través de las órdenes abiertas, tienen un precio abierto, por ejemplo, tenemos una orden de compra abierta al precio de X, virtual stop-loss Y puntos, por lo que si el precio actual Z < = X-Y*Punto la orden debe ser cerrada. Por supuesto, también hay que tener en cuenta los spreads y si el stop loss no es fijo sino calculado, el valor calculado debe ser almacenado de forma segura en algún lugar, etc.

Busque "stop virtual", "virtual stoploss", etc.

Gracias por la respuesta, es sólo el trailing stop (parada de arrastre) que es el problema, quiero rastrear 1 pip min, y quiero enviar orderModify a la empresa de corretaje con cada garrapata - es sólo gamberrismo IMHO ))

"Si el stop loss no es fijo, sino calculado, el valor calculado debe guardarse de forma segura en algún lugar".

donde almacenar y como llamarlo... creo que tiene que ser una variable, o me equivoco...