Insider 3000 - Forums
Insider 3000 - Forums
Home | Profile | Active Topics | Members | Search | FAQ
 All Forums
 Problemi con "Insider 3000 versione 3"
 Problemi col linguaggio di programmazione
 Come settare uno Stop loss costante

Note: You must be registered in order to post a reply.

Screensize:
UserName:
Password:
Format Mode:
Format: BoldItalicizedUnderlineStrikethrough Align LeftCenteredAlign Right Horizontal Rule Insert HyperlinkInsert Email Insert CodeInsert QuoteInsert List
   
Message:

* HTML is OFF
* Forum Code is ON
Smilies
Smile [:)] Big Smile [:D] Cool [8D] Blush [:I]
Tongue [:P] Evil [):] Wink [;)] Clown [:o)]
Black Eye [B)] Eight Ball [8] Frown [:(] Shy [8)]
Shocked [:0] Angry [:(!] Dead [xx(] Sleepy [|)]
Kisses [:X] Approve [^] Disapprove [V] Question [?]

   
   

T O P I C    R E V I E W
apietrop Posted - 16 April 2007 : 10:35:07
Perdonate la probabile banalità della domanda che sto per porre.
Sulla base dell'esempio di TS "Moving Average" che assume posizioni lunghe al verificarsi di una certa condizione (Close > MovAv(Close,n) con n numero di periodi si cui calcolare la media mobile) vorrei settare, in entrata sulla posizione lunga, uno stop loss proporzionale al Close di entrata in posizione e mantenere tale stop loss costante per tutta la durata della posizione.

Se lego il settaggio dello stop loss alla verifica del test della condizione di entrata lunga, lo stop loss cambierà continuamente ad ogni periodo per tutta la durata della posizione.

Ho provato ad usare BarSince come contatore del numero di periodi da quando si è entrati in posizione lunga e quindi cambiare lo stop loss solo se è verificata la condizione di entrata in posizione AND BarSince restituisce il valore 1.
Sembra però che BarSince, in fase di debug, non dia mai il valore 1 anche la prima volta che la condizione di entrata in posizione lunga è verificata.

Segue il codice che ho scritto sul modulo di entrata in posizione lunga:

Dim StopLossvar as Numeric

Function main()

If (Close > Moveav(Close, Opt1)) Then
If (BarSince(Close > Moveav(Close, Opt1)) = 1) Then
StopLossvar = 0.9 * Close
EndIf
EndIf

Return Close > Moveav(Close, Opt1)

Endfunction


Grazie mille
Andrea

6   L A T E S T    R E P L I E S    (Newest First)
apietrop Posted - 16 April 2007 : 14:19:55
OK,
conoscere in maggior dettaglio le logiche algoritmiche con cui il test di un TS viene implementato in Insider3000 aiuta molto la codifica del TS stesso.

Probabilmente mi era sfuggita quest'informazione dalla lettura dell'Help del programma.

Ti ringrazio di nuovo per le tue illuminanti delucidazioni e per il tempo che mi hai dedicato.

A presto
Andrea

Andrea

SupportoTecnico Posted - 16 April 2007 : 14:03:19
Si esatto.

In generale diciamo che:

* il modulo "Entra in acquisto" viene eseguito solo se:

1) non ci sono posizioni aperte
2) sei in posizione Corta


* il modulo "Entra in vendita" viene eseguito solo se:

1) non ci sono posizioni aperte
2) sei in posizione Lunga


* il modulo "Chiudi posizione in acquisto" viene eseguito solo se:

1) c'è una posizione Lunga aperta


* il modulo "Chiudi posizione in vendita" viene eseguito solo se:

1) c'è una posizione Corta aperta

apietrop Posted - 16 April 2007 : 12:58:34
Bene.
Il tuo nota bene finale è molto molto importante, perchè aiuta a capire come il debug va utilizzato/interpretato.

In debug su ogni modulo si vedono i risultati del codice del modulo ad ogni periodo; mi ero pertanto convinto che in fase di test di un TS, in corrispondenza di ogni periodo tutti i moduli (entra in acquisto, esci da acquisto, entra in vendita ed esci da vendita) venissero analizzati.

Se capisco bene, quando scatta il segnale di un certo modulo (ad es. entra in acquisto) tale modulo non viene più analizzato per tutti i periodi successivi fintantochè non scatta il suo modulo "duale" (in questo caso esci da acquisto).

Mi confermi questa "visione"?.

Andrea





SupportoTecnico Posted - 16 April 2007 : 12:42:58
In effetti davo per scontato che una volta colto il suggerimento avresti tolto il BarSince da solo in quanto non serve a niente.

In pratica puoi scrivere il tutto così:


Function main()
Dim bSignal as Boolean = False

bSignal = (Close > Moveav(Close, Opt1))
if (bSignal = True) then
StopLossvar = 0.9 * Close
EndIf
Return bSignal
Endfunction


N.B. Una volta entrato lungo il modulo "Entra in acquisto" non viene più eseguito fino a che non chiudi la posizione lunga.
apietrop Posted - 16 April 2007 : 12:06:52
Grazie davvero per la veloce risposta. La proverò appena possibile.

Mi chiedo anche se esiste un modo di codificare il problema più "elegante" e che non abbia bisogno di speciali funzioni come BarSince (senza BarSince non saprei davvero come fare). Immagino si dovrebbe creare un contatore di periodi in cui si è in una certa posizione.

Saluti

SupportoTecnico Posted - 16 April 2007 : 11:39:16
Devi semplicemente dichiarare la variabile StopLossvar nel modulo "Opzioni Comuni". In questo modo diventa una variabile accessibile da tutti i moduli (sia in lettura che in scrittura) e il suo valore viene mantenuto.

Quindi sposta la riga:

Dim StopLossvar as Numeric

in "Opzioni Comuni".

Poi setterai la variabile al valore che vuoi nel modulo "entra in acquisto" e la userai per lo stop loss nel modulo "Chiudi posizioni in acquisto".


Insider 3000 - Forums © Copyright 2003-2016 Tradersoft s.r.l. Go To Top Of Page
Powered By: Snitz Forums 2000 Version 3.4.07