Visual Trader T.S. : Problemi & Soluzioni

volevo sapere se e come è possibile fare un "reset" di un ingresso o di una uscita in un ts, mi spiego.

ora sempre con le solite 2 mm ho il seguente problema.

gli dico:

if MedMobVeloce > MedMobMedia
then
EnterLong (NextBar,AtOpen); // COMPRA
valstop= AddTick(C,-5);stoppa.

endif;


in una situazione simile se nn erro entra se la mm veloce è sopra la mm media, e stoppa se il prezzo scende di 5 tick dal punto di ingresso long (se nn erro).



mettiamo ke entri long sale e poi mi viene chiusa la posizione in base a quanto gli chiedo nella sezione di chiusura, in questo caso gli ho detto come prova:

SECTION_EXITLONG:


if RSI1 > 65 then
ExitLong(NextBar,AtOpen); // Liquida posizione long
endif;

END_SECTION


il problema del reset ke voglio io si pone quando esco dal long, infatti ho notato che se il ts trova ancora il titolo con la mm veloce sopra la mm media lui entra secondo i parametri impostati, ma io nn voglio assolutamente che rientri, al contrario vorrei che si "resettasse" nel senso che attendi di nuovo la mm veloce sotto la mm media , da quel momento se la mm veloce passa la mm media allora si che il sistema può continuare.

nella situazione attuale mi trovo moltissime operazioni una attaccata all'altra quando la posizione viene chiusa e la mm veloce nn è tornata sotto la mm media.



spero di essermi spiegato, vorrei evitare quanto mostrato in img.

ho segnato alcuni casi, se vi faccio vedere l'intero grafico ce ne sono una miriade.
 
posto l'img.

vi ho spedito il codice in privato per vedere se ho fatto errori io.
 

Allegati

  • img.png
    img.png
    59,6 KB · Visite: 241
Ultima modifica:
Scritto da lele2
volevo sapere se e come è possibile fare un "reset" di un ingresso o di una uscita in un ts, mi spiego.

.....

il problema del reset ke voglio io si pone quando esco dal long, infatti ho notato che se il ts trova ancora il titolo con la mm veloce sopra la mm media lui entra secondo i parametri impostati, ma io nn voglio assolutamente che rientri, al contrario vorrei che si "resettasse" nel senso che attendi di nuovo la mm veloce sotto la mm media , da quel momento se la mm veloce passa la mm media allora si che il sistema può continuare.


Nel Suo TS La clausola per l'ingresso LONG dice di acquistare se la media veloce e' superiore alla media normale, e nel Suo esempio questa condizione resta valida anche dopo che ha chiuso tempestivamente la posizione.

Secondo me occorre modificare il TS in modo che l'ingresso LONG avvenga nel momento in cui la media veloce SUPERA la media normale, e non solo perche' e' "maggiore".

La funzione "CrossOver" fa proprio questo, in quanto si attiva nel momento del superamento del valore

Non ho provato, la sintassi dovrebbe essere circa:

if CrossOver(MedMobVeloce, MedMobMedia) then
enterlong

in modo da acquistare solo al primo superamento

cordialita'
Mauro Pratelli
TraderLink
 
Scritto da Aioo
Da vecchio cliente:D :D :D (quasi 5 anni:D )volevo chiedere ai bravi programmatori della traderlink se non e' possibile(e' possibile) fare in modo che se io tiro una trend line sul EOD mi faccia anche da allarme in modo che quando apro VT dopo l'aggiornamento serale mi segnali i titoli che hanno toccato o anche magari avvicinato di una certa % la trend line da me tirata,penso che sarebbe un'ottima cosa apprezata da molti.(magari anche in real time)
Saluti e grazie.:clap:

Vedo che Traderlink si e' precipitata a darmi una risposta.......:mmmm: :mmmm: :mmmm:
 
Scritto da Aioo
Vedo che Traderlink si e' precipitata a darmi una risposta.......:mmmm: :mmmm: :mmmm:
Mi spiace per il ritardo, ma questo e' un forum SPECIFICO, riservato all'argomento Trading System, con cui la Sua domanda non ha (per ora....) molto a che fare.

Piuttosto che scrivere "spiacente, ci scriva personalmente o in un altro forum" ho preferito fare un giro di consultazioni tra i programmatori, sperando di offrirLe una risposta leggermente migliore.

Eccola: abbiamo registrato da tempo richieste analoghe, e non nego che sarebbe molto interessante lo sviluppo che ci chiede.
Al momento il nostro impegno principale e' quello di stablizzare il nuovo ambiente di TS, appena rilasciato. Non ci vorra' meno di un paio di mesi....

Riconfermo che ricordiamo benissimo la Sua richiesta (non e' l'unica) spiacente che per ridotte forze non possiamo ancora dare priorita' a questa (ed altre) interessanti modifiche.

Mauro Pratelli
TraderLink
Rimini
 
Scritto da mauro.pratelli
Mi spiace per il ritardo, ma questo e' un forum SPECIFICO, riservato all'argomento Trading System, con cui la Sua domanda non ha (per ora....) molto a che fare.

Piuttosto che scrivere "spiacente, ci scriva personalmente o in un altro forum" ho preferito fare un giro di consultazioni tra i programmatori, sperando di offrirLe una risposta leggermente migliore.

Eccola: abbiamo registrato da tempo richieste analoghe, e non nego che sarebbe molto interessante lo sviluppo che ci chiede.
Al momento il nostro impegno principale e' quello di stablizzare il nuovo ambiente di TS, appena rilasciato. Non ci vorra' meno di un paio di mesi....

Riconfermo che ricordiamo benissimo la Sua richiesta (non e' l'unica) spiacente che per ridotte forze non possiamo ancora dare priorita' a questa (ed altre) interessanti modifiche.

Mauro Pratelli
TraderLink
Rimini

:bow:
 
Mi scuso per la richiesta OT.
C' è nel manuale tutta la procedura per interfacciare Metastock real time tramite Metaserver ?
vi ho spedito anche una e-mail
grazie snorio
 
Scritto da snorio
Mi scuso per la richiesta OT.
C' è nel manuale tutta la procedura per interfacciare Metastock real time tramite Metaserver ?
vi ho spedito anche una e-mail
grazie snorio


Pardon :censored: :censored:

Trovato ora vado avanti, se c' è qualche problema vi farò qualche domanda.
Buona serata
snorio
 
plotchart

plotchart

Ho un problema con la funzione PlotChart.
Il manuale dice:

PlotChart (DataArray, IndZona, Colore, Stile, Spessore) : integer
Descrizione
Plotta sul grafico la Curva impostata (DataArray) nella Zona indicata con "IndZona".
DataArray : è l'array, l'oscillatore da plottare.
IndZona: è l'indice della zona su cui plottare. Con 0 viene plottato sopra il Titolo principale.
Colore: indica il colore utilizzato per disegnare la curva, si veda la sezione Costanti.
Stile: indica lo stile utilizzato per disegnare la curva.

Spessore: indica lo spessore utilizzato per disegnare la curva.


Ma non ho capito i valori possibile per "Stile". Dagli esempi ho visto come disegnare un grafico a linea, ma gli altri stili ?

grazie
 
Re: plotchart

Scritto da rinaldo.s
plotchart

Ho un problema con la funzione PlotChart.
Il manuale dice:

PlotChart (DataArray, IndZona, Colore, Stile, Spessore) : integer
Descrizione
Plotta sul grafico la Curva impostata (DataArray) nella Zona indicata con "IndZona".
DataArray : è l'array, l'oscillatore da plottare.
IndZona: è l'indice della zona su cui plottare. Con 0 viene plottato sopra il Titolo principale.
Colore: indica il colore utilizzato per disegnare la curva, si veda la sezione Costanti.
Stile: indica lo stile utilizzato per disegnare la curva.

Spessore: indica lo spessore utilizzato per disegnare la curva.

Ma non ho capito i valori possibile per "Stile". Dagli esempi ho visto come disegnare un grafico a linea, ma gli altri stili ?

grazie

Buongiorno, per il momento l'unico valore valido per "stile" e' la linea, ma e' gia' in "cantiere" l'implementazione di nuovi stili.

Cordiali Saluti.


Staff TraderLink.
 
Scritto da Leon Fiora
Salve,

lavoro regolarmente con VT e lo scorso anno ho avuto modo di sperimentare anche un po' di versioni beta.

Vi chiedo se attualmente è disponibile (o implementabile) una funzione di autoriferimento delle formule di tipo Previous Value (PREV in Metastock).

In pratica, ciò consiste in un identificatore dell'array che rappresenta il valore assunto nel periodo precedente di una data formula (consente di creare formule autoreferenziate).

Grazie, e complimenti per il lavoro che state portando avanti.
Buongiorno,
ammetto di non conoscere bene il linguaggio di Metastock, quindi spero di aver capito bene la domanda.

Nel linguaggio di VT, simile all'EasyLanguage di TradeStation, ci riferisce ai valori precedenti di una variabile, data-array, etc. aggiungendo dopo il nome della variabile il numero di "passi indietro" racchiuso tra parentesi quadre.

Ad esempio, se "C" e' il valore di chiusura dell'ultima barra disponibile, C[1] e' il close della barra precedente, H[10] e' il massimo di 10 giorni fa, miavariabile[7] e' il valore assunto sette "barre fa" da una ipotetica variabile definita dall'utente.

cordialita'
Mauro Pratelli
TraderLink
 
Scritto da mauro.pratelli
Buongiorno,
ammetto di non conoscere bene il linguaggio di Metastock, quindi spero di aver capito bene la domanda.

Nel linguaggio di VT, simile all'EasyLanguage di TradeStation, ci riferisce ai valori precedenti di una variabile, data-array, etc. aggiungendo dopo il nome della variabile il numero di "passi indietro" racchiuso tra parentesi quadre.

Ad esempio, se "C" e' il valore di chiusura dell'ultima barra disponibile, C[1] e' il close della barra precedente, H[10] e' il massimo di 10 giorni fa, miavariabile[7] e' il valore assunto sette "barre fa" da una ipotetica variabile definita dall'utente.

cordialita'
Mauro Pratelli
TraderLink

Grazie della pronta risposta, ma probabilmente sono stato io a non essermi espresso bene nella domanda.

Il concetto in questione è quello di autoreferimento della formula, e cioè del rilevare il valore di una formula completa (e non solo di un singolo array, come nel suo esempio C) assunto nel periodo precedente.

Ad esempio, il classico indicatore On Balance Volume, in linguaggio Metastock sarebbe scritto come:

(if(C>ref(C,-1),1,-1)*volume)+PREV

ovvero: se C è maggiore di C alla barra precedente (questo è proprio il suo esempio), allora scrivi 1, altrimenti -1 e moltiplica per il volume.

Somma poi questo primo risultato a quello assunto dalla stessa formula completa al periodo precedente (PREV appunto).

Forse lo stesso risultato si può raggiungere in VT con un algoritmo diverso che bypassi la funzione PREV tramite altre funzioni...

Spero di esser stato più chiaro, ma la cosa non mi rimane del tutto facile da spiegarsi in maniera compiuta e lineare.


Grazie ancora.
 
Scritto da Leon Fiora

.....
Ad esempio, il classico indicatore On Balance Volume, in linguaggio Metastock sarebbe scritto come:

(if(C>ref(C,-1),1,-1)*volume)+PREV

ovvero: se C è maggiore di C alla barra precedente (questo è proprio il suo esempio), allora scrivi 1, altrimenti -1 e moltiplica per il volume.

Somma poi questo primo risultato a quello assunto dalla stessa formula completa al periodo precedente (PREV appunto).

......
Ho capito. Non c'e' in VT un sistema del genere, e per ora non e' nei lavori previsti.

In linea di massima VT adotta lo stile di linguaggio "esteso" di TradeStation, per evitare i "blocchi" compatti di codice di Metastock.

Chi si trova bene con Metastock apprezza il poco codice necessario per raggiungere determinati obiettivi, chi si trova bene con TradeStation apprezza la grande chiarezza del codice, anche se di solito piu' lungo.

VT Utilizza questo secondo approccio, anche se ovviamente sono benvenuti tutti i consigli e suggerimenti di migliorie.
Dato che ha usato come esempio l'OBV, vediamo come implementarlo in VT, per mostrare l'alternativa al codice che ha postato.

----------------------------------------------------------
// OnBalanceVolume (formula ridotta.....)
// calcola e aggiunge al grafico l'oscillatore OBV
//
var: sommavol(0),
  Indzona1;

// calcoli...
if c > c[1] then
   sommavol = sommavol + V;
else
   sommavol = sommavol - V;
endif;

// disegna in fondo al grafico l'oscillatore
Indzona1 = CreateViewport(100, true, true);
PlotChart(sommavol, Indzona1, red, solid, 2);
----------------------------------------

Ovviamente se siamo amanti della "densita'" possiamo anche compattare un poco:

----------------------------------------------------------
var: sommavol(0),
  Indzona1;

if c > c[1] then sommavol = sommavol + V;
else sommavol = sommavol - V;
endif;

Indzona1 = CreateViewport(100, true, true);
PlotChart(sommavol, Indzona1, red, solid, 2);
----------------------------------------
Non cambia molto, ovviamente.

Tra l'altro, la formula estesa dell'OBV sarebbe:

if c > c[1] then
   sommavol = sommavol + V;
else
   if c < c[1] then
     sommavol = sommavol - V;
   else
     sommavol = sommavol + (sommavol[2] - sommavol[1] );
   endif;
endif;

e cioe' se (raramente) i due CLOSE sono uguali allora si prende la differenza volumi dei due giorni precedenti.

Concludendo: non esiste l'autoreferenza alla formula, si utilizzano variabili di appoggio. Il tutto e' piu' lungo, ma secondo me piu' chiaro.

cordialita'
Mauro Pratelli
TraderLink
 
Scritto da mauro.pratelli
Ho capito. Non c'e' in VT un sistema del genere, e per ora non e' nei lavori previsti.

In linea di massima VT adotta lo stile di linguaggio "esteso" di TradeStation, per evitare i "blocchi" compatti di codice di Metastock.

Chi si trova bene con Metastock apprezza il poco codice necessario per raggiungere determinati obiettivi, chi si trova bene con TradeStation apprezza la grande chiarezza del codice, anche se di solito piu' lungo.

VT Utilizza questo secondo approccio, anche se ovviamente sono benvenuti tutti i consigli e suggerimenti di migliorie.
Dato che ha usato come esempio l'OBV, vediamo come implementarlo in VT, per mostrare l'alternativa al codice che ha postato.

----------------------------------------------------------
// OnBalanceVolume (formula ridotta.....)
// calcola e aggiunge al grafico l'oscillatore OBV
//
var: sommavol(0),
  Indzona1;

// calcoli...
if c > c[1] then
   sommavol = sommavol + V;
else
   sommavol = sommavol - V;
endif;

// disegna in fondo al grafico l'oscillatore
Indzona1 = CreateViewport(100, true, true);
PlotChart(sommavol, Indzona1, red, solid, 2);
----------------------------------------

Ovviamente se siamo amanti della "densita'" possiamo anche compattare un poco:

----------------------------------------------------------
var: sommavol(0),
  Indzona1;

if c > c[1] then sommavol = sommavol + V;
else sommavol = sommavol - V;
endif;

Indzona1 = CreateViewport(100, true, true);
PlotChart(sommavol, Indzona1, red, solid, 2);
----------------------------------------
Non cambia molto, ovviamente.

Tra l'altro, la formula estesa dell'OBV sarebbe:

if c > c[1] then
   sommavol = sommavol + V;
else
   if c < c[1] then
     sommavol = sommavol - V;
   else
     sommavol = sommavol + (sommavol[2] - sommavol[1] );
   endif;
endif;

e cioe' se (raramente) i due CLOSE sono uguali allora si prende la differenza volumi dei due giorni precedenti.

Concludendo: non esiste l'autoreferenza alla formula, si utilizzano variabili di appoggio. Il tutto e' piu' lungo, ma secondo me piu' chiaro.

cordialita'
Mauro Pratelli
TraderLink

In effetti è come dice lei (e senz'altro il linguaggio di Trade Station è in questo senso preferibile); ma è comunque e sempre possibile utilizzare variabili d'appoggio ?

Ad esempio, nella formula del trailing stop (e reverse) su ritracciamento di una certa percentuale (Perc=5), è possibile secondo lei tradurre il tutto senza l'autoreferenza PREV ?

Capisco che è un esercizio un po' complicato (soprattutto per il tempo che richiede), ma io purtroppo non ci sono riuscito.

Le sarei grato se anche solo mi dicesse se secondo lei è possibile o meno...

----------------------------------------------------------------------------------

Perc:=5;


If(
C=PREV,
PREV,
If(
((Ref(C,-1)<PREV)AND (C<PREV)),
Min(PREV,C*(1+Perc/100)),
If(
(Ref(C,-1)>PREV) AND (C>PREV),
Max(PREV,C*(1-Perc/100)),
If(
C>PREV,
C*(1-Perc/100),
C*(1+Perc/100)
)
)
)
)

-----------------------------------------------------------------------------------

Grazie di nuovo.
 
Scritto da Leon Fiora
In effetti è come dice lei (e senz'altro il linguaggio di Trade Station è in questo senso preferibile); ma è comunque e sempre possibile utilizzare variabili d'appoggio ?

Ad esempio, nella formula del trailing stop (e reverse) su ritracciamento di una certa percentuale (Perc=5), è possibile secondo lei tradurre il tutto senza l'autoreferenza PREV ?

Capisco che è un esercizio un po' complicato (soprattutto per il tempo che richiede), ma io purtroppo non ci sono riuscito.

Le sarei grato se anche solo mi dicesse se secondo lei è possibile o meno...

----------------------------------------------------------------------------------

Perc:=5;


If(
C=PREV,
PREV,
If(
((Ref(C,-1)<PREV)AND (C<PREV)),
Min(PREV,C*(1+Perc/100)),
If(
(Ref(C,-1)>PREV) AND (C>PREV),
Max(PREV,C*(1-Perc/100)),
If(
C>PREV,
C*(1-Perc/100),
C*(1+Perc/100)
)
)
)
)

-----------------------------------------------------------------------------------

Grazie di nuovo.
Non conoscendo il linguaggio di Metastock non riesco a seguire la formula.La cosa migliore e' postarne una "traduzione" in italiano,
del tipo

se la media mobile xxx e
l'rsi supera il valore di e il close
allora ....

cordialita'
Mauro Pratelli
 
Scritto da mauro.pratelli
Non conoscendo il linguaggio di Metastock non riesco a seguire la formula.La cosa migliore e' postarne una "traduzione" in italiano,
del tipo

se la media mobile xxx e
l'rsi supera il valore di e il close
allora ....

cordialita'
Mauro Pratelli

OK, grazie: avevo utilizzato le righe multiple indentate proprio per facilitare la comprensione dell’algoritmo, ma in effetti ciò può a volte complicare la cosa, anziché facilitarla.


Obiettivo: il nostro algoritmo ci deve fornire un trailing stop che inverte la posizione long/short (tipo parabolic SAR, ma molto più semplice come concetto) su banale ritracciamento del 5% da un minimo/massimo relativo.

In pratica si tratta di costruire uno Stop e Reverse tale per cui ci basta un ritracciamento del 5% dall'ultimo max/min relativo per invertire la posizione (tipo zig zag per indenderci) .


Definiamo innanzitutto la variabile Perc:

Perc=5

(ci aspettiamo un ritracciamento del 5% prima d’invertire il senso – long/short – del nostro trailing stop)

If(
C=PREV,
PREV,
If(
((Ref(C,-1)<PREV)AND (C<PREV)),
Min(PREV,C*(1+Perc/100)),
If(
(Ref(C,-1)>PREV) AND (C>PREV),
Max(PREV,C*(1-Perc/100)),
If(
C>PREV,
C*(1-Perc/100),
C*(1+Perc/100)
)
)
)
)

Se la nostra chiusura attuale (C) è uguale (=) al valore della nostra formula alla barra precedente (PREV) allora scrivi PREV;

altrimenti (,)

se la nostra chiusura precedente (ref(C,-1) è minore (<) di PREV e (AND) la nostra chiusura attuale (C) è minore di PREV, allora scrivi il minimo (min) tra PREV e C più il 5% di C (C*(1+Perc/100)),

altrimenti (,)

se la nostra chiusura precedente (ref(C,-1) è maggiore (>) di PREV e (AND) la nostra chiusura attuale (C) è maggiore di PREV, allora scrivi il massimo (max) tra PREV e C meno il 5% di C (C*(1-Perc/100)),

altrimenti (,)

se la nostra chiusura attuale (C) è maggiore (>) di PREV allora
scrivi C meno il 5% di C (C*(1-Perc/100)), altrimenti (,)
scrivi C più il 5% di C (C*(1+Perc/100)).

Forse è l'eccessiva nidificazione che può portarci fuori strada nello scrivere l'algoritmo in maniera compatta alla Metastock, ma sono convinto che il concetto in sè è molto, molto semplice e lineare; e senz'altro riproducibile in VT senza ricorrere all'autoreferenzialità di PREV .

Grazie di cuore dell'attenzione.
 
ho modificato i parametri del macd (8/21) e del signal (5)
del ts fornito in vt "macd con signal.TTS" e lasciato invariato il resto

SECTION_ENTERLONG:
// Acquistiamo se il valore del MACD e' maggiore del suo Signal
if val_macd > val_signal then
EnterLong(NextBar, AtOpen); // COMPRA

ho testato il ts su bnl e ho notato che il 17/05 entra in acquisto nonostante il 14/05 non si siano realizzate le condizioni del ts, almeno considerando i dati in eod.

saluti e buon lavoro
 

Allegati

  • bnl.gif
    25,8 KB · Visite: 269
Una corretta prova da fare sarebbe quella di aggiungere in coda alla formula macd con signal.tts questo codice:



ixV = createviewport(100, true, true);
plotchart(val_macd, ixV, blue solid, 1);
plotchart(val_signal, ixV, red, solid, 1);

la variabile ixV va dichiarata in testa alla formula.

In questa maniera verranno visualizzati gli oscillatori effettivamente usati nel calcolo della formula. Provi a rifare il controllo ed eventualmente ci rimandi l'immagine del grafico.

Cordiali saluti,
Staff Traderlink
 
Scritto da Leon Fiora
OK, grazie: avevo utilizzato le righe multiple indentate proprio per facilitare la comprensione dell’algoritmo, ma in effetti ciò può a volte complicare la cosa, anziché facilitarla.

Il Suo esempio indentato era perfetto.. sono io che non conosco affatto la sintassi di Metastock.....

Vediamo un po' : per tentare di traslare la funzione utilizzo una variabile (val_finale) in cui vado a "scrivere" il risultato della catena di IF.
Poi immagino che sul risultato in val_finale occorra innescare la decisione di trading, ad esempio:
if val_finale < 0 then ..... etc. etc.

Do per definita la variabile "Perc" inizializzata a 5 .

Prendo il Suo esempio scritto, riga per riga:


Se la nostra chiusura attuale (C) è uguale (=) al valore della nostra formula alla barra precedente (PREV) allora scrivi PREV;


che trascrivo in

  if C = val_finale[1] then
    val_finale = val_finale[1];
  endif;


se la nostra chiusura precedente (ref(C,-1) è minore (< ) di PREV e (AND) la nostra chiusura attuale (C) è minore di PREV, allora scrivi il minimo

(min) tra PREV e C più il 5% di C (C*(1+Perc/100)),

lo trascrivo in :

if C[1] < val_finale[1] and C < val_finale[1] then
  val_finale = Min(val_finale[1] ,C*(1+Perc/100));
endif;

Quindi vediamo che la variabile "val_finale" riportata alla barra prima "val_finale[1]" di fatto sostituisce il token PREV.


se la nostra chiusura precedente (ref(C,-1) è maggiore (> ) di PREV e (AND) la nostra chiusura attuale (C) è maggiore di PREV, allora scrivi il

massimo (max) tra PREV e C meno il 5% di C (C*(1-Perc/100)),

lo trascrivo in:

  if C[1] > val_finale[1] and C > val_finale[1] then
    val_finale = Max(val_finale[1],C*(1-Perc/100));
  endif;



se la nostra chiusura attuale (C) è maggiore (> ) di PREV allora
scrivi C meno il 5% di C (C*(1-Perc/100)), altrimenti (,)
scrivi C più il 5% di C (C*(1+Perc/100)).


if C > val_finale[1] then
    val_finale = C*(1-Perc/100);
else
    C*(1+Perc/100) ;
endif;

Il risultato finale e' questo:

---------------------------
Var: Perc(5),
val_finale(0);

  if C = val_finale[1] then
    val_finale = val_finale[1];
  endif;

  if C[1] < val_finale[1] and C < val_finale[1] then
    val_finale = Min(val_finale[1] ,C*(1+Perc/100));
  endif;

  if C[1] > val_finale[1] and C > val_finale[1] then
    val_finale = Max(val_finale[1],C*(1-Perc/100));
  endif;

  if C > val_finale[1] then
    val_finale = C*(1-Perc/100);
  else
    C*(1+Perc/100) ;
  endif;
---------------------------
Attenzione: Non ho fatto prove di congruenza della catena di IF, ho solo trascritto il sorgente "a pezzi"....
Il codice postato non ha molto significato in VT, nel senso che (salvo miei errori...) alla fine degli IF ci troviamo la variabile val_finale valorizzata.
Occorre poi attaccarci le condizioni BUY / SELL / EXIT ....


cordialita'
Mauro Pratelli
TraderLink
 
Scritto da mauro.pratelli
Il Suo esempio indentato era perfetto.. sono io che non conosco affatto la sintassi di Metastock.....

Vediamo un po' : per tentare di traslare la funzione utilizzo una variabile (val_finale) in cui vado a "scrivere" il risultato della catena di IF.
Poi immagino che sul risultato in val_finale occorra innescare la decisione di trading, ad esempio:
if val_finale < 0 then ..... etc. etc.

Do per definita la variabile "Perc" inizializzata a 5 .

Prendo il Suo esempio scritto, riga per riga:




che trascrivo in

  if C = val_finale[1] then
    val_finale = val_finale[1];
  endif;



lo trascrivo in :

if C[1] < val_finale[1] and C < val_finale[1] then
  val_finale = Min(val_finale[1] ,C*(1+Perc/100));
endif;

Quindi vediamo che la variabile "val_finale" riportata alla barra prima "val_finale[1]" di fatto sostituisce il token PREV.



lo trascrivo in:

  if C[1] > val_finale[1] and C > val_finale[1] then
    val_finale = Max(val_finale[1],C*(1-Perc/100));
  endif;





if C > val_finale[1] then
    val_finale = C*(1-Perc/100);
else
    C*(1+Perc/100) ;
endif;

Il risultato finale e' questo:

---------------------------
Var: Perc(5),
val_finale(0);

  if C = val_finale[1] then
    val_finale = val_finale[1];
  endif;

  if C[1] < val_finale[1] and C < val_finale[1] then
    val_finale = Min(val_finale[1] ,C*(1+Perc/100));
  endif;

  if C[1] > val_finale[1] and C > val_finale[1] then
    val_finale = Max(val_finale[1],C*(1-Perc/100));
  endif;

  if C > val_finale[1] then
    val_finale = C*(1-Perc/100);
  else
    C*(1+Perc/100) ;
  endif;
---------------------------
Attenzione: Non ho fatto prove di congruenza della catena di IF, ho solo trascritto il sorgente "a pezzi"....
Il codice postato non ha molto significato in VT, nel senso che (salvo miei errori...) alla fine degli IF ci troviamo la variabile val_finale valorizzata.
Occorre poi attaccarci le condizioni BUY / SELL / EXIT ....


cordialita'
Mauro Pratelli
TraderLink

La ringrazio: sapevo che sarebbe riuscito tranquillamente nella traduzione.

Ciò non può che stimolare un ulteriore impegno nello studio di VT e l'ennesimo rinnovo della stima e gratitudine nei confronti di un professionista serio e preparato come lei (anche se mi riservo ovviamente ulteriori interventi in merito).

Buon fine settimana.
 
Indietro