Eigenen Würfel erstellen
Ähnlich wie beim Erstellen eines Würfels aus einem Diagramm können Sie einen eigenen Würfel auf Basis von C#-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:

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.
///
/// https://doc.stocksharp.com/topics/Designer_Combine_Source_code_and_standard_elements.html
/// </summary>
public class EmptyDiagramElement : DiagramExternalElement
{
private readonly DiagramElementParam<int> _minValue;
public EmptyDiagramElement()
{
// Beispiel-Eigenschaft, um zu zeigen, wie Parameter erstellt werden.
_minValue = AddParam("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.
[DiagramExternal]
public event Action<Unit> Output1;
[DiagramExternal]
public event Action<Unit> Output2;
// Eingabesockets sind Methodenparameter, die mit dem Attribut DiagramExternal markiert sind.
// Auskommentierung entfernen, damit die Process-Methode jedes Mal aufgerufen wird,
// wenn ein neues Argument empfangen wurde.
// Es muss nicht gewartet werden, bis alle Eingabeargumente empfangen wurden.
//public override bool WaitAllInput => false;
[DiagramExternal]
public void Process(CandleMessage candle, Unit diff)
{
var res = candle.ClosePrice + diff;
if (diff >= _minValue.Value)
Output1?.Invoke(res);
else
Output2?.Invoke(res);
}
public override void Start()
{
base.Start();
// Logik vor dem Start hinzufügen
}
public override void Stop()
{
base.Stop();
// Logik nach dem Stop hinzufügen
}
public override void Reset()
{
base.Reset();
// 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]
public void Process(CandleMessage candle, Unit diff)
Ausgehende Sockets werden definiert, indem das Attribut auf ein Ereignis angewendet wird. Im Beispiel des Würfels gibt es zwei solche Ereignisse:
[DiagramExternal]
public event Action<Unit> Output1;
[DiagramExternal]
public event Action<Unit> Output2;
Daher gibt es auch zwei ausgehende Sockets.
Zusätzlich zeigt das Beispiel, wie eine Eigenschaft für den Würfel erstellt wird:
_minValue = AddParam("MinValue", 10)
.SetBasic(true) // Parameter im Basismodus sichtbar machen
.SetDisplay("Parameter", "Mindestwert", "Beschreibung des Mindestwert-Parameter", 10);
Die Verwendung der Klasse DiagramElementParam nutzt automatisch den Ansatz zum Speichern und Wiederherstellen von Einstellungen.
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:
//public override bool WaitAllInput => 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:

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