Eigenen Würfel erstellen

Ähnlich wie beim Erstellen eines Würfels aus einem Diagramm können Sie einen eigenen Würfel auf Basis von F#-Code erstellen. Ein solcher Würfel ist funktionaler als ein Würfel aus einem Diagramm.

Um einen Würfel aus Code zu erstellen, muss er im Ordner Eigene Elemente erstellt werden:

Designer_Source_Code_Elem_00

Im folgenden Beispiel erbt der Würfel von der Klasse DiagramExternalElement und sieht so aus:

/// <summary>
/// Beispiel-Diagrammelement, das die Verwendung von Eingabe- und Ausgabesockets demonstriert.
///
/// Weitere Details:
/// https://doc.stocksharp.com/topics/designer/strategies/using_code/fsharp/creating_your_own_cube.html
/// </summary>
type EmptyDiagramElement() as this =
	inherit DiagramExternalElement()

	// Beispieleigenschaft, die zeigt, wie Parameter erstellt werden
	let minValueParam =
		this.AddParam<int>("MinValue", 10)
			.SetBasic(true)  // Parameter im Basismodus sichtbar machen
			.SetDisplay("Parameter", "Mindestwert", "Beschreibung des Mindestwert-Parameter", 10)

	// Ausgabesockets sind Ereignisse, die mit dem Attribut DiagramExternal markiert sind
	let output1Event = new Event<Unit>()
	let output2Event = new Event<Unit>()

	[<CLIEvent>]
	[<DiagramExternal>]
	member this.Output1 = output1Event.Publish

	[<CLIEvent>]
	[<DiagramExternal>]
	member this.Output2 = output2Event.Publish

	// Entfernen Sie die Auskommentierung der folgenden Eigenschaft, wenn die Process-Methode
	// jedes Mal aufgerufen werden soll, wenn ein neues Argument empfangen wird
	// (es muss nicht gewartet werden, bis alle Eingabeargumente empfangen wurden).
	//
	// this.WaitAllInput überschreiben
	//     with get () = false

	// Eingabesockets sind Methodenparameter, die mit dem Attribut DiagramExternal markiert sind

	[<DiagramExternal>]
	member this.Process(candle: CandleMessage, diff: Unit) =
		let res = candle.ClosePrice + diff

		if diff >= minValueParam.Value then
			// Erstes Ausgabeereignis auslösen
			output1Event.Trigger(res)
		else
			// Zweites Ausgabeereignis auslösen
			output2Event.Trigger(res)

	override this.Start() =
		base.Start()
		// Bei Bedarf Logik vor dem Start hinzufügen

	override this.Stop() =
		base.Stop()
		// Bei Bedarf Logik nach dem Stop hinzufügen

	override this.Reset() =
		base.Reset()
		// Bei Bedarf Logik zum Zurücksetzen des internen Zustands hinzufügen

In diesem Code hat der Würfel zwei eingehende und zwei ausgehende Sockets. Eingehende Sockets werden definiert, indem das Attribut DiagramExternalAttribute auf die Methode angewendet wird:

[<DiagramExternal>]
member this.Process(candle: CandleMessage, diff: Unit) =

Ausgehende Sockets werden definiert, indem das Attribut auf ein Ereignis angewendet wird. Im Beispiel des Würfels gibt es zwei solche Ereignisse:

let output1Event = new Event<Unit>()
let output2Event = new Event<Unit>()

[<CLIEvent>]
[<DiagramExternal>]
member this.Output1 = output1Event.Publish

[<CLIEvent>]
[<DiagramExternal>]
member this.Output2 = output2Event.Publish

Daher gibt es auch zwei ausgehende Sockets.

Zusätzlich wird gezeigt, wie eine Eigenschaft für den Würfel erstellt wird:

let minValueParam =
	this.AddParam<int>("MinValue", 10)
		.SetBasic(true)  // Parameter im Basismodus sichtbar machen
		.SetDisplay("Parameter", "Mindestwert", "Beschreibung des Mindestwert-Parameter", 10)

Bei Verwendung der Klasse DiagramElementParam wird automatisch der Ansatz zum Speichern und Wiederherstellen von Einstellungen verwendet.

Die Eigenschaft Mindestwert ist als basic markiert und wird im Modus Grundeigenschaften sichtbar sein.

Die auskommentierte Eigenschaft WaitAllInput ist für den Zeitpunkt des Methodenaufrufs mit eingehenden Sockets zuständig:

// this.WaitAllInput überschreiben
//     with get () = false

Wenn die Auskommentierung entfernt wird, wird die Methode Prozess immer aufgerufen, sobald mindestens ein Wert eintrifft (im Beispiel ist dies entweder eine Kerze oder ein numerischer Wert).

Um den resultierenden Würfel zum Diagramm hinzuzufügen, wählen Sie den erstellten Würfel in der Palette im Abschnitt Eigene Elemente aus:

Designer_Source_Code_Elem_01

Warning

Würfel aus F#-Code können nicht in Strategien verwendet werden, die in F#-Code erstellt wurden. Sie können nur in Strategien verwendet werden, die aus Würfeln erstellt wurden.

Siehe auch

Indikator erstellen