Hola gente.¿Puedo saber lo que necesito para hacer el código dibuja la caja y el texto de impresión sólo una vez después de la vela patrón detectado cerrado?
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
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 &tick_volume[],
const long &volume[],
const int &spread[])
{
//---code start
int counted_bars=IndicatorCounted();
//---check for possible errors
if (counted_bars<0) return(-1);
//---last counted bar will be recounted
if (counted_bars>0) counted_bars--;
int limit=Bars-counted_bars;
for(int i = limit-1; i >= 0; i--)
{
if (i >= MathMin(Maxbars-1, rates_total-1-50)) continue;
double high1 = High[i];
double low1 = Low[i];
double open1 = Open[i];
double close1 = Close[i];
double high2 = High[i+1];
double low2 = Low[i+1];
Bar1[i] = EMPTY;
Bar2[i] = EMPTY;
Bar3[i] = EMPTY;
Bar4[i] = EMPTY;
int sigtf=0;
if(_Period==1440 || _Period==43200){sigtf=6;}
else{sigtf=5;}
int sigbox=0;
//double priceopen = iOpen(NULL,0,1);
//double priceclose = iClose(NULL,0,1);
if (high1>high2 && low1<low2 && close1>open1)
{
Bar1[i] = High[i];
Bar2[i] = Low[i];
Bar3[i] = Open[i];
Bar4[i] = Close[i];
sigbox = 1;
Print("test 1");
}
if(sigbox==1)
{
sigbox=0;
DrawBox("Area",i,Time[i],Bar1[i],Time[i]+((_Period*sigtf)*60),Bar2[i],clrGainsboro);
}
else
{
sigbox=0;
}
}
ChartRedraw(0);
//---code end
return(rates_total);
}
void DrawBox(string bxname, int i, datetime time1, double price1, datetime time2, double price2, color bxcolor)
{
string objname = objref+bxname+(string)i;
ObjectDelete(objname);
ObjectCreate(0,objname,OBJ_RECTANGLE,0,time1,price1,time2,price2);
ObjectSet(objname, OBJPROP_COLOR, bxcolor);
ObjectSet(objname, OBJPROP_STYLE, STYLE_SOLID);
ObjectSet(objname, OBJPROP_WIDTH, 0);
ObjectSet(objname, OBJPROP_FILL, true);
ObjectSet(objname, OBJPROP_BACK, false);
ObjectSet(objname, OBJPROP_SELECTABLE, false);
ObjectSet(objname, OBJPROP_HIDDEN, true);
}
#region Using declarations
using System;
using System.ComponentModel;
using System.Diagnostics;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Xml.Serialization;
using NinjaTrader.Cbi;
using NinjaTrader.Data;
using NinjaTrader.Gui.Chart;
#endregion
// This namespace holds all indicators and is required. Do not change it.namespace NinjaTrader.Indicator
{
/// <summary>/// Enter the description of your new custom indicator here/// </summary>
[Description("Enter the description of your new custom indicator here")]
publicclass NPSqueeze : Indicator
{
#region Variables
// Wizard generated variablesprivateint length = 20; // Default setting for Lengthprivatedouble bBDev = 2; // Default setting for BBDevprivatedouble kCDev = 1.5; // Default setting for KCDev// User defined variables (add any user defined variables below)#endregion
/// <summary>/// This method is used to configure the indicator and is called once before any bar data is loaded./// </summary>protectedoverridevoid Initialize()
{
Add(new Plot(Color.FromKnownColor(KnownColor.Orange), PlotStyle.Bar, "Squeeze"));
Overlay = false;
}
/// <summary>/// Called on each bar update event (incoming tick)/// </summary>protectedoverridevoid OnBarUpdate()
{
// Use this method for calculating your indicator values. Assign a value to each// plot below by replacing 'Close[0]' with your own formula.double value = Bollinger(bBDev,length).Upper[0]-KeltnerChannel(kCDev,length).Upper[0] ;
Squeeze.Set(value);
}
#region Properties
[Browsable(false)] // this line prevents the data series from being displayed in the indicator properties dialog, do not remove
[XmlIgnore()] // this line ensures that the indicator can be saved/recovered as part of a chart template, do not removepublic DataSeries Squeeze
{
get { return Values[0]; }
}
[Description("BB and KC average length")]
[GridCategory("Parameters")]
publicint Length
{
get { return length; }
set { length = Math.Max(1, value); }
}
[Description("BB deviations")]
[GridCategory("Parameters")]
publicdouble BBDev
{
get { return bBDev; }
set { bBDev = Math.Max(0, value); }
}
[Description("KC deviation in ATR's")]
[GridCategory("Parameters")]
publicdouble KCDev
{
get { return kCDev; }
set { kCDev = Math.Max(0, value); }
}
#endregion
}
}
#region NinjaScript generated code. Neither change nor remove.
// This namespace holds all indicators and is required. Do not change it.namespace NinjaTrader.Indicator
{
public partial class Indicator : IndicatorBase
{
private NPSqueeze[] cacheNPSqueeze = null;
privatestatic NPSqueeze checkNPSqueeze = new NPSqueeze();
/// <summary>/// Enter the description of your new custom indicator here/// </summary>/// <returns></returns>public NPSqueeze NPSqueeze(double bBDev, double kCDev, int length)
{
return NPSqueeze(Input, bBDev, kCDev, length);
}
/// <summary>/// Enter the description of your new custom indicator here/// </summary>/// <returns></returns>public NPSqueeze NPSqueeze(Data.IDataSeries input, double bBDev, double kCDev, int length)
{
if (cacheNPSqueeze != null)
for (int idx = 0; idx < cacheNPSqueeze.Length; idx++)
if (Math.Abs(cacheNPSqueeze[idx].BBDev - bBDev) <= double.Epsilon && Math.Abs(cacheNPSqueeze[idx].KCDev - kCDev) <= double.Epsilon && cacheNPSqueeze[idx].Length == length && cacheNPSqueeze[idx].EqualsInput(input))
return cacheNPSqueeze[idx];
lock (checkNPSqueeze)
{
checkNPSqueeze.BBDev = bBDev;
bBDev = checkNPSqueeze.BBDev;
checkNPSqueeze.KCDev = kCDev;
kCDev = checkNPSqueeze.KCDev;
checkNPSqueeze.Length = length;
length = checkNPSqueeze.Length;
if (cacheNPSqueeze != null)
for (int idx = 0; idx < cacheNPSqueeze.Length; idx++)
if (Math.Abs(cacheNPSqueeze[idx].BBDev - bBDev) <= double.Epsilon && Math.Abs(cacheNPSqueeze[idx].KCDev - kCDev) <= double.Epsilon && cacheNPSqueeze[idx].Length == length && cacheNPSqueeze[idx].EqualsInput(input))
return cacheNPSqueeze[idx];
NPSqueeze indicator = new NPSqueeze();
indicator.BarsRequired = BarsRequired;
indicator.CalculateOnBarClose = CalculateOnBarClose;
#if NT7
indicator.ForceMaximumBarsLookBack256 = ForceMaximumBarsLookBack256;
indicator.MaximumBarsLookBack = MaximumBarsLookBack;
#endif
indicator.Input = input;
indicator.BBDev = bBDev;
indicator.KCDev = kCDev;
indicator.Length = length;
Indicators.Add(indicator);
indicator.SetUp();
NPSqueeze[] tmp = new NPSqueeze[cacheNPSqueeze == null ? 1 : cacheNPSqueeze.Length + 1];
if (cacheNPSqueeze != null)
cacheNPSqueeze.CopyTo(tmp, 0);
tmp[tmp.Length - 1] = indicator;
cacheNPSqueeze = tmp;
return indicator;
}
}
}
}
// This namespace holds all market analyzer column definitions and is required. Do not change it.namespace NinjaTrader.MarketAnalyzer
{
public partial class Column : ColumnBase
{
/// <summary>/// Enter the description of your new custom indicator here/// </summary>/// <returns></returns>
[Gui.Design.WizardCondition("Indicator")]
public Indicator.NPSqueeze NPSqueeze(double bBDev, double kCDev, int length)
{
return _indicator.NPSqueeze(Input, bBDev, kCDev, length);
}
/// <summary>/// Enter the description of your new custom indicator here/// </summary>/// <returns></returns>public Indicator.NPSqueeze NPSqueeze(Data.IDataSeries input, double bBDev, double kCDev, int length)
{
return _indicator.NPSqueeze(input, bBDev, kCDev, length);
}
}
}
// This namespace holds all strategies and is required. Do not change it.namespace NinjaTrader.Strategy
{
public partial class Strategy : StrategyBase
{
/// <summary>/// Enter the description of your new custom indicator here/// </summary>/// <returns></returns>
[Gui.Design.WizardCondition("Indicator")]
public Indicator.NPSqueeze NPSqueeze(double bBDev, double kCDev, int length)
{
return _indicator.NPSqueeze(Input, bBDev, kCDev, length);
}
/// <summary>/// Enter the description of your new custom indicator here/// </summary>/// <returns></returns>public Indicator.NPSqueeze NPSqueeze(Data.IDataSeries input, double bBDev, double kCDev, int length)
{
if (InInitialize && input == null)
throw new ArgumentException("You only can access an indicator with the default input/bar series from within the 'Initialize()' method");
return _indicator.NPSqueeze(input, bBDev, kCDev, length);
}
}
}
Por favor, necesito ayuda para convertir un indicador Ninja en MQL4, MT4.
He desarrollado un código MATLAB para la predicción del precio de los pares de divisas para el día siguiente. Ahora, necesito un experto en mql4 que pueda leer un archivo .csv: contiene la fecha, la hora, el símbolo y la señal (buy=1, sell=-1 y 0=nothing) con SL,TP y LOTS constantes.
¡Hola chicos! Tengo una pregunta y necesito ayuda por favor. He hecho un EA basado en varios indicadores de entrada/salida/TP/SL etc. Mi problema es que está abriendo demasiadas operaciones. Lo que quiero decir es : Tengo un indicador de cruce de 2 líneas como una de las condiciones para abrir una operación. Si el indicador cruza hacia arriba + otra condición abre una operación de compra, si cruza hacia abajo + otra condición abre una operación de venta. Así que supongamos que el indicador cruza hacia arriba, todas las demás condiciones se cumplen, el comercio se abre. Después de algunas velas el TP es alcanzado y la operación es cerrada. Pero el indicador no ha cambiado de dirección todavía, y entonces se abre otra operación. Esto es lo que quiero detener en ciertas condiciones. Lo que quiero decir es que, por ejemplo, una tendencia se está formando, todos mis indicadores están de acuerdo para la apertura de un comercio, el comercio se abre, y el TP es golpeado después de 4-5 velas. Y se abre otra orden, pero tal vez la tendencia está casi terminada, y estoy entrando cerca de la parte inferior. Esto es lo que quiero cambiar. Para crear una condición de tal manera que si mi indicador volteado [7] velas atrás, no para abrir un comercio.
Hola, necesito añadir un buffer a uno de mis indicadores y rellenarlo con un SMA (como alguien me sugirió que hiciera para un problema que necesitaba solucionar). El problema es que no estoy muy seguro de cómo hacer esto podría alguien ayudar por favor
Para iniciar sesión y usar el sitio web MQL5.com es necesario permitir el uso de Сookies.
Por favor, active este ajuste en su navegador, de lo contrario, no podrá iniciar sesión.
Ha iniciado sesión. La autenticación de dos factores se ha desactivado. Vuelva a configurarla y escanee un nuevo código QR, o continúe con la autenticación de dos factores desactivada.
Hola gente.¿Puedo saber lo que necesito para hacer el código dibuja la caja y el texto de impresión sólo una vez después de la vela patrón detectado cerrado?
//+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ 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 &tick_volume[], const long &volume[], const int &spread[]) { //---code start int counted_bars=IndicatorCounted(); //---check for possible errors if (counted_bars<0) return(-1); //---last counted bar will be recounted if (counted_bars>0) counted_bars--; int limit=Bars-counted_bars; for(int i = limit-1; i >= 0; i--) { if (i >= MathMin(Maxbars-1, rates_total-1-50)) continue; double high1 = High[i]; double low1 = Low[i]; double open1 = Open[i]; double close1 = Close[i]; double high2 = High[i+1]; double low2 = Low[i+1]; Bar1[i] = EMPTY; Bar2[i] = EMPTY; Bar3[i] = EMPTY; Bar4[i] = EMPTY; int sigtf=0; if(_Period==1440 || _Period==43200){sigtf=6;} else{sigtf=5;} int sigbox=0; //double priceopen = iOpen(NULL,0,1); //double priceclose = iClose(NULL,0,1); if (high1>high2 && low1<low2 && close1>open1) { Bar1[i] = High[i]; Bar2[i] = Low[i]; Bar3[i] = Open[i]; Bar4[i] = Close[i]; sigbox = 1; Print("test 1"); } if(sigbox==1) { sigbox=0; DrawBox("Area",i,Time[i],Bar1[i],Time[i]+((_Period*sigtf)*60),Bar2[i],clrGainsboro); } else { sigbox=0; } } ChartRedraw(0); //---code end return(rates_total); } void DrawBox(string bxname, int i, datetime time1, double price1, datetime time2, double price2, color bxcolor) { string objname = objref+bxname+(string)i; ObjectDelete(objname); ObjectCreate(0,objname,OBJ_RECTANGLE,0,time1,price1,time2,price2); ObjectSet(objname, OBJPROP_COLOR, bxcolor); ObjectSet(objname, OBJPROP_STYLE, STYLE_SOLID); ObjectSet(objname, OBJPROP_WIDTH, 0); ObjectSet(objname, OBJPROP_FILL, true); ObjectSet(objname, OBJPROP_BACK, false); ObjectSet(objname, OBJPROP_SELECTABLE, false); ObjectSet(objname, OBJPROP_HIDDEN, true); }cómo hacer una línea horizontal mq4 con su propio valor. por favor
Por favor, necesito ayuda para convertir un indicador Ninja en MQL4, MT4.
Rgds.
ok
Buenos días codificadores,
He desarrollado un código MATLAB para la predicción del precio de los pares de divisas para el día siguiente. Ahora, necesito un experto en mql4 que pueda leer un archivo .csv: contiene la fecha, la hora, el símbolo y la señal (buy=1, sell=-1 y 0=nothing) con SL,TP y LOTS constantes.
Se agradecerá que me lo proporcionen.
Gracias Maryam.
No hagas un doble post. Ya tenías otro hilo abierto.
Normas generales y buenas prácticas del Foro. - General- Foro de programación MQL5 (2017)