Olá pessoal.Posso saber o que preciso para fazer o código desenhar caixa e imprimir texto somente UMA VEZ depois que o padrão da vela detectado for fechado?
//+------------------------------------------------------------------+
//| 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, preciso de ajuda na conversão de um indicador Ninja em MQL4, MT4.
Desenvolvi um código MATLAB para a previsão do preço dos pares de moedas para o dia seguinte. Agora, preciso de um especialista em mql4 que possa ler um arquivo .csv: contém data, hora, símbolo e sinal (buy=1, sell=-1 e 0=nada) com SL,TP e LOTS constantes.
Olá, pessoal! Tenho uma pergunta e preciso de alguma ajuda, por favor. Fiz um EA baseado em vários indicadores de entrada/saída/TP/SL etc. Meu problema é que ele está abrindo muitos negócios. O que eu quero dizer é que : Tenho um indicador cruzado de 2 linhas como uma das condições para a abertura de uma negociação. Se cruzar para cima + outra condição abrir comércio de compra, se cruzar para baixo + outra condição abrir comércio de venda. Assim, suponhamos que a travessia do indicador para cima, todas as outras condições são cumpridas, o comércio é aberto. Depois de poucas velas, o TP é atingido e o comércio é fechado. Mas o indicador ainda não virou para o outro lado, e então outra troca é aberta. Isto é o que eu quero parar em certas condições. Por exemplo, se o indicador virar 7 velas atrás, não abrir nenhuma troca. O que quero dizer é que, por exemplo, uma tendência está se formando, todos os meus indicadores estão concordando em abrir uma troca, a troca é aberta, e TP é atingido após 4-5 velas. E outra ordem é aberta, mas talvez a tendência esteja quase terminando, e eu estou entrando perto do fundo. Isto eu quero mudar. Criar uma condição de tal forma que, se meu indicador virar [7] velas atrás, não abrir uma troca.
Olá, preciso adicionar um buffer a um dos meus indicadores e preenchê-lo com um SMA (como alguém sugere que eu deveria fazer para um problema que eu precisava consertar). O problema é que não tenho muita certeza de como fazer isso, alguém poderia me ajudar
Para login e uso do site MQL5.com, você deve ativar o uso de cookies.
Ative esta opção no seu navegador, caso contrário você não poderá fazer login.
Você entrou na conta. A autenticação de dois fatores foi desativada. Configure-a novamente e escaneie um novo código QR ou continue com a autenticação de dois fatores desativada.
Olá pessoal.Posso saber o que preciso para fazer o código desenhar caixa e imprimir texto somente UMA VEZ depois que o padrão da vela detectado for fechado?
//+------------------------------------------------------------------+ //| 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); }como fazer uma linha horizontal de mq4 com seu próprio valor.
Por favor, preciso de ajuda na conversão de um indicador Ninja em MQL4, MT4.
Rgds.
ok
Codificadores de bons dias,
Desenvolvi um código MATLAB para a previsão do preço dos pares de moedas para o dia seguinte. Agora, preciso de um especialista em mql4 que possa ler um arquivo .csv: contém data, hora, símbolo e sinal (buy=1, sell=-1 e 0=nada) com SL,TP e LOTS constantes.
Serei apreciado se o fornecerem para mim.
Obrigado Maryam.
Não duplique o correio! Você já tinha outro fio aberto.
Regras gerais e melhores práticas do Fórum. -Geral - Fórum de programação MQL5 (2017)