Zum Inhalt springen
View in the app

A better way to browse. Learn more.

#T/N/X/T

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Wieso funktioniert die Parameterübergabe für den Indikator nicht ?

Geschrieben
Ohne Lag? *neugierig guck*

 

bitte :swepimp:

 

DStochMod.zip

Edit: die Version ist die korrekte, siehe Post #15

DoubleStochastiks.png

 

btw. falls ihr zufällig herausfinden solltet, warum sich der Indikator nicht von den Parametern her verändern läßt, wäre das ne feine Sache. Ich kann den nur in den vorgegebenen Einstellungen "fahren". Da muß ein Bug drin sein, das sich die Änderungen bei den Werten nicht "übertragen".

 

Edit: Problem gelöst, siehe Post #15

Bearbeitet von ronner
Attachments hochgeladen aufgrund Themencopy

Featured Replies

Geschrieben

Danke ! :smile:

 

btw. falls ihr zufällig herausfinden solltet, warum sich der Indikator nicht von den Parametern her verändern läßt, wäre das ne feine Sache. Ich kann den nur in den vorgegebenen Einstellungen "fahren". Da muß ein Bug drin sein, das sich die Änderungen bei den Werten nicht "übertragen" :hmmmm:

Kannst Du mal einen Indikator posten, wo die Parameterübergabe funktioniert, damit ich nen Vergleich habe, wie es normalerweise abläuft. Seh das NT-Zeug ja heute zum ersten Mal. C# zum Glück nicht.

Geschrieben
  • Autor
Kannst Du mal einen Indikator posten, wo die Parameterübergabe funktioniert,

 

das ist die normale DoubleStochastik, bei der funktionierts. Bitte nicht zu sehr drin versteifen, falls der Fehler nicht offensichtlich ist :blush:

 

DoubleStochMod.txt

 

btw. ich hab oben noch ein Bild der beiden eingefügt.

Geschrieben
btw. falls ihr zufällig herausfinden solltet, warum sich der Indikator nicht von den Parametern her verändern läßt, wäre das ne feine Sache. Ich kann den nur in den vorgegebenen Einstellungen "fahren". Da muß ein Bug drin sein, das sich die Änderungen bei den Werten nicht "übertragen".

 

Bei mir kann ich die Parameter ändern. Einzige Änderungen, die ich vorgenommen habe:

 

- Name der Datei und der Klasse geändert

- Standard-Imports eingefügt, damit ich kompilieren kann

- StochasticsFast(Input, 14, dSTLen) anstatt DoubleStochastic verwendet, da ich letztere nicht auf dem Rechner habe

 

Es könnte eigentlich nur an der DoubleStochastik liegen. Hast Du mal ins OutputWindow geschaut oder ins Log,

ob da irgendwelche Fehler hochkommen? Meistens ändern sich die Werte dann nicht, wenn ne NullPointerException

oder ähnliches auftritt. Das Trace-File unter EigeneDateien\..\NinjaTrader\trace ist auch immer sehr hilfreich.

Geschrieben
  • Autor
Einzige Änderungen, die ich vorgenommen habe:

 

ähm, bitte nachsichtig sein - aber ich bin doch nur Endanwender (Krümel mag die besonders :swepimp: ),

 

Kannst Du eventuell ein txt-File der Stochastik hochladen, dann kann ich mir mal im Vergleich den Code anschauen?

Geschrieben

Klar. Hier ist das komplette cs-File. Einfach in den NinjaTrader-Indikatoren-Ordner legen, evtl. nochmal

kompilieren und testen ...

 

RonnerDouble.txt

 

Da ich keine *.cs-Dateien hochladen darf ist es ein *.txt -File geworden, also bitte noch umbenennen.

 

Gruß

DT

Geschrieben
  • Autor

funzt, vielen Dank schon mal :wink:

 

Der ist zwar anders wie der normale (da andere Stochastik verwendet), aber sehr interessant :swepimp:

 

Mal sehen, was sich damit über die Parameter herausholen läßt.

 

@all,

 

-umbennen in .cs

-verschieben in C:\Dokumente und Einstellungen-->Eigene Dateien-->Ninjatrader-->bin-->custom-->indicator

-über "Edit Ninjascript" öffnen

-per F5 kompilieren, speichern

Geschrieben
Der ist zwar anders wie der normale (da andere Stochastik verwendet), aber sehr interessant :swepimp:

Kannst ja nochmal ne Kopie machen und mit der testen, ob man die DoubleStochastics nicht doch irgendwie benutzen kann. Probier doch das mal aus, Ronner ! :wink: Den Rest der Datei einfach identisch lassen. Zur Not häng an den Class-Name einfach ne Nummer ran, falls NT das sonst nicht mag.

 

Ich nehme mal an, Darthtrader meinte hier:

protected override void OnBarUpdate()

{

if (CurrentBar>2)

{

double aa = Math.Exp(((-1*Math.Sqrt(2))*Math.PI) / priceactionFilter);

double bb = 2*aa*Math.Cos((Math.Sqrt(2)*180) / priceactionFilter);

double CB = bb;

double CC = -aa*aa;

double CA = 1 - CB - CC;

 

Zerolag.Set((CA*DoubleStochastics(Input,dSTLen)[0]) + (CB*DoubleStochastics(Input,dSTLen)[1]) + (CC*DoubleStochastics(Input,dSTLen)[2]));

 

if (CurrentBar>3)

{

if (Falling(Zerolag))

{

if (bStochRising)

{

DStoch_OverBot.Set(Zerolag[0]);

}

DStoch_OverSold.Set(Zerolag[0]);

bStochRising = false;

}

else

{

if (!bStochRising)

{

DStoch_OverSold.Set(Zerolag[0]);

}

DStoch_OverBot.Set(Zerolag[0]);

bStochRising = true;

}

}

}

}

 

?

 

 

 

Wenn es tatsächlich an der Funktion DoubleStochastics lag, könnte man ja mal schaun, worin der Unterschied zwischen beiden Stochastik-Funktionen besteht. Eventuell kriegt man es ja dann mit der DoubleStochastic doch zum Laufen oder muss sich diese nochmal modifizieren.

 

Kannst Du die DoubleStoch auch mal bitte posten, Ronner und die Funktion für die StochFast.

Geschrieben
  • Autor
Kannst Du die DoubleStoch auch mal bitte posten, Ronner

 

DoubleStochasticsMod.txt

 

*wieder umbenennen in .cs*

 

und die Funktion für die StochFast.

 

meinst Du das?

 

protected override void Initialize()

{

Add(new Plot(Color.Cyan, PlotStyle.Line, "DStoch_OverBot"));

Add(new Plot(Color.Magenta, PlotStyle.Line, "DStoch_OverSold"));

Add(new Line(Color.Blue, 90, "Upper"));

Add(new Line(Color.Blue, 10, "Lower"));

Lines[0].Pen.DashStyle = DashStyle.Dash;

Lines[1].Pen.DashStyle = DashStyle.Dash;

CalculateOnBarClose = false;

Overlay = false;

PriceTypeSupported = false;

 

Zerolag = new DataSeries(this);

}

 

///

/// Called on each bar update event (incoming tick)

///

protected override void OnBarUpdate()

{

if (CurrentBar>2)

{

double aa = Math.Exp(((-1*Math.Sqrt(2))*Math.PI) / priceactionFilter);

double bb = 2*aa*Math.Cos((Math.Sqrt(2)*180) / priceactionFilter);

double CB = bb;

double CC = -aa*aa;

double CA = 1 - CB - CC;

 

Zerolag.Set((CA*StochasticsFast(Input, 14, dSTLen)[0]) + (CB*StochasticsFast(Input, 14, dSTLen)[1]) + (CC*StochasticsFast(Input,14,dSTLen)[2]));

 

if (CurrentBar>3)

{

if (Falling(Zerolag))

{

if (bStochRising)

{

DStoch_OverBot.Set(Zerolag[0]);

}

DStoch_OverSold.Set(Zerolag[0]);

bStochRising = false;

}

else

{

if (!bStochRising)

{

DStoch_OverSold.Set(Zerolag[0]);

}

DStoch_OverBot.Set(Zerolag[0]);

bStochRising = true;

Geschrieben
  • Autor

Krümel, bevor ich jetzt Blödsinn hochgeladen habe frag ich lieber nochmal,

 

welche DoubleStoch wolltest Du ?

 

Die ZeroLag die nicht geht

oder

die normale allgemeine DoubleStoch?

Geschrieben
meinst Du das?

Nee, meinte ich nicht. :swepimp: Sondern die Funktionen (falls man den Code bei NT hat, kenn mich da nicht aus) DoubleStochastics und StochasticFast (also, was im Code aufgerufen wird. Irgendwo in dem NT-Zeug muss es ja was geben, was genauso heißt).

 

Na ja, hab aber was anderes gefunden: http://www.ninjatrader-support2.com/vb/showthread.php?t=2667, in Beitrag 10 scheint der User, der Dein Problem auch hatte, aber ne Lösung gefunden zu haben. Offenbar gab's da ne Modifikation für den Code.

 

Du arbeitest wahrscheinlich noch mit der verbuggten Double-Stochastic-Variante, bei der sich die Parameter nicht aktualisieren, was in Indikatoren, die den Code nutzen zu den gleichen Effekten führt. Code für Double Stochastic neu runterladen und nochmal neu kompilieren und testen. :wink:

 

 

Danke, Darthtrader, für Deine Hilfe. :wub: Es liegt vermutlich tatsächlich an dem Bug in der DoubleStochastic. :wub:

Geschrieben
  • Autor

Altaaa :wink:

 

Den Thread kannte ich, hab aber dummerweise alle dort geposteten Versionen bis auf die richtige im Verzeichnis drin gehabt.

 

Jetzt hab ich mal alle DoubleStoch-Versionen die ich drin hatte, gelöscht. Und dann nur die eine aus dem Thread genommen:

 

DStochMod.zip

über File --> Utilities --> Import Ninjascript einfügen (das ist die normale Vorgehensweise zum Einfügen der Indikatoren)

 

Scheinbar haben sich vorher alle DoubleStochs gegenseitig behindert bzw. waren es sowieso die falschen. Die Version oben hatte ich vorher aber nicht drin.

 

Die nennt sich zwar nicht ZeroLag, kommt aber von der Optik her hin und reagiert auch schneller wie die normale DoubleStoch-Version die ich vorher neben der ZeroLag noch drin hatte.

 

Einstellen kann man die auch, nur die Farben sind halt anders.

 

Blöd ist halt immer, wenn die Namen recht ähnlich vergeben werden und niemand im ersten Post drauf hinweist das die Buggyfreie-Version in einem anderen Beitrag zu finden ist und man alle anderen löschen soll obwohl sie eigentlich von der Art her unterschiedlich sind (ZeroLag/normal).

Geschrieben
  • Autor
Willst Du mir damit sagen, dass es jetzt funktioniert ? :wink:

 

jep, man muß nur die richtige Version haben :swepimp:

 

Ich hätte nicht gedacht, das die ZeroLag-Version falsch war, die normale Version falsch war - und die einzigste aus dem Thread die ich nicht hatte (von dreien) war die einzig korrekte :wub:

Geschrieben
jep, man muß nur die richtige Version haben :swepimp:

 

Ich hätte nicht gedacht, das die ZeroLag-Version falsch war, die normale Version falsch war - und die einzigste aus dem Thread die ich nicht hatte (von dreien) war die einzig korrekte :wink:

 

So kann es gehen. Danke aber für die Aufklärung und danke an Krümel für den Link zu Forum.

  • 4 Monate später...
Geschrieben

Sorry für die blöde Frage:

 

Der Indikator DoubleSTochastic aus #1 hat so eine schönen Wert K (in dem Bild das Ding mit der roten Zahl rechts).

 

Wie kann ich aus einer Strategie heraus auf dieses K zugreifen?

 

Ich häng den Code des Indikators einfach mal hier ran (Details klicken).

Was muss ich in der Strategie reinschreiben, um mit K arbeiten zu können? Ich kriege das einfach nicht hin.

 

 

bullet_go.png

// 
// Copyright (C) 2007, NinjaTrader LLC <www.ninjatrader.com>.
// NinjaTrader reserves the right to modify or overwrite this NinjaScript component with each release.
//
#region Using declarations
using System;
using System.Diagnostics;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.ComponentModel;
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>
/// 
/// </summary>
[Description("")]
[Gui.Design.DisplayName("DoubleStochastics")]
public class DoubleStochastics : Indicator
{
	#region Variables
	private int period = 10;
	private int emaperiod = 2;
	private DataSeries p1;
	private DataSeries p2;
	private DataSeries p3;
	#endregion

	/// <summary>
	/// This method is used to configure the indicator and is called once before any bar data is loaded.
	/// </summary>
	protected override void Initialize()
	{
		Add(new Plot(Color.Red, PlotStyle.Line, "K"));
		Add(new Line(Color.Blue, 90, "Upper"));
		Add(new Line(Color.Blue, 10, "Lower"));
		Lines[0].Pen.DashStyle = DashStyle.Dash;
		Lines[1].Pen.DashStyle = DashStyle.Dash;
		
		CalculateOnBarClose	= false;
		Overlay				= false;
		PriceTypeSupported	= false;
		p1 = new DataSeries(this);
		p2 = new DataSeries(this);
		p3 = new DataSeries(this);
	}

	/// <summary>
	/// Called on each bar update event (incoming tick)
	/// </summary>
	protected override void OnBarUpdate()
	{
		double r = MAX(High, Period)[0] - MIN(Low, Period)[0];
		p1.Set(((Close[0] - MIN(Low, Period)[0]) / (r == 0 ? 1 : r)) * 100);
		p2.Set(EMA(p1, EMAPeriod)[0]);
		
		double s = MAX(p2, Period)[0] - MIN(p2, Period)[0];
		p3.Set(((p2[0] - MIN(p2, Period)[0]) / (s == 0 ? 1 : s)) * 100);
		K.Set(EMA(p3, EMAPeriod)[0]);
	}

	#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 remove
	public DataSeries K
	{
		get { return Values[0]; }
	}

	[Description("")]
	[Category("Parameters")]
	public int Period
	{
		get { return period; }
		set { period = Math.Max(1, value); }
	}
	[Description("")]
	[Category("Parameters")]
	 public int EMAPeriod
	{
		get { return emaperiod; }
		set { emaperiod = Math.Max(1, 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 DoubleStochastics[] cacheDoubleStochastics = null;

	private static DoubleStochastics checkDoubleStochastics = new DoubleStochastics();

	/// <summary>
	/// 
	/// </summary>
	/// <returns></returns>
	public DoubleStochastics DoubleStochastics(int eMAPeriod, int period)
	{
		return DoubleStochastics(Input, eMAPeriod, period);
	}

	/// <summary>
	/// 
	/// </summary>
	/// <returns></returns>
	public DoubleStochastics DoubleStochastics(Data.IDataSeries input, int eMAPeriod, int period)
	{
		checkDoubleStochastics.EMAPeriod = eMAPeriod;
		eMAPeriod = checkDoubleStochastics.EMAPeriod;
		checkDoubleStochastics.Period = period;
		period = checkDoubleStochastics.Period;

		if (cacheDoubleStochastics != null)
			for (int idx = 0; idx < cacheDoubleStochastics.Length; idx++)
				if (cacheDoubleStochastics[idx].EMAPeriod == eMAPeriod && cacheDoubleStochastics[idx].Period == period && cacheDoubleStochastics[idx].EqualsInput(input))
					return cacheDoubleStochastics[idx];

		DoubleStochastics indicator = new DoubleStochastics();
		indicator.SetUp();
		indicator.CalculateOnBarClose = CalculateOnBarClose;
		indicator.Input = input;
		indicator.EMAPeriod = eMAPeriod;
		indicator.Period = period;

		DoubleStochastics[] tmp = new DoubleStochastics[cacheDoubleStochastics == null ? 1 : cacheDoubleStochastics.Length + 1];
		if (cacheDoubleStochastics != null)
			cacheDoubleStochastics.CopyTo(tmp, 0);
		tmp[tmp.Length - 1] = indicator;
		cacheDoubleStochastics = tmp;
		Indicators.Add(indicator);

		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>
	/// 
	/// </summary>
	/// <returns></returns>
	[Gui.Design.WizardCondition("Indicator")]
	public Indicator.DoubleStochastics DoubleStochastics(int eMAPeriod, int period)
	{
		return _indicator.DoubleStochastics(Input, eMAPeriod, period);
	}

	/// <summary>
	/// 
	/// </summary>
	/// <returns></returns>
	public Indicator.DoubleStochastics DoubleStochastics(Data.IDataSeries input, int eMAPeriod, int period)
	{
		return _indicator.DoubleStochastics(input, eMAPeriod, period);
	}

}
}

// This namespace holds all strategies and is required. Do not change it.
namespace NinjaTrader.Strategy
{
public partial class Strategy : StrategyBase
{
	/// <summary>
	/// 
	/// </summary>
	/// <returns></returns>
	[Gui.Design.WizardCondition("Indicator")]
	public Indicator.DoubleStochastics DoubleStochastics(int eMAPeriod, int period)
	{
		return _indicator.DoubleStochastics(Input, eMAPeriod, period);
	}

	/// <summary>
	/// 
	/// </summary>
	/// <returns></returns>
	public Indicator.DoubleStochastics DoubleStochastics(Data.IDataSeries input, int eMAPeriod, int period)
	{
		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.DoubleStochastics(input, eMAPeriod, period);
	}

}
}
#endregion

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

Account

Navigation

Suche

Suche

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.