Redactaré un asesor de forma gratuita - página 149

 
DDM77:
Después de que el bot haya sido probado, es posible hacer un pedido oficial

Muy bien dicho :)

 
Александр:

un par de cambios

¿Qué ha cambiado exactamente?

 

Hola, colegas.

¿Sigue siendo relevante el tema? ¿Hay algún mecenas que esté dispuesto a desarrollar el robot de forma gratuita?

Necesito un asistente que sea un buen codificador de .mq4.

Yo también soy programador, pero no soy muy bueno con el mq4. Hay algunos problemas, que o bien no sé describir, o bien no funcionan.

Tengo una estrategia simple de scalping (M15-M30) y un robot inicialmente escrito. Hay que mejorarla.

No daré el enlace a mi sitio, no será considerado como mi publicidad:

RVI 50

EMA 9

EMA 100

Condiciones de entrada para una posición larga:

La EMA9 cruza la EMA100 de abajo a arriba, el RVI también debe cruzar la línea de cero de abajo a arriba o estar por encima de la línea de cero. Si se cumplen estas condiciones, abrimos una posición de compra. Colocamosun stop loss 2-3 puntos por debajo del mínimo más cercano. El Take Profit es 1,5-2 veces mayor que el Stop Loss.

Condiciones de entrada para una posición corta:

La EMA9 cruza la EMA100 desde arriba hacia abajo, mientras que el indicador RVI también debe cruzar la línea de cero desde arriba hacia abajo o estar por debajo de la línea de cero. Si se cumplen estas condiciones, abrimos una posición de venta. Se coloca un stop loss justo por encima del máximo más cercano. El Take Profit es 1,5-2 veces mayor que el Stop Loss.


He escrito un robot primitivo pero está perdiendo porque tengo que arreglar algo que no funciona, además quizás alguien tenga alguna idea de cómo filtrar las señales falsas? (por supuesto que sí)...

Lo que no funciona y hay que arreglarlo:

1. El Stop Loss y el Take Profit están fijados en 100 y 200 respectivamente, estos niveles no son suficientes. Deberíamos calcular un stop loss mínimo/máximo a partir del conjunto de velas de las últimas X barras (establecer X barras como parámetro de entrada) y tomar beneficios a partir de él. No sé cómo hacerlo. El punto más importante, porque el robot falla exactamente por cerrar en el stop, aunque la señal era correcta y el beneficio hubiera ido a más.

2. El robot, por alguna razón, abre (en el probador) varias órdenes en la misma barra dentro de algunos ticks, a pesar de que está comprobando la apertura de una orden en la misma barra (tomada de este foro), pero no está funcionando. Tenemos que modificar la comprobación y ver por qué no funciona.

3. Completar la adición de un trailing stop (parámetros entrantes del robot) cuando la BU alcanza un determinado nivel, por ejemplo, 1/2 del TP calculado (también es posible especificar el factor de la BU en los parámetros, por ejemplo, de 0,3 a 0,7). El arrastre por separado está descrito en el robot (el código está tomado de este foro), pero no tiene en cuenta la BU. Además, por alguna razón no funciona en el Probador de Estrategias, necesito entender por qué.

4. Quiero añadir la gestión del dinero, pero no sé cómo. Por ejemplo, la prohibición de abrir órdenes de más de 5 en una dirección, si están activas. O prohibir el comercio al fijar el saldo/capital en la cuenta.

5. Martingala. Filtrado de señales. (Opcional).


Eso es todo. El archivo del robot está listo para ser presentado al personal si está interesado en la cooperación. Si estás interesado, estoy dispuesto a compartir el archivo del robot de comercio en un mensaje personal, si hay algún comerciante interesado. Yo mismo voy a terminar, entonces se quedan sólo 1 punto.

 

He resuelto el punto 1. He encontrado cómo calcular el precio en el historial de barras usando iLowest/iHighest )) para el último medio año de historia el indicador de rentabilidad ha aumentado ligeramente) en todo el historial está perdiendo (

Sigo sin entender el punto 2.

Empecé a manejar el trailing, tal vez lo "gane" yo solo) la rentabilidad debe crecer un poco, porque hay operaciones con gran take que el precio simplemente no llega y lo cierra por stop, aunque puede haber alguna ganancia.

 

en el segundo punto:

datetime current, last=0;
int shift=1;

void OnTick()
   {
   current=iTime(symbol,frame,shift);
   //ограничение на торговлю вне начала бара
   if(last==current) return;
   last=current;

   }

en el tercer punto:

//трейлинг рыночных ордеров, стоплосс держится на расстоянии Distance от самой экстремальной тени из последних History баров 
int DoTrailOrder(int ePosition, int eMagicNumber, double eDistance, int eHistory, string eSymbol, int eTimeFrame)
   {
   if(!OrderSelect(ePosition,SELECT_BY_POS,MODE_TRADES)) return(1);
   int eType=OrderType();
   if(eType!=OP_BUY && eType!=OP_SELL) return(0);
   if(OrderMagicNumber()!=eMagicNumber) return(0);
   if(OrderSymbol()!=eSymbol) return(0);
   //наблюдаем начиная с бара следующим за баром открытия
   if(iBarShift(eSymbol,eTimeFrame,OrderOpenTime())==0) return(0);
   int eDigits=(int)MarketInfo(eSymbol,MODE_DIGITS);
   double ePoint=MarketInfo(eSymbol,MODE_POINT);
   double eSpread=MarketInfo(eSymbol,MODE_SPREAD);
   double eExtremum;
   if(eType==OP_BUY)
      {
      //стоп устанавливается на расстоянии eDistance от самой низкой тени бара из истории eHistory
      eExtremum=iLow(eSymbol,eTimeFrame,iLowest(eSymbol,eTimeFrame,MODE_LOW,eHistory,1));
      //расстояние от минимума до StopLoss должно превысить TrailingLevel
      if(NormalizeDouble(eExtremum-OrderStopLoss(),eDigits)<=eDistance*ePoint) return(0);
      //расстояние от минимума до цены открытия должно превысить TrailingLevel
      if(NormalizeDouble(eExtremum-OrderOpenPrice(),eDigits)<=eDistance*ePoint) return(0);
      //новый стоп должен быть не ближе к текущей цене, чем на два спреда
      if(NormalizeDouble(MarketInfo(eSymbol,MODE_BID)+eDistance*ePoint-eExtremum,eDigits)<=2*eSpread*ePoint) return(0);
      if(!OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(eExtremum-eDistance*ePoint,eDigits),OrderTakeProfit(),OrderExpiration(),clrBlue)) return(-1);
      }
   if(eType==OP_SELL)
      {
      //стоп устанавливается на расстоянии eDistance от самой высокой тени бара из истории eHistory
      eExtremum=iHigh(eSymbol,eTimeFrame,iHighest(eSymbol,eTimeFrame,MODE_HIGH,eHistory,1));
      if(NormalizeDouble(OrderStopLoss()-eExtremum,eDigits)<=(eDistance+eSpread)*ePoint && OrderStopLoss()!=0) return(0);
      if(NormalizeDouble(OrderOpenPrice()-eExtremum,eDigits)<=(eDistance+eSpread)*ePoint) return(0);
      //один спред между Ask и Bid сократился
      if(NormalizeDouble(eExtremum+eDistance*ePoint-MarketInfo(eSymbol,MODE_ASK),eDigits)<=eSpread*ePoint) return(0);
      if(!OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(eExtremum+(eDistance+eSpread)*ePoint,eDigits),OrderTakeProfit(),OrderExpiration(),clrRed)) return(-1);
      }
   return(0);
   }
 

Los trailing stops pueden aumentar la expectativa, pero no mejoran la rentabilidad. Habrá un rendimiento inferior en un mercado ruidoso, en el que el precio derriba un stop recién trazado, cuando sin él podría haber habido más beneficios.

Es mejor pensar en la dirección de cerrar el comercio conscientemente. Usted está buscando señales para abrir, entonces ¿por qué lanzar el cierre al arbitraje?
 

Gracias por los consejos sobre los puntos 2,3. Haré pruebas.

En cuanto al cierre, por supuesto que es posible cerrar cuando se dispara la señal contraria, tengo que pensar... qué dará más efecto

quiero seguir algo cuando llegue a un determinado nivel. será un inconveniente pero tampoco quiero tener un gran drawdown. tengo que pensarlo))

gracias

 

Dimitri, sobre el arrastre - esta es una información ya probada por muchas personas más de una vez. El código de abajo es probablemente el mejor de todos. Pero no está exento de este inconveniente.

Pruébalo, todo tiene que ser probado.

 
Ivan:

¿Qué ha cambiado exactamente?

Ya lo he dado en alguna parte. Aquí hay más.

Archivos adjuntos:
 
Дмитрий Хлыстов:

Gracias por los consejos sobre los puntos 2,3. Haré pruebas.

En cuanto al cierre, por supuesto que es posible cerrar cuando se dispara la señal contraria, tengo que pensar... qué dará más efecto

quiero seguir algo cuando llegue a un determinado nivel. será un inconveniente pero tampoco quiero tener un gran drawdown. tengo que pensarlo))

gracias

El mercado no se mueve por puntos, es decir, no se basa en ellos. Pasa de un nivel a otro. La distancia se mide mejor en tiempo de tendencia. Quizás en ticks, pero no en pips.