Visual Trader T.S. : Problemi & Soluzioni

S.L. ad inseguimento....

Mi indicate come inserire sul T.S. la formula (meglio con qualche esempio pratico) dello S.L. ad inseguimento dato che non sono stato in grado di farlo fino ad ora ? Grazie...
 
alfa46 ha scritto:
Per aggiungere un titolo al tabellone Esport Dati DDE devi selezionarlo dal tabellone dei prezzi col tasto destro del mouse e selzionare la voce DDE Aggiungi/Rimuovi.

Grazie molto gentile.
 
S.L. ed esempio errato

Mi indicate come inserire lo S.L. ad inseguimento nel T.S. dato che ci provo da un pò di giorni (ma senza risultato) :wall:?, ho cercato di seguire anche un vostro esempio, ma ahimè mi son reso conto che anche un vostro esempio era errato, :mmmm: mi indicate una via d'uscita? il vostro esempio è:
{******************************************************************************
*** Esempio di formula di Trading System
*******************************************************************************}
Var: media1(0),media2(0), // Valore delle medie mobili
valstop(0), // valore di stop-loss iniziale
newstop(0); // Nuovo ipotetico valore di stop

// Calcolo delle due Media mobili
media1 = Mov(C, 10, S); // Media piu' veloce
media2 = Mov(C, 20, S); // Media piu' lenta


SECTION_ENTERLONG:
// Acquistiamo se la media veloce sale oltre la media breve
if media1 > media2 then
EnterLong(NextBar, AtOpen); // COMPRA
valstop = AddPerc(C, -3); // Stop-Loss:il close di adesso meno il 3%
endif;

END_SECTION


SECTION_EXITLONG:
// Ricalcolo quello che potrebbe essere il nuovo valore di stop-loss,
// per inseguire l'eventuale trend ascendente, accettando un ristorno
// massimo del 3%: in quel caso vendiamo "domani", in apertura.
//
newstop= AddPerc(C, -3);

// Il nuovo livello di stop ricalcolato e' maggiore di quello attuale ?
// In questo caso significa che il titolo sta salendo....
//
if newstop > valstop then
valstop = newstop; // Ok, accettiamo il nuovo livello di stop
endif;

// Se il titolo scende sotto lo stop, o la media veloce scende sotto la
// media lenta, allora liquidiamo le posizioni aperte
//
if C < valstop or media1 < media2 then or if media1> media2 then

ExitLong(NextBar, AtOpen); // Liquida posizione long
endif;

END_SECTION

Grazie........ :bow:
 
Ultima modifica:
Ci sono vari modi

Gentile Sig. Renegade,
ci sono vari modi di realizzare quello che Lei chiede ma occorrono informazioni ulterioro perchè la programamzione di un trading system è una cosa precisa e non si può procedere a spanne, purtroppo. Nel suo caso in base a quale dinamica vuole modificare il livello di stop e legandolo a quale parametro? (se il trade procede nella direzione a noi favorevole si può ad esempio modificare lo stop loss fino a farlo diventare stop profit utilizzando l'atr, parametri "naturali quali il minimo del giorno precedente, o floor a gradini OK! )
Cordiali saluti,
em
 
EnMal ha scritto:
Gentile Sig. Renegade,
ci sono vari modi di realizzare quello che Lei chiede ma occorrono informazioni ulterioro perchè la programamzione di un trading system è una cosa precisa e non si può procedere a spanne, purtroppo. Nel suo caso in base a quale dinamica vuole modificare il livello di stop e legandolo a quale parametro? (se il trade procede nella direzione a noi favorevole si può ad esempio modificare lo stop loss fino a farlo diventare stop profit utilizzando l'atr, parametri "naturali quali il minimo del giorno precedente, o floor a gradini OK! )
Cordiali saluti,
em

beh quel che chiedo io è qualcosa di molto più semplice di quel che dice lei e nonostante tutto non sono ancora in grado di farlo :'( , ho fatto diverse prove (oltre 30) ma nulla, cque quel che chiedo io è un esempio semplice di un ts(funzionante) che mi vada in acquisto quando una MM (per esempio a 10) si incrocia su un'altra(per esempio a 20) e va in vendita quando scatta lo S.L. che deve essere per esempio di 4 tick, in più....questo S.L. deve essere ad inseguimento, nel senso che se per esempio il trend è al rialzo dopo il mio acquisto lo S.L. deve spostarsi di volta in volta fino a quando vengono "bruciati" i 4 tick.....
 
Rerenegade ha scritto:
beh quel che chiedo io è qualcosa di molto più semplice di quel che dice lei e nonostante tutto non sono ancora in grado di farlo :'( , ho fatto diverse prove (oltre 30) ma nulla, cque quel che chiedo io è un esempio semplice di un ts(funzionante) che mi vada in acquisto quando una MM (per esempio a 10) si incrocia su un'altra(per esempio a 20) e va in vendita quando scatta lo S.L. che deve essere per esempio di 4 tick, in più....questo S.L. deve essere ad inseguimento, nel senso che se per esempio il trend è al rialzo dopo il mio acquisto lo S.L. deve spostarsi di volta in volta fino a quando vengono "bruciati" i 4 tick.....

Nel codice modificato ci sono alcuni errori concettuali ed alcuni di sintassi. Il cross di medie mobili in genere consiglio di codificarlo come segue:

Var: Valstop, // stop loss iniziale,
pv, // positionvalue
media1,
media2;

// Calcolo delle due Media mobili
media1 = Mov(C, 10, S); // Media piu' veloce
media2 = Mov(C, 20, S); // Media piu' lenta
pv = positionvalue;
SECTION_ENTERLONG:
If Crossover(media1, media2) Then
Enterlong(nextbar, atopen);// Ingresso long
valstop = AddPerc(pv, -3); // Stop-Loss:il prezzo d'ingresso meno il 3%
Endif;
END_SECTION

Utilizzando il simbolo di > anzichè il crossover potrebbe capitare di avere continui rientri nella stessa direzione se veniamo stoppati e la media veloce è ancora sopra alla lenta. In questo caso funzionerebbe comunque discretamente perchè la condizione d'uscita prevede che la media veloce sia scesa sotto alla lenta (in alternativa al 3% di perdita).

Si ricordi che non si possono inserire degli operatori relazionali, quali and od or, dopo un THEN. L'editor le segnerà sempre errore. OK!
Lo stop ad inseguire si potrebbe codificare in modo abbastanza grezzo ma efficace nel seguente modo, ipotizzando di avere chiusure crescenti lo stop viene riacalcolato sull'ultima chiusura:

If PositionDir = 1 and C > C[1] and C > Pv Then
valstop = addPerc(C, -3);
Endif;

Recentemente però sono state apportate modifiche alla sintassi per cui io le consiglio di utilizzare le nuove funzioni perle uscite che sono più precise ed affidabili (ed anche intuitive) :yes: .
Per lo stop loss la funzione è INSTALLSTOPLOSS(INPERC, 3)
(calcola uno stop loss del 3% anche a barra aperta senza necessariamente dover aspettare la chiusura della barra per dare il segnale d'uscita)
Per il trailing stop, con cui lei potrebbe realizzare un trailing molto preciso calcolando il guadagno della posizione aperta e regolando il trailing di conseguenza, può usare INSTALLTRAILINGPROFIT(INPERC, 3, 1.5),
(se la sua posizione arriva ad un guadagno pari o maggiore del 3% chiude la posizione se il mercato ritraccia dell'1,5%). Stop, trailing e target possono essere calcolati anche in valore economico e in punti. In questo modo potrebbe utilizzare una serie di condizioni ad inseguimento per cui se il guadagno è tot, esce su un ritracciamento di x, se il guadagno diventa tot+1 esce su un ritracciamento y
Cordiali saluti,
em
 
EnMal ha scritto:
Nel codice modificato ci sono alcuni errori concettuali ed alcuni di sintassi. Il cross di medie mobili in genere consiglio di codificarlo come segue:

Var: Valstop, // stop loss iniziale,
pv, // positionvalue
media1,
media2;

// Calcolo delle due Media mobili
media1 = Mov(C, 10, S); // Media piu' veloce
media2 = Mov(C, 20, S); // Media piu' lenta
pv = positionvalue;
SECTION_ENTERLONG:
If Crossover(media1, media2) Then
Enterlong(nextbar, atopen);// Ingresso long
valstop = AddPerc(pv, -3); // Stop-Loss:il prezzo d'ingresso meno il 3%
Endif;
END_SECTION

Utilizzando il simbolo di > anzichè il crossover potrebbe capitare di avere continui rientri nella stessa direzione se veniamo stoppati e la media veloce è ancora sopra alla lenta. In questo caso funzionerebbe comunque discretamente perchè la condizione d'uscita prevede che la media veloce sia scesa sotto alla lenta (in alternativa al 3% di perdita).

Si ricordi che non si possono inserire degli operatori relazionali, quali and od or, dopo un THEN. L'editor le segnerà sempre errore. OK!
Lo stop ad inseguire si potrebbe codificare in modo abbastanza grezzo ma efficace nel seguente modo, ipotizzando di avere chiusure crescenti lo stop viene riacalcolato sull'ultima chiusura:

If PositionDir = 1 and C > C[1] and C > Pv Then
valstop = addPerc(C, -3);
Endif;

Recentemente però sono state apportate modifiche alla sintassi per cui io le consiglio di utilizzare le nuove funzioni perle uscite che sono più precise ed affidabili (ed anche intuitive) :yes: .
Per lo stop loss la funzione è INSTALLSTOPLOSS(INPERC, 3)
(calcola uno stop loss del 3% anche a barra aperta senza necessariamente dover aspettare la chiusura della barra per dare il segnale d'uscita)
Per il trailing stop, con cui lei potrebbe realizzare un trailing molto preciso calcolando il guadagno della posizione aperta e regolando il trailing di conseguenza, può usare INSTALLTRAILINGPROFIT(INPERC, 3, 1.5),
(se la sua posizione arriva ad un guadagno pari o maggiore del 3% chiude la posizione se il mercato ritraccia dell'1,5%). Stop, trailing e target possono essere calcolati anche in valore economico e in punti. In questo modo potrebbe utilizzare una serie di condizioni ad inseguimento per cui se il guadagno è tot, esce su un ritracciamento di x, se il guadagno diventa tot+1 esce su un ritracciamento y
Cordiali saluti,
em

La ringrazio, le sue spiegazioni sono state molto chiare, infatti ho rilevato delle imperfezioni nel mio T.S. tuttavia non mi è chiara ancora una cosa ossia la differenza che c'è se scrivo :

valstop=Addtick(C,-6) ; e
valstop=Addtick(PositionValue, -6) ;

infatti ho l'impressione che il TS si comporti in modo esattamente uguale....dimenticavo, ho provato a scrivere sia la funzione INSTALLSTOPLOSS che INSTALLTRAILINGPROFIT ma non me li riconosce(la scritta rimane nera) a cosa è dovuto? la causa può essere che ho del V.T. la versione 4.4.6 SP3 standard e non la 4.4.7 beta? ancora infinitamente grazie....
 
Rerenegade ha scritto:
La ringrazio, le sue spiegazioni sono state molto chiare, infatti ho rilevato delle imperfezioni nel mio T.S. tuttavia non mi è chiara ancora una cosa ossia la differenza che c'è se scrivo :

valstop=Addtick(C,-6) ; e
valstop=Addtick(PositionValue, -6) ;

infatti ho l'impressione che il TS si comporti in modo esattamente uguale....dimenticavo, ho provato a scrivere sia la funzione INSTALLSTOPLOSS che INSTALLTRAILINGPROFIT ma non me li riconosce(la scritta rimane nera) a cosa è dovuto? la causa può essere che ho del V.T. la versione 4.4.6 SP3 standard e non la 4.4.7 beta? ancora infinitamente grazie....

Scrivere valstop=Addtick(C,-6) significa che VT ad ogni barra ricalcola lo stop loss sul nuovo prezzo di chiusura (C è sempre il prezzo dell'ultima barra appena chiusa).

Scrivere valstop=Addtick(PositionValue, -6) significa calcolare lo stop loss sul prezzo d'ingresso, e questo ovviamente rimarrà invariato qualunque sia il movimento dei prezzi nelle barre successive all'ingresso.

Per quanto riguarda la scritta nera delle funzioni per le uscite non importa il colore. Anche sul mio VT la scritta rimane nera nonostante abbia l'ultimo aggiornamento disponibile. L'importante è che l'editor lo accetti. Per ulteriori delucidazioni dovrà però chiedere a TraderLink.

Per le uscite le consiglio caldamente le nuove, introdotte proprio per risolvere problemi individuati in fase di sviluppo con le vecchie. Con quelle non dovrebbe avere problemi. :yes:
Cordiali saluti,
em
 
Salve a tutti.
Scusate se posto senza aver prima letto i messaggi precedenti, dove magari lo stesso problema e' gia' stato sollevato, ma internet ma Tiscali e' una settimana che non va :mad:
Ho provato a impostare la seguente formula:
pippo=mov(R,20,S)
e rilevo un errore.
Questo:

ERRORE: Ingresso dell'Oscillatore non Valido. Impostare un parametro aprropriato. (C,L,H,O,V oppure un Oscillatore)

Allora, due osservazioni:
1) C'e' un errore nell'errore: appropriato non si scrive aprropriato :)
2) E perche' mai non dovrebbe essere possibile fare le medie dei range?
In fondo e' veramente una stupidaggine, no?

Grazie

Pierluigi
 
Pierlu1 ha scritto:
Salve a tutti.
Scusate se posto senza aver prima letto i messaggi precedenti, dove magari lo stesso problema e' gia' stato sollevato, ma internet ma Tiscali e' una settimana che non va :mad:
Ho provato a impostare la seguente formula:
pippo=mov(R,20,S)
e rilevo un errore.
Questo:

ERRORE: Ingresso dell'Oscillatore non Valido. Impostare un parametro aprropriato. (C,L,H,O,V oppure un Oscillatore)

Allora, due osservazioni:
1) C'e' un errore nell'errore: appropriato non si scrive aprropriato :)
2) E perche' mai non dovrebbe essere possibile fare le medie dei range?
In fondo e' veramente una stupidaggine, no?

Grazie

Pierluigi

Aggiungo che per il momento ho risolto facendo:
pippo=mov(H,20,s)-mov(L,20,s)
e ci sono riuscito perche' si tratta di medie semplici.
Pero' secondo me la mov del range dovrebbe essere possibile farla...
Grazie
Pierluigi
 
Pierlu1 ha scritto:
Aggiungo che per il momento ho risolto facendo:
pippo=mov(H,20,s)-mov(L,20,s)
e ci sono riuscito perche' si tratta di medie semplici.
Pero' secondo me la mov del range dovrebbe essere possibile farla...
Grazie
Pierluigi

Grazie per il suggerimento,
Prenderemo in considerazione la sua richiesta.

Cordiali Saluti
Staff Traderlink
 
Nuove funzioni...

E possibile postare un esempio funzionante completo delle nuove funzioni InstallStopLoss e InstallTrailingstop dato che non riesco ad applicarle neanche nel mio esempio (*) e che anche dai due esempi immessi nel 447 beta 2 non mi risultano chiari in quando non si capisce dove bisogna inserirle (se nelle variabili, se nella funzione ExitLong, se in tutt'e due ecc)

N.B Dò per scontato che al posto di usare lo S.L in percentuale Es: InstallTrailingprofit(Inperc, 3, ValtakeRitracc) mi funziona lo stesso se uso lo S.L. in Tick Es: InstallTrailingprofit(Intick, 3, ValtakeRitracc) ....un grazie a chiunque volglia aiutarmi


{******************************************************************************
*** Esempio ceh nn funziona :'( di formula di Trading System
*******************************************************************************}
Var: media1(0),media2(0), // Valore delle medie mobili
valstop(3), // valore di stop-loss iniziale
ValTakeRitracc(3); // Nuovo ipotetico valore di stop


media1 = Mov(C, 10, S); // Media piu' veloce
media2 = Mov(C, 20, S); // Media piu' lenta
installTrailingprofit(InTick, 3 , Valtakeritracc);
InstallStopLoss(InTick, 3);

SECTION_ENTERLONG:

if Crossover(media1, media2) then
EnterLong(NextBar, AtOpen); // COMPRA
InstallTrailingProfit(inTick, 3, ValtakeRitracc );
InstallStopLoss(InTick, Valstop);

endif;

END_SECTION


SECTION_EXITLONG:
if ValtakeRitracc > valstop then
valstop=ValtakeRitracc;
endif ;


if L < Valstop then

ExitLong(NextBar, AtOpen); // Liquida posizione long
endif;

END_SECTION
 
Ultima modifica:
Scusate la seconda intrusione.
Premetto che non credo di essere un betatester perche' la mia versione di VT e l'editor TS li ho trovati nel CD allegato a una rivista, e non sono riuscito a capire come fare per diventare betatester (nella pagina di TRADERLINK non trovo nessun link; forse perche' non sono abbonato? Io mi abbonerei pure, ma prima voglio vedere se il servizio funge, ecco perche' sto provando il TS nel periodo di prova).
Comunque il problema io lo pongo, poi fate vobis.
Allora, ho scritto il mio TS che dovrebbe riconoscere un pattern ed entrare lungo di conseguenza all'apertura del giorno dopo.
Il TS funziona, ma volevo evitare di entrare lungo dopo un gap in apertura, che potrebbe essere un exhaustion gap.
Ammettiamo che io arrivi fino all'istruzione enterlong con il valore pippo che e' 1 e che significa appunto entra lungo.
Prima dell'istruzione di enterlong ho aggiunto queste tre righe:

if open[nextbar] > C then
pippo=0 ;
endif;

seguite poi ovviamente da

if pippo > 0 then
enterlong(nextbar,atopen);
endif;

Bene, la faccenda non funziona, nel senso che il TS entra lungo anche dopo un gap.

Come mai? Sbaglio la logica?
Ha senso scrivere open[nextbar]?

La versione che sto usando del TS e' la 1.7.9

Grazie
Pierluigi
 
Ultima modifica:
passando di corsa...

...dato l'orario :wall: mi riprometto di rispondere ai quesiti tecnici di entrambi lunedì, sul resto la parola va per forza a Traderlink ( ;) )...
 
Grazie enmal, aspetto ansioso. :clap:
Ora non vorrei sembrare un rompiballe, ma ci sono altre cose che non funziano, magari per colpa mia, per carita'... :bow:
Ho provato a dichiarare quattro variabili cosi':

var:_a(exp(4)/(exp(1)+exp(2)+exp(3)+exp(4)));
var:_b(exp(3)/(exp(1)+exp(2)+exp(3)+exp(4)));
var:_c(exp(2)/(exp(1)+exp(2)+exp(3)+exp(4)));
var:_d(exp(1)/(exp(1)+exp(2)+exp(3)+exp(4)));
e mi dava errore; se la riga della prima dichiarazione era la riga 40, appariva scritto:

Fine Parse:
Linea 41: Errore di sintassi: Mi aspetto i deguenti token: ,)]

Non essendomi ben chiara la sintassi, allora ho sostituito le dichiarazioni con dichiarazioni piu' generiche, cosi':
var:_a(0);
var:_b(0);
var:_c(0);
var:_d(0);
e poi nella sezione ENTERLONG ho provato a dare quei valori alle variabili (e' meno efficiente, ma magari funzia, ho pensato).
Per cui ho scritto, diciamo alla riga 81:
_a=(exp(4)/(exp(1)+exp(2)+exp(3)+exp(4)));
_b=(exp(3)/(exp(1)+exp(2)+exp(3)+exp(4)));
_c=(exp(2)/(exp(1)+exp(2)+exp(3)+exp(4)));
_d=(exp(1)/(exp(1)+exp(2)+exp(3)+exp(4)));

E qui l'errore e' diventato surreale:
Fine Parse
Linea 83: Errore di sintassi: Mi aspetto i deguenti token: ,)]

Come sarebbe linea 83?
La 82 e la 81 vanno bene, che hanno praticamente la stessa istruzione?
Mi e' sembrato un Umpredictable Behaviour, e ho provato aa cambiare qualche volta i nomi delle variabili, ma niente, si blocca sempre alla stessa riga. :wall: :wall: :wall:

Un suggerimento ora, anche se presumo che ci avrete gia' pensato, ma nel dubbio io lo butto li'....
Nell'help imho sarebbe utile mettere per le funzioni indicatori
due righe di spiegazione di come vengono calcolati, anche perche' magari capita che due autori chiamino con lo stesso nome due cose diverse (ad es. la volatilita' come viene calcolata?).
Scusate il disturbo, :bow: , vado a dormire :bye:

Pierluigi :mmmm:
 
Rerenegade ha scritto:
E possibile postare un esempio funzionante completo delle nuove funzioni InstallStopLoss e InstallTrailingstop dato che non riesco ad applicarle neanche nel mio esempio (*) e che anche dai due esempi immessi nel 447 beta 2 non mi risultano chiari in quando non si capisce dove bisogna inserirle (se nelle variabili, se nella funzione ExitLong, se in tutt'e due ecc)

N.B Dò per scontato che al posto di usare lo S.L in percentuale Es: InstallTrailingprofit(Inperc, 3, ValtakeRitracc) mi funziona lo stesso se uso lo S.L. in Tick Es: InstallTrailingprofit(Intick, 3, ValtakeRitracc) ....un grazie a chiunque volglia aiutarmi


{******************************************************************************
*** Esempio ceh nn funziona :'( di formula di Trading System
*******************************************************************************}
Var: media1(0),media2(0), // Valore delle medie mobili
valstop(3), // valore di stop-loss iniziale
ValTakeRitracc(3); // Nuovo ipotetico valore di stop


media1 = Mov(C, 10, S); // Media piu' veloce
media2 = Mov(C, 20, S); // Media piu' lenta
installTrailingprofit(InTick, 3 , Valtakeritracc);
InstallStopLoss(InTick, 3);

SECTION_ENTERLONG:

if Crossover(media1, media2) then
EnterLong(NextBar, AtOpen); // COMPRA
InstallTrailingProfit(inTick, 3, ValtakeRitracc );
InstallStopLoss(InTick, Valstop);

endif;

END_SECTION


SECTION_EXITLONG:
if ValtakeRitracc > valstop then
valstop=ValtakeRitracc;
endif ;


if L < Valstop then

ExitLong(NextBar, AtOpen); // Liquida posizione long
endif;

END_SECTION

Iniziamo da questo post:
il sistema da lei codificato si può semplificare così:

{*************************************** ***************************************
*** Esempio ceh nn funziona di formula di Trading System
**************************************** ***************************************}
Var: media1(0), media2(0), // Valore delle medie mobili
valstop(3), valtakeritracc(3);

media1 = Mov(C, 10, S); // Media piu' veloce
media2 = Mov(C, 20, S); // Media piu' lenta

SECTION_ENTERLONG:
if Crossover(media1, media2) then
EnterLong(NextBar, AtOpen); // COMPRA
Endif;
END_SECTION

InstallTrailingProfit(inTick, 3, ValtakeRitracc );
InstallStopLoss(InTick, Valstop);

Concettualmente, semplificando le cose, ogni codice deve essere strutturato nel seguente modo:
1) dichiarazione variabili
2) assegnamento variabili
3) entrate
4) uscite
quindi le nuove funzioni d'uscita vanno inserite a fine codice senza bisogno di ripeterle nella sezione exitshort ed exitlong. Valgono per entrambe le situazioni.

Spero sia più chiaro,
saluti,
em

Per il secondo quesito, le funzioni per comprare in apertura confrontando l'open con max, min o close del giorno prima sono state sostituite. Non so se nella sua versione siano già presenti (non credo) e se quelle vecchie funzionino ancora. Su queste cosela sola Traderlink è competente a rispondere.
 
Ultima modifica:
Indietro