sistema de traiding con un nuevo tipo de vela que me da error. Una Manita?

 

Buenas noches a todos. Llevo ya un tiempo tradeando y me gustaría empezar a automatizar un a estrategia que al menos en back  test manual es rentable. Pero me da error cuando ls compilo. No soy para nada  un experto  en programacion y querria ver  si alguien me puede echar una mano. 

La strategia es muy simple, he "creado" un nuevo tipo de vela a modo de indicador para mt5. el codigo lo comprato a continuacion, no he conseguido hacer que se pueda elegir el color de las velas bajistas o alcistas, por si alguien se motiva a hacerlo. En culqier caso esta vela seria como una heikin ashi con dos diferencias. Una es que el cierre de la vela o lo que dibuja el cuerpo de la vela es el precio a propiamente dicho, y que la vela cambia de color a alcista o bajista cuando  el precio atraviesa el precio de apertura al alza o a la baja. De esa manera se puede preveer mejor y mas rapidamente un giro de tendencia y evita las falsass señales de las velas heikinashi. aqui teneis  el  codigo:

//+------------------------------------------------------------------+
//|                                               jjsv.mq5   |
//|                      Copyright 2023, Tu Nombre                   |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "2023, Tu Nombre"
#property version   "1.00"
#property indicator_chart_window
#property indicator_buffers 5
#property indicator_plots   1
#property indicator_type1   DRAW_COLOR_CANDLES
#property indicator_color1  DodgerBlue, Red
#property indicator_label1  "Heiken Ashi Open;Heiken Ashi High;Heiken Ashi Low;Heiken Ashi Close"
//--- indicator buffers
double ExtOBuffer[];
double ExtHBuffer[];
double ExtLBuffer[];
double ExtCBuffer[];
double ExtColorBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0, ExtOBuffer, INDICATOR_DATA);
   SetIndexBuffer(1, ExtHBuffer, INDICATOR_DATA);
   SetIndexBuffer(2, ExtLBuffer, INDICATOR_DATA);
   SetIndexBuffer(3, ExtCBuffer, INDICATOR_DATA);
   SetIndexBuffer(4, ExtColorBuffer, INDICATOR_COLOR_INDEX);
//--- sets first bar from what index will be drawn
   IndicatorSetInteger(INDICATOR_DIGITS, _Digits);
   IndicatorSetString(INDICATOR_SHORTNAME, "Heiken Ashi");
//--- sets drawing line empty value
   PlotIndexSetDouble(0, PLOT_EMPTY_VALUE, 0.0);
  }
//+------------------------------------------------------------------+
//| Heiken Ashi                                                      |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total, const int prev_calculated,
                const datetime &Time[],
                const double &Open[],
                const double &High[],
                const double &Low[],
                const double &Close[],
                const long &TickVolume[],
                const long &Volume[],
                const int &Spread[])
  {
   int i, limit;
//--- preliminary calculations
   if(prev_calculated == 0)
     {
      //--- set first candle
      ExtLBuffer[0] = Low[0];
      ExtHBuffer[0] = High[0];
      ExtOBuffer[0] = Open[0];
      ExtCBuffer[0] = Close[0];
      limit = 1;
     }
   else
      limit = prev_calculated - 1;
//--- the main loop of calculations
   for(i = limit; i < rates_total && !IsStopped(); i++)
     {
      double haOpen = (ExtOBuffer[i - 1] + ExtCBuffer[i - 1]) / 2;
      double haClose = Close[i];
      double haHigh = MathMax(High[i], MathMax(haOpen, haClose));
      double haLow = MathMin(Low[i], MathMin(haOpen, haClose));

      ExtLBuffer[i] = haLow;
      ExtHBuffer[i] = haHigh;
      ExtOBuffer[i] = haOpen;
      ExtCBuffer[i] = haClose;

      //--- set candle color
      if(haOpen < haClose)
         ExtColorBuffer[i] = 0.0; // set color DodgerBlue
      else
         ExtColorBuffer[i] = 1.0; // set color Red
     }
//--- done
   return (rates_total);
  }
//+------------------------------------------------------------------+

Para visualizarlo  bien, abrir un gráfico,  poned el indicador, y luego poner en vez de velas japonesas poned grafico   lineal y  quitadle el color. Asi vereis  como se forma la vela y podreis familiarizaros con ella.

Ahora bien e bot que uiero crear es myu simple, cuando  la vela es alcista (azul) si no hay una operacion aierta, habra un operacion alcista con stop en el precio mas bajo de la vela o en su apertura ( no se si podria poner en el "minimo anterior". La operacion se cierra  por stop o por el cierre de una vela de signo contraio en cuyo caso se abriria una opercion bajista con stop en el precio mas alto de la vela, o ne la apertura (si se puede maxio anterior geniaal) o por el cierre de una ela de signo contrario en cuyo caso se abriria posiciones largas. En back test   manual  y  en tf altos como un dia, 4 horas incluso una hora el sistema es rentable con operaciones  a 1/3 o 1/2 al gun 1/5 haypero  tasa de acierto de un 40/60%.... pero en manual.  Este es el codigo para el bot que he escrito pero me da errores por todas partes y no tengo el nive de saber que  esta mal e scrito, tdo me paece correcto..

Aqui el codigo:


//+------------------------------------------------------------------+
//|                                               JUAN JESUS.mq5   |
//|                      Copyright 2023, Tu Nombre                   |
//+------------------------------------------------------------------+
#property copyright "2023, Tu Nombre"
#property version   "1.00"
#property script_show_inputs

input double lotSize = 0.1;
input int    stopLossPoints = 50;
input int    takeProfitPoints = 100;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit()
{
   //--- nothing to initialize
}

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
void OnTick()
{
   int totalBars = iBars(_Symbol, _Period);
   double haClose = iCustom(_Symbol, _Period, "jjsv", 0, 3, 0);

   // Check for a bullish Heiken Ashi candle
   if (haClose > iOpen(_Symbol, _Period, 0))
   {
      // Open a long position
      MqlTradeRequest request = {0};
      request.action = TRADE_ACTION_DEAL;
      request.symbol = _Symbol;
      request.volume = lotSize;
      request.type = ORDER_BUY;
      request.price = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
      request.sl = SymbolInfoDouble(_Symbol, SYMBOL_ASK) - stopLossPoints * _Point;
      request.tp = SymbolInfoDouble(_Symbol, SYMBOL_ASK) + takeProfitPoints * _Point;

      MqlTradeResult result = {0};
      ulong ticket = OrderSend(request, result);
      if(ticket > 0)
      {
         Print("Long order opened. Ticket:", ticket);
      }
      else
      {
         Print("Error opening long order. Error code:", GetLastError());
      }
   }
   // Check for a bearish Heiken Ashi candle
   else if (haClose < iOpen(_Symbol, _Period, 0))
   {
      // Open a short position
      MqlTradeRequest request = {0};
      request.action = TRADE_ACTION_DEAL;
      request.symbol = _Symbol;
      request.volume = lotSize;
      request.type = ORDER_SELL;
      request.price = SymbolInfoDouble(_Symbol, SYMBOL_BID);
      request.sl = SymbolInfoDouble(_Symbol, SYMBOL_BID) + stopLossPoints * _Point;
      request.tp = SymbolInfoDouble(_Symbol, SYMBOL_BID) - takeProfitPoints * _Point;

      MqlTradeResult result = {0};
      ulong ticket = OrderSend(request, result);
      if(ticket > 0)
      {
         Print("Short order opened. Ticket:", ticket);
      }
      else
      {
         Print("Error opening short order. Error code:", GetLastError());
      }
   }
}

//+------------------------------------------------------------------+

Espero que alguien pueda ayudarme, gracias

Código con formato incorrecto editado por la moderadora

Documentación para MQL5: Constantes, Enumeraciones y Estruturas / Constantes de gráficos / Propiedades de gráficos
Documentación para MQL5: Constantes, Enumeraciones y Estruturas / Constantes de gráficos / Propiedades de gráficos
  • www.mql5.com
Propiedades de gráficos - Constantes de gráficos - Constantes, Enumeraciones y Estruturas - Manual de referencia de MQL5 - manual de usuario para el lenguaje del trading algorítmico/automático para MetaTrader 5
 
Reglas del foro y recomendaciones
  • Debe compartir código usando el botón 'Código'.

Reglas del foro y recomendaciones
Reglas del foro y recomendaciones
  • 2017.06.22
  • www.mql5.com
Reglas del foro y recomendaciones Cada idioma cuenta con su respectivo foro, y es por ello que está prohibido comunicarse en otro lenguaje que no s...