Los array media_9_array[1] y media_15_array[1] están desbordando. La cantidad de datos a copiar deben ser 2, el que tendrá índice 0 y el que tendrá índice 1.
//+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ bool entradaCompra() { ArraySetAsSeries(media_15_array, true); CopyBuffer(media_50_per, 0, 0, 2, media_15_array); ArraySetAsSeries(media_9_array, true); ... //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ bool entradaVenta() { ArraySetAsSeries(media_15_array, true); CopyBuffer(media_50_per, 0, 1, 2, media_15_array); ArraySetAsSeries(media_9_array, true);
Saludos...
muchas gracias antonio de igual manera a la hora de agregar el bot al grafico no me redacta entradas ni se agrega las entradas en el grafico
Buenos tardes Manuel, además de los apuntado perfectamente por Antonio he intentado buscar qué es lo que fallaba en tu código y me estaba volviendo loco. Con tu permiso... lo he transcrito, entendiendo que lo que pretende el robot es operar un cruce de medias. Te dejo el código y si te funciona, en principio debería, a seguir picando código.
#include <Trade/Trade.mqh> CTrade trade; input int ma_fast_period = 8; input int ma_slow_period = 50; input double inpSL = 0; input double inpTP = 0; input double inpLots = 0.1; int ma_fast_handler; int ma_slow_handler; double ma_fast[]; double ma_slow[]; datetime ultimaVela; datetime velaActual; MqlRates rates[]; ulong trade_ticket; bool cruceCompra () { return ma_fast[1] < ma_slow[1] && ma_fast [0] > ma_slow[0]; } bool cruceVenta () { return ma_fast[1] > ma_slow[1] && ma_fast [0] < ma_slow[0]; } bool nuevaVela () { velaActual = rates[0].time; if (velaActual != ultimaVela) { ultimaVela = velaActual; return true; } return false; } void cerrar_posiciones () { if (PositionsTotal () > 0) trade.PositionClose(trade_ticket); } int OnInit () { ma_fast_handler = iMA(_Symbol, _Period, ma_fast_period, 0, MODE_EMA, PRICE_CLOSE); ma_slow_handler = iMA(_Symbol, _Period, ma_slow_period, 0, MODE_EMA, PRICE_CLOSE); if (ma_fast_handler == INVALID_HANDLE || ma_slow_handler == INVALID_HANDLE) { Print("[Error] Carga de indicadores"); return INIT_FAILED; } ArraySetAsSeries(ma_fast, true); ArraySetAsSeries(ma_slow, true); return INIT_SUCCEEDED; } void OnDeinit (const int reason) { if (ma_fast_handler != INVALID_HANDLE) IndicatorRelease(ma_fast_handler); if (ma_slow_handler != INVALID_HANDLE) IndicatorRelease(ma_slow_handler); } void OnTick () { CopyBuffer(ma_fast_handler, 0, 1, 2, ma_fast); CopyBuffer(ma_slow_handler, 0, 1, 2, ma_slow); CopyRates(_Symbol, _Period, 0, 2, rates); if (cruceCompra () && nuevaVela ()) { cerrar_posiciones (); trade.Buy(inpLots); trade_ticket = trade.ResultOrder(); } else if (cruceVenta () && nuevaVela ()) { cerrar_posiciones (); trade.Sell(inpLots); trade_ticket = trade.ResultOrder(); } }
Saludos.
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese