Hallo Leute,kann ich wissen, was ich brauche, um den Code zu machen zeichnet Box und Text drucken nur EINMAL nach der Kerze Muster erkannt geschlossen?
//+------------------------------------------------------------------+
//| 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);
}
}
}
Bitte ich brauche Hilfe bei der Umwandlung eines Ninja Indikators in MQL4, MT4.
Ich habe einen MATLAB-Code für die Vorhersage von Forex-Paarpreisen für den nächsten Tag entwickelt. Jetzt brauche ich einen Experten für mql4, der eine .csv-Datei lesen kann: Sie enthält Datum, Uhrzeit, Symbol und Signal (buy=1, sell=-1 und 0=nichts) mit konstantem SL, TP und LOTS.
Ich wäre Ihnen dankbar, wenn Sie mir diese Datei zur Verfügung stellen könnten.
Hallo Leute! Ich habe eine Frage und brauche bitte etwas Hilfe. Ich habe einen EA gemacht, der auf mehreren Indikatoren für Einstieg/Ausstieg/TP/SL usw. basiert. Mein Problem ist, dass er zu viele Trades eröffnet. Was ich meine ist: Ich habe eine 2 Linien kreuzen Indikator als eine der Bedingungen für die Eröffnung eines Handels. Wenn der Indikator nach oben kreuzt, wird ein Kaufgeschäft eröffnet, wenn er nach unten kreuzt, wird ein Verkauf eröffnet. Also nehmen wir an, dass der Indikator nach oben kreuzt, alle anderen Bedingungen erfüllt sind, wird der Handel eröffnet. Nach ein paar Kerzen ist TP getroffen und der Handel wird geschlossen. Aber der Indikator hat nicht in die andere Richtung noch, und dann ein anderes Geschäft eröffnet wird. Dies ist, was ich will, um in bestimmten Bedingungen zu stoppen. Wenn der Indikator zum Beispiel vor 7 Kerzen umgeschlagen ist, soll kein Handel eröffnet werden. Was ich meine ist, dass sich zum Beispiel ein Trend bildet, alle meine Indikatoren für die Eröffnung eines Handels übereinstimmen, der Handel eröffnet wird und der TP nach 4-5 Kerzen erreicht wird. Und eine weitere Order wird eröffnet, aber vielleicht ist der Trend schon fast vorbei, und ich steige in der Nähe des Tiefpunkts ein. Das möchte ich ändern. Um eine Bedingung in einer solchen Weise, dass, wenn mein Indikator flipped [7] Kerzen vor, nicht um einen Handel zu öffnen.
Hallo, ich brauche, um einen Puffer zu einem meiner Indikatoren hinzufügen und füllen Sie es mit einem SMA (wie jemand vorschlagen, ich sollte für ein Problem, das ich brauchte, um zu beheben). Das Problem ist, ich bin nicht allzu sicher, wie dies zu tun könnte jemand bitte helfen
Hallo Leute,kann ich wissen, was ich brauche, um den Code zu machen zeichnet Box und Text drucken nur EINMAL nach der Kerze Muster erkannt geschlossen?
//+------------------------------------------------------------------+ //| 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); }wie man eine horizontale mq4-Linie mit eigenem Wert erstellt. bitte
Bitte ich brauche Hilfe bei der Umwandlung eines Ninja Indikators in MQL4, MT4.
Rgds.
ok
Guten Tag Programmierer,
Ich habe einen MATLAB-Code für die Vorhersage von Forex-Paarpreisen für den nächsten Tag entwickelt. Jetzt brauche ich einen Experten für mql4, der eine .csv-Datei lesen kann: Sie enthält Datum, Uhrzeit, Symbol und Signal (buy=1, sell=-1 und 0=nichts) mit konstantem SL, TP und LOTS.
Ich wäre Ihnen dankbar, wenn Sie mir diese Datei zur Verfügung stellen könnten.
Vielen Dank Maryam.
Keine Doppelposts! Sie hatten bereits einen anderen Thread geöffnet.
Allgemeine Regeln und Best Practices des Forums. -Allgemein - MQL5 Programmierforum (2017)