MarvelChart it Help

Programmazione per MarvelChart

E’ possibile integrare in MarvelChart nuovi Indicatori e Trading System, usando le procedure guidate fornite, oppure realizzando delle Class Libraries .NET Core 8.0 in modo autonomo e copiandole nella cartella dei documenti di MarvelChart dove l’applicazione ricerca i file delle estensioni. MarvelChart fornisce una procedura guidata per creare nuovi Indicatori ed una per creare nuovi Trading System. E’ inoltre possibile importare od esportare indicatori e trading system, sia in forma di codice sorgente, che in forma di file compilato binario.

Indicatori

MarvelChart permette di creare indicatori personalizzati tramite l’utilizzo di Class Libraries .NET Core 8.0. Ogni indicatore è costituito da una classe .NET, che per essere individuata come tale deve derivare dalla classe Indicator fornita da MarvelChart nel namespace NetScript. E’ pertanto possibile creare nuovi indicatori sia seguendo la procedura guidata integrata in MarvelChart, ma anche realizzando una Class Library in modo autonomo, posizionando l’assembly risultante nella cartella:

Documenti → PlayOptions.it → MarvelChart → Scripts → Assemblies.

Procedura guidata per nuovi Indicatori

New Indicator Wizard

La procedura guidata per la creazione di nuovi Indicatori è composta da una finestra che richiede le informazioni essenziali relative al nuovo indicatore.

La finestra presenta nella parte superiore i campi per inserire i valori che identificano il nuovo indicatore, mentre nella parte centrale è divisa in diverse sezioni. Le informazioni che identificano il nuovo indicatore sono costituite dai campi:

  1. Class Name - Nome della classe del nuovo indicatore, deve essere un testo univoco;

  2. Indicator Name - Nome del nuovo indicatore, che rappresenta il testo che sarà visibile nel menù Indicators di MarvelChart;

  3. Folder Name - Nome della cartella all’interno della quale aggiungere la voce del nuovo indicatore nel menù Indicators di MarvelChart;

  4. Indicator Short Name - Nome abbreviato dell’indicatore, in genere viene usata una sigla come nome abbreviato, come ad esempio SMA come abbreviazione di Simple Moving Average. Questo nome viene usato quando l’indicatore viene aggiunto nelle intestazioni dei pannelli;

  5. Overlap - Casella di spunta, se attiva l’indicatore verrà aggiunto in sovrapposizione alla serie storica sullo stesso pannello del Chart, mentre se spenta l’indicatore verrà aggiunto in un pannello a sé stante sul Chart.

Le sezioni nella parte centrale della finestra raggruppano le impostazioni relative a:

  • Inputs - Parametri di ingresso dell’indicatore;

  • Child Indicators - Eventuali indicatori e funzioni di calcolo che il nuovo indicatore usa nella procedura di calcolo. Ad esempio, l’indicatore Bollinger Bands utilizza come Child Indicators Moving Average e Standard Deviation;

  • Plots - Uscite dell’indicatore;

  • Strip Lines - Uscite dell’indicatore con valore costante, che in genere possono essere utilizzate per visualizzare valori come OverBought o OverSold.

Una volta completate tutte le impostazioni, cliccando sul pulsante Create File and Open in Editor, MarvelChart creerà il nuovo file dell’indicatore in linguaggio C# ed aprirà l’ambiente di sviluppo dove sarà possibile scriverne il codice.

Inputs

New Indicator Wizard - Inputs

In questa sezione possono essere definiti i parametri di ingresso dell’indicatore. Per ogni parametro di ingresso è necessario definire nella tabella i seguenti valori:

  1. Variable Name - Nome della variabile usata all’interno del codice del nuovo indicatore per contenere il valore del parametro di ingresso. Deve essere un testo univoco all’interno dell’indicatore;

  2. Name - Nome visualizzato nelle finestre di MarvelChart per individuare il parametro di ingresso dell’indicatore;

  3. Type - Casella a discesa dove selezionare il tipo di dati associato al parametro di ingresso;

  4. Default Value - Valore di default del parametro di ingresso, automaticamente assegnato alla corrispondente variabile quando l’indicatore viene aggiunto al Chart.

Child Indicators

New Indicator Wizard - Child Indicators

In questa sezione possono essere definiti i Child Indicators, cioè gli indicatori e le relative funzioni di calcolo che il nuovo indicatore che si sta creando utilizzerà nel proprio algoritmo. Per ogni Child Indicator è necessario definire nella tabella i seguenti valori:

  1. Indicator Type - Casella a discesa dove selezionare il tipo di Child Indicator che si intende utilizzare nel calcolo del nuovo indicatore;

  2. Variable Name - Nome della variabile associata al Child Indicator. Deve essere un testo univoco all’interno dell’indicatore;

Plots

New Indicator Wizard - Plots

Nella sezione Plots si possono definire i valori di uscita del nuovo indicatore. Per ogni Plot è necessario definire nella tabella i seguenti valori:

  1. Variable Name - Nome della variabile associata all’uscita del nuovo indicatore. Deve essere un testo univoco all’interno dell’indicatore;

  2. Alias - Nome Alias dell’uscita. Quando il nuovo indicatore viene utilizzato come Child Indicator all’interno di altri indicatori, tramite l’Alias è possibile accedere rapidamente ai valori calcolati per l’uscita;

  3. Name - Nome dell’uscita, è il testo visualizzato nelle finestre di MarvelChart per individuare l’uscita;

  4. Color - Colore di default dell’uscita. Può essere vuoto, nel qual caso MarvelChart assegnerà automaticamente un colore quando l’indicatore viene aggiunto al Chart;

  5. Line Weight - Spessore o dimensione della linea, dell’istogramma o dei punti dell’uscita;

  6. Style - Casella a discesa tramite la quale selezionare lo stile di disegno dell’uscita. Le alternative disponibili sono:

    • Solid - Linea continua;

    • Dash - Linea tratteggiata;

    • Dot - Linea punteggiata;

    • DashDot - Linea tratteggiata e punteggiata;

    • DashDotDot - Linea tratteggiata e punteggiata, composta da un tratteggio e due punti;

    • Point - Punto;

    • Histogram - Istogramma verticale disegnato a partire dal valore zero dell’asse Y del pannello del chart;

    • PointToPoint - Linea che congiunge due punti non nulli, ma che possono essere anche non consecutivi.

Strip Lines

New Indicator Wizard - Strip Lines

Le Strip Lines sono molto simili ai Plots, ma si distinguono per il fatto che le Strip Lines hanno un unico valore costante per tutti i punti del Chart, mentre i Plots possono avere un valore diverso per ogni punto del Chart. Per ogni Strip Line è necessario definire nella tabella i seguenti valori:

  1. Variable Name - Nome della variabile associata alla Strip Line del nuovo indicatore. Deve essere un testo univoco all’interno dell’indicatore;

  2. Name - Nome della Strip Line, è il testo visualizzato nelle finestre di MarvelChart per individuare la Strip Line;

  3. Default Value - Valore di default della Strip Line, automaticamente assegnato alla corrispondente variabile quando l’indicatore viene aggiunto al Chart;

  4. Color - Colore di default della Strip Line. Può essere vuoto, nel qual caso MarvelChart assegnerà automaticamente un colore quando l’indicatore viene aggiunto al Chart;

  5. Line Weight - Spessore o dimensione della linea, dell’istogramma o dei punti della Strip Line;

  6. Style - Casella a discesa tramite la quale selezionare lo stile di disegno della Strip Line. Le alternative disponibili sono:

    • Solid - Linea continua;

    • Dash - Linea tratteggiata;

    • Dot - Linea punteggiata;

    • DashDot - Linea tratteggiata e punteggiata;

    • DashDotDot - Linea tratteggiata e punteggiata, composta da un tratteggio e due punti;

    • Point - Punto;

    • Histogram - Istogramma verticale disegnato a partire dal valore zero dell’asse Y del pannello del chart;

    • PointToPoint - Linea che congiunge due punti non nulli, ma che possono essere anche non consecutivi.

Metodi della classe Indicator

Nella creazione di nuovi indicatori è generalmente sufficiente implementare tramite override solo due metodi della classe Indicator, OnCreate e OnCalculate.

OnCreate

public virtual void OnCreate(IScriptData data, IVariablesFactory variablesFactory, IPlotFactory plotFactory)

Questo metodo viene richiamato da MarvelChart quando l’indicatore viene aggiunto al Chart, o comunque quando è necessario inizializzare una nuova istanza dell’indicatore. Può essere utilizzato per inizializzare variabili, Inputs (in particolare le serie storiche usate negli Inputs), Plots, Strip Lines, Child Indicators ed in genere qualsiasi altro oggetto utilizzato nell’indicatore che necessiti di inizializzazione. Il metodo ha i parametri:

  • data - Contiene i dati di lavoro dell’indicatore, come ad esempio le serie storiche ed il simbolo del Chart;

  • variablesFactory - Utilizzato per inizializzare variabili che contengono serie di dati;

  • plotFactory - Utilizzato per inizializzare plots e strip lines;

Inizializzazione delle variabili

Se nell’indicatore sono necessarie variabili che memorizzano i valori barra per barra, è possibile utilizzare oggetti di tipo IVariableSeries<T>, inizializzandole nel metodo OnCreate, come nell’esempio seguente:

this.m_variable = variablesFactory.CreateVariableSeries<double>(this);

Inizializzazione degli Inputs

Quando l’indicatore prevede degli Inputs i loro valori possono essere inizializzati nel metodo OnCreate. E’ consigliabile inizializzare sempre gli Inputs relativi a serie storiche, come nell’esempio seguente:

if (this.Price == null) this.Price = data?.Bars?.Close;

Inizializzazione dei Plots

Tutti gli indicatori devono avere almeno un Plot, cioè un’uscita. I Plot possono essere inizializzati come nell’esempio che segue:

this.m_average = plotFactory.CreatePlot(this, "Average", null, 1, PlotStyle.Solid);

Inizializzazione delle Strip Lines

Anche le eventuali Strip Lines possono essere inizializzate nel metodo OnCreate, ad esempio in questo modo:

this.m_overSold = plotFactory.CreateStripLine(this, "Over-Sold", null, 1, PlotStyle.Dash);

Inizializzazione dei Child Indicators

L’inizializzazione dei Child Indicators consiste semplicemente nella chiamata del costruttore della relativa classe, passando come parametro parent il valore this, come nell’esempio seguente:

this.m_ma = new VariableTypeMovingAverage(this);

OnCalculate

public virtual void OnCalculate(IScriptData data)

Il metodo OnCalculate è quello che MarvelChart utilizza per calcolare i valori degli indicatori. E’ il metodo principale di ogni indicatore: l’algoritmo di calcolo deve essere implementato in questo metodo.

OnNewBar

public virtual void OnNewBar(IScriptData data)

Questo metodo viene richiamato da MarvelChart ogni volta che nella serie storica viene aggiunta una nuova barra. Normalmente non è necessario implementare un override di questo metodo, in quanto MarvelChart estende automaticamente la lunghezza delle serie di dati relative a Variabili, Plots e Child Indicators inizializzati nel metodo OnCreate passando come parametro parent il valore this.

OnDestroy

public virtual void OnDestroy(IScriptsContext context)

Questo metodo viene richiamato da MarvelChart quando l’indicatore viene eliminato dal Chart o comunque quando l’istanza viene rilasciata. Normalmente non è necessario implementare un override di questo metodo, in quanto se si sono inizializzati Variabili, Plots, Strip Lines e Child Indicators tramite il metodo OnCreate passando come parametro parent il valore this, tutte le relative istanza saranno automaticamente rilasciate da MarvelChart. L’implementazione di un override di questo metodo può essere necessaria nel caso sia necessario rilasciare altri oggetti inizializzati nel metodo OnCreate.

Drawings

public Guid AddChartDrawing(ChartDrawing chartDrawing) public void DeleteChartDrawing(Guid objectId)

MarvelChart consente di aggiungere Drawings al Chart tramite codice negli indicatori. La classe Indicator fornisce 2 metodi, uno per aggiungere un Drawing al Chart (AddChartDrawing), l’altro per rimuoverlo (DeleteChartDrawing). Non è necessario chiamare DeleteChartDrawing nel metodo OnDestroy: MarvelChart collega automaticamente i Drawings con l’indicatore che li ha aggiunti al Chart, rimuovendo l’indicatore anche i Drawings da esso creati vengono rimossi dal Chart. I Drawing sono descritti da classi, una per ogni tipo diverso di Drawing, che derivano dalla classe base ChartDrawing. Le classi dei Drawings sono definite nel namespace NetScript.ChartDrawings. Ogni Drawing presenta un insieme di proprietà diverso in base alle caratteristiche dello stesso. I tipi di Drawing disponibili sono:

  1. Buy Symbol;

  2. Sell Symbol;

  3. Exit Symbol;

  4. Label;

  5. Horizontal Line;

  6. Vertical Line;

  7. Trend Line;

  8. Info Line;

  9. Alert Line;

  10. Ray Line;

  11. Extended Line;

  12. Lines Cross;

  13. Ellipse;

  14. Rectangle;

  15. Poly Line;

  16. Disjoint Channel;

  17. Error Channel;

  18. Flat Top/Bottom;

  19. Gann Fan;

  20. Quadrant Lines;

  21. Parallel Channel;

  22. Pitchfork;

  23. Raff Regression;

  24. Speed Lines;

  25. Tirone Levels;

  26. Fibonacci Arcs;

  27. Fibonacci Fan;

  28. Fibonacci Retracements;

  29. Fibonacci Time Zones.

Buy Symbol

Esempio: aggiungere un Buy Symbol al Chart.

Guid symbolId = this.AddChartDrawing(new BuySymbol());

Proprietà:

  • Position - Coordinate X ed Y del Drawing;

  • Title - Testo da associare al Drawing.

Sell Symbol

Esempio: aggiungere un Sell Symbol al Chart.

Guid symbolId = this.AddChartDrawing(new SellSymbol());

Proprietà:

  • Position - Coordinate X ed Y del Drawing;

  • Title - Testo da associare al Drawing.

Exit Symbol

Esempio: aggiungere un Exit Symbol al Chart.

Guid symbolId = this.AddChartDrawing(new ExitSymbol());

Proprietà:

  • Position - Coordinate X ed Y del Drawing;

  • Title - Testo da associare al Drawing.

Label

Esempio: aggiungere una Label al Chart.

Guid symbolId = this.AddChartDrawing(new Label());

Proprietà:

  • Position - Coordinate X ed Y del Drawing;

  • Text - Testo da associare al Drawing.

  • TextSettings - Impostazioni relative al testo del Drawing, quali Font, colore ed allineamento.

Horizontal Line

Esempio: aggiungere una Horizontal Line al Chart.

Guid symbolId = this.AddChartDrawing(new HorizontalLine());

Proprietà:

  • Price - Coordinata Y del Drawing;

  • PlotSettings - Impostazioni relative alla modalità di disegno del Drawing, quali tipo di linea, colore e spessore.

Vertical Line

Esempio: aggiungere una Vertical Line al Chart.

Guid symbolId = this.AddChartDrawing(new VerticalLine());

Proprietà:

  • X - Coordinata X del Drawing;

  • PlotSettings - Impostazioni relative alla modalità di disegno del Drawing, quali tipo di linea, colore e spessore;

  • FontSettings - Impostazioni relative al Font del Drawing.

Trend Line

Esempio: aggiungere una Trend Line al Chart.

Guid symbolId = this.AddChartDrawing(new TrendLine());

Proprietà:

  • Point1 - Punto di controllo 1 del Drawing;

  • Point2 - Punto di controllo 2 del Drawing;

  • PlotSettings - Impostazioni relative alla modalità di disegno del Drawing, quali tipo di linea, colore e spessore.

Info Line

Esempio: aggiungere una Info Line al Chart.

Guid symbolId = this.AddChartDrawing(new InfoLine());

Proprietà:

  • Point1 - Punto di controllo 1 del Drawing;

  • Point2 - Punto di controllo 2 del Drawing;

  • PlotSettings - Impostazioni relative alla modalità di disegno del Drawing, quali tipo di linea, colore e spessore;

  • ElapsedTime - Attiva/Disattiva il disegno del tempo intercorso tra i 2 punti di controllo della linea;

  • ElapsedBars - Attiva/Disattiva il disegno del numero di barre intercorse tra i 2 punti di controllo della linea;

  • DifferenceInPercentage - Attiva/Disattiva il disegno della differenza di valore in percentuale sull’asse Y dei 2 punti di controllo della linea;

  • DifferenceInPoints - Attiva/Disattiva il disegno della differenza di valore in punti sull’asse Y dei 2 punti di controllo della linea;

  • TextSettings - Impostazioni relative al testo del Drawing, quali Font, colore ed allineamento.

Alert Line

Esempio: aggiungere una Alert Line al Chart.

Guid symbolId = this.AddChartDrawing(new AlertLine());

Proprietà:

  • Price - Coordinata Y del Drawing;

  • PlotSettings - Impostazioni relative alla modalità di disegno del Drawing, quali tipo di linea, colore e spessore;

  • Direction - Direzione di attraverso della linea che attiva l’Alert;

  • Enabled - Abilita/Disabilita l’Alert.

Ray Line

Esempio: aggiungere una Ray Line al Chart.

Guid symbolId = this.AddChartDrawing(new RayLine());

Proprietà:

  • Point1 - Punto di controllo 1 del Drawing;

  • Point2 - Punto di controllo 2 del Drawing;

  • PlotSettings - Impostazioni relative alla modalità di disegno del Drawing, quali tipo di linea, colore e spessore.

Extended Line

Esempio: aggiungere una Extended Line al Chart.

Guid symbolId = this.AddChartDrawing(new ExtendedLine());

Proprietà:

  • Point1 - Punto di controllo 1 del Drawing;

  • Point2 - Punto di controllo 2 del Drawing;

  • PlotSettings - Impostazioni relative alla modalità di disegno del Drawing, quali tipo di linea, colore e spessore.

Lines Cross

Esempio: aggiungere un Lines Cross al Chart.

Guid symbolId = this.AddChartDrawing(new LinesCross());

Proprietà:

  • Position - Punto di incrocio delle linee orizzontale e verticale;

  • PlotSettings - Impostazioni relative alla modalità di disegno del Drawing, quali tipo di linea, colore e spessore;

  • FontSettings - Impostazioni relative al Font del Drawing.

Ellipse

Esempio: aggiungere una Ellipse al Chart.

Guid symbolId = this.AddChartDrawing(new Ellipse());

Proprietà:

  • TopLeft - Punto di controllo che rappresenta l’angolo in alto a sinistra del rettangolo nel quale l’ellisse è inscritta;

  • BottomRight - Punto di controllo che rappresenta l’angolo in basso a destra del rettangolo nel quale l’ellisse è inscritta;

  • PlotSettings - Impostazioni relative alla modalità di disegno del Drawing, quali tipo di linea, colore e spessore;

  • Alpha - Trasparenza dell’area dell’ellisse, valore compreso tra 0 e 255, dove 0 significa completamente trasparente e 255 significa completamente opaco.

Rectangle

Esempio: aggiungere un Rectangle al Chart.

Guid symbolId = this.AddChartDrawing(new Rectangle());

Proprietà:

  • TopLeft - Punto di controllo che rappresenta l’angolo in alto a sinistra del rettangolo;

  • BottomRight - Punto di controllo che rappresenta l’angolo in basso a destra del rettangolo;

  • PlotSettings - Impostazioni relative alla modalità di disegno del Drawing, quali tipo di linea, colore e spessore;

  • Alpha - Trasparenza dell’area del rettangolo, valore compreso tra 0 e 255, dove 0 significa completamente trasparente e 255 significa completamente opaco.

Poly Line

Esempio: aggiungere una Poly Line al Chart.

Guid symbolId = this.AddChartDrawing(new PolyLine());

Proprietà:

  • Points - Elenco dei punti che costituiscono la Poly Line;

  • PlotSettings - Impostazioni relative alla modalità di disegno del Drawing, quali tipo di linea, colore e spessore.

Disjoint Channel

Esempio: aggiungere un Disjoint Channel al Chart.

Guid symbolId = this.AddChartDrawing(new DisjointChannel());

Proprietà:

  • Point1 - Punto di controllo 1 del Drawing;

  • Point2 - Punto di controllo 2 del Drawing;

  • ChannelHeight - Altezza del canale;

  • PlotSettings - Impostazioni relative alla modalità di disegno del Drawing, quali tipo di linea, colore e spessore;

  • ChannelAlpha - Trasparenza dell’area del canale, valore compreso tra 0 e 255, dove 0 significa completamente trasparente e 255 significa completamente opaco.

Error Channel

Esempio: aggiungere un Error Channel al Chart.

Guid symbolId = this.AddChartDrawing(new ErrorChannel());

Proprietà:

  • X1 - Coordinata X del primo punto di controllo del canale;

  • X2 - Coordinata X del secondo punto di controllo del canale;

  • PlotSettings - Impostazioni relative alla modalità di disegno del Drawing, quali tipo di linea, colore e spessore;

  • Alpha - Trasparenza dell’area del canale, valore compreso tra 0 e 255, dove 0 significa completamente trasparente e 255 significa completamente opaco.

Flat Top/Bottom

Esempio: aggiungere un Flat Top/Bottom al Chart.

Guid symbolId = this.AddChartDrawing(new FlatTopBottom());

Proprietà:

  • Point1 - Punto di controllo 1 del Drawing;

  • Point2 - Punto di controllo 2 del Drawing;

  • FlatLineYValue - Valore sull’asse Y della linea orizzontale del Drawing;

  • PlotSettings - Impostazioni relative alla modalità di disegno del Drawing, quali tipo di linea, colore e spessore;

  • ChannelAlpha - Trasparenza dell’area del canale, valore compreso tra 0 e 255, dove 0 significa completamente trasparente e 255 significa completamente opaco.

Gann Fan

Esempio: aggiungere un Gann Fan al Chart.

Guid symbolId = this.AddChartDrawing(new GannFan());

Proprietà:

  • Origin - Origine del Gann Fan;

  • Point2 - Punto di controllo 2 del Drawing;

  • PlotSettings - Impostazioni relative alla modalità di disegno del Drawing, quali tipo di linea, colore e spessore;

  • Alpha - Trasparenza dell’area del fan, valore compreso tra 0 e 255, dove 0 significa completamente trasparente e 255 significa completamente opaco.

Quadrant Lines

Esempio: aggiungere un Quadrant Lines al Chart.

Guid symbolId = this.AddChartDrawing(new QuadrantLines());

Proprietà:

  • X1 - Coordinata X del primo punto di controllo del canale;

  • X2 - Coordinata X del secondo punto di controllo del canale;

  • PlotSettings - Impostazioni relative alla modalità di disegno del Drawing, quali tipo di linea, colore e spessore;

  • Alpha - Trasparenza dell’area del canale, valore compreso tra 0 e 255, dove 0 significa completamente trasparente e 255 significa completamente opaco.

Parallel Channel

Esempio: aggiungere un Parallel Channel al Chart.

Guid symbolId = this.AddChartDrawing(new ParallelChannel());

Proprietà:

  • Point1 - Punto di controllo 1 del Drawing;

  • Point2 - Punto di controllo 2 del Drawing;

  • ChannelHeight - Altezza del canale;

  • PlotSettings - Impostazioni relative alla modalità di disegno del Drawing, quali tipo di linea, colore e spessore;

  • ChannelAlpha - Trasparenza dell’area del canale, valore compreso tra 0 e 255, dove 0 significa completamente trasparente e 255 significa completamente opaco.

Pitchfork

Esempio: aggiungere un Pitchfork al Chart.

Guid symbolId = this.AddChartDrawing(new Pitchfork());

Proprietà:

  • Point1 - Punto di controllo 1 del Drawing;

  • Point2 - Punto di controllo 2 del Drawing;

  • Point3 - Punto di controllo 3 del Drawing;

  • PlotSettings - Impostazioni relative alla modalità di disegno del Drawing, quali tipo di linea, colore e spessore;

  • PitchforkAlpha - Trasparenza dell’area del pitchfork, valore compreso tra 0 e 255, dove 0 significa completamente trasparente e 255 significa completamente opaco.

Raff Regression

Esempio: aggiungere una Raff Regression al Chart.

Guid symbolId = this.AddChartDrawing(new RaffRegression());

Proprietà:

  • X1 - Coordinata X del primo punto di controllo del canale;

  • X2 - Coordinata X del secondo punto di controllo del canale;

  • PlotSettings - Impostazioni relative alla modalità di disegno del Drawing, quali tipo di linea, colore e spessore;

  • Alpha - Trasparenza dell’area del canale, valore compreso tra 0 e 255, dove 0 significa completamente trasparente e 255 significa completamente opaco.

Speed Lines

Esempio: aggiungere un Speed Lines al Chart.

Guid symbolId = this.AddChartDrawing(new SpeedLines());

Proprietà:

  • Origin - Origine del Speed Lines;

  • Point2 - Punto di controllo 2 del Drawing;

  • PlotSettings - Impostazioni relative alla modalità di disegno del Drawing, quali tipo di linea, colore e spessore;

  • Alpha - Trasparenza dell’area del fan, valore compreso tra 0 e 255, dove 0 significa completamente trasparente e 255 significa completamente opaco.

Tirone Levels

Esempio: aggiungere un Tirone Levels al Chart.

Guid symbolId = this.AddChartDrawing(new TironeLevels());

Proprietà:

  • X1 - Coordinata X del primo punto di controllo del canale;

  • X2 - Coordinata X del secondo punto di controllo del canale;

  • PlotSettings - Impostazioni relative alla modalità di disegno del Drawing, quali tipo di linea, colore e spessore;

  • Alpha - Trasparenza dell’area del canale, valore compreso tra 0 e 255, dove 0 significa completamente trasparente e 255 significa completamente opaco.

Fibonacci Arcs

Esempio: aggiungere un Fibonacci Arcs al Chart.

Guid symbolId = this.AddChartDrawing(new FibonacciArcs());

Proprietà:

  • Origin - Origine del Fibonacci Arcs;

  • Point2 - Punto di controllo 2 del Drawing;

  • PlotSettings - Impostazioni relative alla modalità di disegno del Drawing, quali tipo di linea, colore e spessore;

  • SecondaryLinesColor - Colore delle linee secondarie degli archi;

  • AreaAlpha - Trasparenza dell’area degli archi, valore compreso tra 0 e 255, dove 0 significa completamente trasparente e 255 significa completamente opaco.

Fibonacci Fan

Esempio: aggiungere un Fibonacci Fan al Chart.

Guid symbolId = this.AddChartDrawing(new FibonacciFan());

Proprietà:

  • Origin - Origine del Fibonacci Fan;

  • Point2 - Punto di controllo 2 del Drawing;

  • PlotSettings - Impostazioni relative alla modalità di disegno del Drawing, quali tipo di linea, colore e spessore;

  • Alpha - Trasparenza dell’area del fan, valore compreso tra 0 e 255, dove 0 significa completamente trasparente e 255 significa completamente opaco.

Fibonacci Retracements

Esempio: aggiungere un Fibonacci Retracements al Chart.

Guid symbolId = this.AddChartDrawing(new FibonacciRetracements());

Proprietà:

  • Point1 - Punto di controllo 1 del Drawing;

  • Point2 - Punto di controllo 2 del Drawing;

  • PlotSettings - Impostazioni relative alla modalità di disegno del Drawing, quali tipo di linea, colore e spessore;

  • ChannelAlpha - Trasparenza dell’area del canale, valore compreso tra 0 e 255, dove 0 significa completamente trasparente e 255 significa completamente opaco.

Fibonacci Time Zones

Esempio: aggiungere un Fibonacci Time Zones al Chart.

Guid symbolId = this.AddChartDrawing(new FibonacciTimeZones());

Proprietà:

  • X1 - Coordinata X del primo punto di controllo del Fibonacci Time Zones;

  • X2 - Coordinata X del secondo punto di controllo del Fibonacci Time Zones;

  • PlotSettings - Impostazioni relative alla modalità di disegno del Drawing, quali tipo di linea, colore e spessore.

Disegno personalizzato delle uscite

public virtual void OnCustomPaint(CustomPaintIndicatorEventArgs args)

MarvelChart consente di personalizzare completamente il disegno delle uscite degli indicatori, implementando l’override del metodo OnCustomPaint. L’accesso alle funzioni di disegno e la relativa documentazione può avvenire tramite il parametro args di tipo CustomPaintIndicatorEventArgs. Il parametro args consente di calcolare le coordinate X ed Y dei punti sul pannello del Chart, di ottenere le dimensioni in pixels del pannello, e di utilizzare tutte le funzioni di disegno disponibili. Il disegno degli indicatori avviene attraverso l’utilizzo di chiamate Direct2D Immediate Mode che sfruttano l’accelerazione hardware qualora sia disponibile.

Trading Systems

MarvelChart permette di creare trading systems personalizzati tramite l’utilizzo di Class Libraries .NET Core 8.0. Ogni trading system è costituito da una classe .NET, che per essere individuata come tale deve derivare dalla classe Signal fornita da MarvelChart nel namespace NetScript. E’ possibile creare nuovi trading system sia seguendo la procedura guidata integrata in MarvelChart, ma anche realizzando una Class Library in modo autonomo, posizionando l’assembly risultante nella cartella

Documenti → PlayOptions.it → MarvelChart → Scripts → Assemblies.

Procedura guidata per nuovi Trading System

New Signal Wizard

La procedura guidata per la creazione di nuovi Trading System è composta da una finestra che richiede le informazioni essenziali relative al nuovo trading system.

La finestra presenta nella parte superiore i campi per inserire i valori che identificano il nuovo trading system, mentre nella parte centrale è divisa in diverse sezioni. Le informazioni che identificano il nuovo trading system sono costituite dai campi:

  1. Class Name - Nome della classe del nuovo trading system, deve essere un testo univoco;

  2. Signal Name - Nome del nuovo trading system, che rappresenta il testo che sarà visibile nella finestra di impostazione dei Signal di MarvelChart;

  3. Folder Name - Nome della cartella all’interno della quale aggiungere la voce del nuovo trading system nella finestra di impostazione dei Signal di MarvelChart.

Le sezioni nella parte centrale della finestra raggruppano le impostazioni relative a:

  • Inputs - Parametri di ingresso del trading system;

  • Orders - Definizione degli ordini che il trading system può generare;

  • Child Indicators - Eventuali indicatori che il nuovo trading system usa nell’algoritmo di calcolo.

Una volta completate tutte le impostazioni, cliccando sul pulsante Create File and Open in Editor, MarvelChart creerà il nuovo file del trading system in linguaggio C# ed aprirà l’ambiente di sviluppo dove sarà possibile scriverne il codice.

Inputs

New Signal Wizard - Inputs

In questa sezione possono essere definiti i parametri di ingresso del trading system. Per ogni parametro di ingresso è necessario definire nella tabella i seguenti valori:

  1. Variable Name - Nome della variabile usata all’interno del codice del nuovo trading system per contenere il valore del parametro di ingresso. Deve essere un testo univoco all’interno del trading system;

  2. Name - Nome visualizzato nelle finestre di MarvelChart per individuare il parametro di ingresso del trading system;

  3. Type - Casella a discesa dove selezionare il tipo di dati associato al parametro di ingresso;

  4. Default Value - Valore di default del parametro di ingresso, automaticamente assegnato alla corrispondente variabile quando il trading system viene inizializzato per un Backtest o per il sistema Auto-Trade.

Orders

New Signal Wizard - Orders

In questa sezione possono essere definiti gli ordini che il trading system può generare. Per ogni ordine è necessario definire nella tabella i seguenti valori:

  1. Variable Name - Nome della variabile usata all’interno del codice del nuovo trading system per identificare l’ordine. Deve essere un testo univoco all’interno del trading system;

  2. Order Type - Casella a discesa dove selezionare il tipo di ordine;

Child Indicators

New Signal Wizard - Child Indicators

In questa sezione possono essere definiti i Child Indicators, cioè gli indicatori e le relative funzioni di calcolo che il nuovo trading system che si sta creando utilizzerà nel proprio algoritmo. Per ogni Child Indicator è necessario definire nella tabella i seguenti valori:

  1. Indicator Type - Casella a discesa dove selezionare il tipo di Child Indicator che si intende utilizzare nel calcolo del nuovo trading system;

  2. Variable Name - Nome della variabile associata al Child Indicator. Deve essere un testo univoco all’interno del trading system;

Metodi della classe Signal

Nella creazione di nuovi trading system è generalmente sufficiente implementare tramite override solo due metodi della classe Signal, OnCreate e OnCalculate.

OnCreate

void OnCreate(IScriptData data, IVariablesFactory variablesFactory, IPlotFactory plotFactory, ISignalOrderFactory orderFactory)

Questo metodo viene richiamato da MarvelChart quando il trading system viene aggiunto al Chart, o comunque quando è necessario inizializzare una nuova istanza del trading system. Può essere utilizzato per inizializzare variabili, Inputs (in particolare le serie storiche usate negli Inputs), Child Indicators ed in genere qualsiasi altro oggetto utilizzato nel trading ststem che necessiti di inizializzazione. Il metodo ha i parametri:

  • data - Contiene i dati di lavoro del trading system, come ad esempio le serie storiche ed il simbolo del Chart;

  • variablesFactory - Utilizzato per inizializzare variabili che contengono serie di dati;

  • plotFactory - Utilizzato per inizializzare plots e strip lines;

  • ordersFactory - Utilizzato per inizializzare gli ordini.

Inizializzazione delle variabili

Se nel trading system sono necessarie variabili che memorizzano i valori barra per barra, è possibile utilizzare oggetti di tipo IVariableSeries<T>, inizializzandole nel metodo OnCreate, come nell’esempio seguente:

this.m_variable = variablesFactory.CreateVariableSeries<double>(this);

Inizializzazione degli Inputs

Quando il trading system prevede degli Inputs i loro valori possono essere inizializzati nel metodo OnCreate. E’ consigliabile inizializzare sempre gli Inputs relativi a serie storiche, come nell’esempio seguente:

if (this.Price == null) this.Price = data?.Bars?.Close;

Inizializzazione dei Child Indicators

L’inizializzazione dei Child Indicators consiste semplicemente nella chiamata del costruttore della relativa classe, passando come parametro parent il valore this, come nell’esempio seguente:

this.m_ma = new VariableTypeMovingAverage(this);

I Child Indicators nei trading system devono essere rilasciati manualmente implementando un override del metodo OnDestroy.

Inizializzazione degli ordini

Per ogni ordine utilizzato nel trading system è necessario eseguirne l’inizializzazione nel metodo OnCreate, come nell’esempio seguente:

this.m_buy = orderFactory?.Create(this, SignalOrderType.BuyMarket);

OnCalculate

public virtual void OnCalculate(IScriptData data)

Il metodo OnCalculate è quello che MarvelChart utilizza per eseguire l’algoritmo del trading system. E’ il metodo principale di ogni trading system.

OnNewBar

public virtual void OnNewBar(IScriptData data)

Questo metodo viene richiamato da MarvelChart ogni volta che nella serie storica viene aggiunta una nuova barra. Normalmente non è necessario implementare un override di questo metodo, in quanto MarvelChart estende automaticamente la lunghezza delle serie di dati relative alle ed ai Child Indicators inizializzati nel metodo OnCreate passando come parametro parent il valore this.

OnDestroy

void OnDestroy(IScriptsContext context)

Questo metodo viene richiamato da MarvelChart quando il trading system viene eliminato dal Chart o comunque quando l’istanza viene rilasciata. E’ necessario implementare un override di questo metodo se il trading system utilizza dei Child Indicators, che dovranno essere rilasciati manualmente. Esempio:

public override void OnDestroy(IScriptsContext context) { context.ReleaseScript(this.m_bollinger); }

Per ogni Child Indicator utilizzato, è necessario eseguire una chiamata al metodo context.ReleaseScript per liberare le risorse utilizzate.

Take-Profit e Stop-Loss

La classe Signal dalla quale derivano i trading system rende disponibile l’impostazione di ordini di uscita Take-Profit e Stop-Loss tramite appositi metodi e proprietà.

SetTakeProfit

void SetTakeProfit(TakeProfitStopLossMode takeProfitMode, double takeProfitValue)

Imposta i parametri per l’ordine di uscita Take-Profit. Il parametro takeProfitMode determina come deve essere calcolato il prezzo dell’ordine di uscita. I valori ammessi sono:

  • None - Nessun ordine di uscita Take-Profit;

  • Points - Il prezzo è calcolato come distanza, in punti, dal prezzo dell’Open Position. La distanza in punti è specificata nel parametro takeProfitValue;

  • Percentage - Il prezzo è calcolato come distanza, in percentuale, dal prezzo dell’Open Position. La distanza in percentuale è specificata nel parametro takeProfitValue;

  • Amount - Il prezzo è calcolato in modo che l’uscita avvenga con un Profit pari al valore impostato nel parametro takeProfitValue. Il prezzo di uscita dipenderà quindi non solo dal prezzo dell’Open Position, ma anche dalla quantità e dalle caratteristiche del simbolo;

  • ExactPrice - Il prezzo di uscita sarà pari al valore impostato nel parametro takeProfitValue.

SetStopLoss

void SetStopLoss(TakeProfitStopLossMode stopLossMode, double stopLossValue)

Imposta i parametri per l’ordine di uscita Stop-Loss. Il parametro stopLossMode determina come deve essere calcolato il prezzo dell’ordine di uscita. I valori ammessi sono:

  • None - Nessun ordine di uscita Stop-Loss;

  • Points - Il prezzo è calcolato come distanza, in punti, dal prezzo dell’Open Position. La distanza in punti è specificata nel parametro stopLossValue;

  • Percentage - Il prezzo è calcolato come distanza, in percentuale, dal prezzo dell’Open Position. La distanza in percentuale è specificata nel parametro stopLossValue;

  • Amount - Il prezzo è calcolato in modo che l’uscita avvenga con un Loss pari al valore impostato nel parametro stopLossValue. Il prezzo di uscita dipenderà quindi non solo dal prezzo dell’Open Position, ma anche dalla quantità e dalle caratteristiche del simbolo;

  • ExactPrice - Il prezzo di uscita sarà pari al valore impostato nel parametro stopLossValue.

ClearTakeProfit

void ClearTakeProfit()

Azzera tutte le impostazioni relative all’ordine di uscita Take-Profit.

ClearStopLoss

void ClearStopLoss()

Azzera tutte le impostazioni relative all’ordine di uscita Stop-Loss.

Proprietà TakeProfit

TakeProfitSettings TakeProfit { get; }

Proprietà in sola lettura che permette di accedere alle impostazioni attuali dell’ordine di uscita Take-Profit.

Proprietà StopLoss

StopLossSettings StopLoss { get; }

Proprietà in sola lettura che permette di accedere alle impostazioni attuali dell’ordine di uscita Stop-Loss

Cancellazione degli ordini

Se il trading system prevede l’utilizzo di ordini che richiedono periodi di tempi lunghi per essere completamente eseguiti, può accadere che l’algoritmo calcoli che sia necessario immettere un nuovo ordine mentre uno precedente non è ancora completato. Per questi casi, la classe Signal rende disponibile il metodo CancelOrder per cancellare un ordine non ancora completato.

void CancelOrder(Order order, IScriptData data)

Il parametro order specifica quale ordine deve essere cancellato, mentre il parametro data contiene i dati di lavoro del trading system.

Dynamic Indicators

Nei trading system è possibile creare dei Dynamic Indicators. I Dynamic Indicators sono degli indicatori che il trading system aggiunge autonomamente al Chart quando viene avviato.

L’utilizzo dei Dynamic Indicators prevede l’utilizzo della proprietà IndicatorsFactory della classe Signal, che espone i metodi CreateIndicator e RemoveIndicator, usati rispettivamente per aggiungere un Dynamic Indicator al Chart e per rimuoverlo.

IndicatorsFactory.CreateIndicator

Guid CreateIndicator(IScript owner, Type indicatorType, Dictionary<string, object> indicatorInputParametersValues, Dictionary<string, PlotSettings> indicatorOutputs)

Aggiunge un Dynamic Indicator al Chart, e restituisce un valore di tipo Guid che lo identifica in MarvelChart. I parametri in ingresso sono:

  • owner - Signal proprietario del Dynamic Indicator, normalmente valorizzato a this;

  • indicatorType - Tipo di indicatore;

  • indicatorInputParametersValues - Parametri di ingresso dell’indicatore. Se uno degli Inputs dell’indicatore non viene specificato in questo parametro, l’indicatore userà il valore di default.

  • indicatorOutputs - Impostazioni delle uscite dell’indicatore.

Esempio di utilizzo:

private void CreateBollingerBandsDynamicIndicator() { // Shortcut IIndicatorsFactory f = this.IndicatorsFactory; if (f == null) return; // Remove previous dynamic indicator if (this.m_previousIndicatorID != Guid.Empty) f.RemoveIndicator(this.m_previousIndicatorID); // Inputs Dictionary&lt;string, object&gt; inputs = new(); inputs.Add("Periods", this.Periods); inputs.Add("Deviations", this.Deviations); // Outputs settings Dictionary&lt;string, PlotSettings&gt; settings = new(); foreach (IPlot plot in this.m_bollinger.Plots) settings.Add(plot.Name, plot.Settings); // Add new dynamic indicator this.m_previousIndicatorID = f.CreateIndicator(this, typeof(BollingerBands), inputs, settings); }

IndicatorsFactory.RemoveIndicator

void RemoveIndicator(Guid indicatorId)

Rimuove un Dynamic Indicator dal Chart, identificato tramite il parametro indicatorId, il cui valore deve essere pari al valore restituito dalla chiamata al metodo IndicatorsFactory.CreateIndicator.

Output su Backtest Multi-Simbolo

Quando si utilizza un trading system nella funzionalità Backtest Multi-Simbolo è possibile rendere disponibili delle informazioni aggiuntive che verranno visualizzate nell’elenco dei messaggi di stato durante l’esecuzione del Backtest. La classe Signal mette a disposizione il metodo OutputInfo per aggiungere informazioni sull’elenco dei messaggi. Nell’elenco dei messaggi viene aggiunta una riga ogni volta che viene generato un ordine. Sulla riga, usando la funzione OutputInfo, è possibile aggiungere delle colonne contenenti le informazioni aggiuntive che si desidera rendere visibili nella finestra del Backtest.

void OutputInfo(string name, object value, Color? foregroundColor = null, Color? backgroundColor = null, int fontSizeDelta = 0, FontStyle fontStyleDelta = FontStyle.Regular)

  • name - Intestazione della colonna da aggiungere nell’elenco dei messaggi;

  • value - Valore da visualizzare nella cella individuata dalla colonna specificata dal parametro name e dalla riga attuale dell’elenco dei messaggi;

  • foregroundColor - Opzionale. Colore del testo;

  • backgroundColor - Opzionale. Colore di sfondo della cella;

  • fontSizeDelta - Opzionale. Differenza di dimensione del font della cella rispetto al font standard, in punti;

  • fontStyleDelta - Opzionale. Differenza di stile del font della cella rispetto al font standard.

Importazione ed esportazione di Indicatori e Trading Systems

In MarvelChart usando le apposite voci di menù nella scelta degli indicatori o dei trading system è possibile avviare la procedura di importazione/esportazione. La procedura non distingue tra indicatori e trading system, e presenta un’unica finestra per entrambe le funzionalità.

Importazione di Indicatori e Trading System tramite codice sorgente

Import Source

L’importazione tramite codice sorgente avviene selezionando la scheda Import lungo il bordo sinistro della finestra, quindi attivando la vista Source Code nella parte superiore della scheda. La vista di importazione tramite codice sorgente richiede un solo parametro, il nome del file sorgente da importare. Una volta selezionato il file, cliccando sul pulsante OK verrà avviata l’importazione del file (tramite copia), avviando anche l’ambiente di sviluppo per la modifica del file importato.

Importazione di Indicatori e Trading System tramite file compilato binario

Import Binary

L’importazione tramite file compilato binario avviene selezionando la scheda Import lungo il bordo sinistro della finestra, quindi attivando la vista Binary File nella parte superiore della scheda. La vista di importazione tramite file compilato binario richiede un solo parametro, il nome del file da importare. Una volta selezionato il file, cliccando sul pulsante OK verrà avviata l’importazione del file (tramite copia), rendendo immediatamente disponibili in MarvelChart gli indicatori e trading system presenti nel file importato.

Esportazione di Indicatori e Trading System tramite codice sorgente

Export Source

L’esportazione tramite codice sorgente avviene selezionando la scheda Export lungo il bordo sinistro della finestra, quindi attivando la vista Source Code nella parte superiore della scheda. La vista di esportazione tramite codice sorgente richiede un solo parametro, il nome del file sorgente da esportare. Una volta selezionato il file, cliccando sul pulsante OK verrà avviata l’esportazione del file (tramite copia), richiedendo il nome da assegnare al file esportato.

Esportazione di Indicatori e Trading System tramite file compilato binario

Export Binary

L’esportazione tramite file compilato binario avviene selezionando la scheda Export lungo il bordo sinistro della finestra, quindi attivando la vista Binary File nella parte superiore della scheda. La vista di esportazione tramite file compilato binario richiede un solo parametro, il nome del file da esportare. Una volta selezionato il file, cliccando sul pulsante OK verrà avviata l’esportazione del file (tramite copia), richiedendo il nome da assegnare al file esportato.

Creare estensioni senza usare le procedure guidate

Per creare estensioni senza usare le procedure guidate di MarvelChart è sufficiente creare nel proprio ambiente di sviluppo preferito un nuovo progetto Class Library per .NET Core 6, in qualsiasi linguaggio, ed all’interno del progetto creare una nuova classe per ogni nuovo Indicatore o Trading System che si vuole implementare. Le classi che implementano un nuovo Indicatore devono derivare dalla classe NETScript.Indicator, mentre le classi che implementano un nuovo Trading System devono derivare dalla classe NETScript.Signal. E’ pertanto necessario nel progetto aggiungere un riferimento all’assembly NETScript che si trova nella cartella di installazione di MarvelChart, tipicamente

C → Program Files → MarvelChart.

L’assembly risultante dalla compilazione del progetto deve essere copiata nella cartella dove MarvelChart ricerca i file di estensione, tipicamente

Documenti → PlayOptions.it → MarvelChart → Scripts → Assemblies.

Last modified: 13 December 2024