Insider 3000 - Forums
Insider 3000 - Forums
Home | Profile | Active Topics | Members | Search | FAQ
Username:
Password:
Save Password
Forgot your Password?

 All Forums
 Problemi con "Insider 3000 versione 3"
 Problemi col linguaggio di programmazione
 Come settare uno Stop loss costante
 New Topic  Reply to Topic
 Printer Friendly
Author Previous Topic Topic Next Topic  

apietrop
Nuovo Utente

9 Posts

Posted - 16 April 2007 :  10:35:07  Show Profile  Reply with Quote
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

SupportoTecnico
Forum Admin

1261 Posts

Posted - 16 April 2007 :  11:39:16  Show Profile  Reply with Quote
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".

Go to Top of Page

apietrop
Nuovo Utente

9 Posts

Posted - 16 April 2007 :  12:06:52  Show Profile  Reply with Quote
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

Go to Top of Page

SupportoTecnico
Forum Admin

1261 Posts

Posted - 16 April 2007 :  12:42:58  Show Profile  Reply with Quote
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.
Go to Top of Page

apietrop
Nuovo Utente

9 Posts

Posted - 16 April 2007 :  12:58:34  Show Profile  Reply with Quote
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





Go to Top of Page

SupportoTecnico
Forum Admin

1261 Posts

Posted - 16 April 2007 :  14:03:19  Show Profile  Reply with Quote
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

Go to Top of Page

apietrop
Nuovo Utente

9 Posts

Posted - 16 April 2007 :  14:19:55  Show Profile  Reply with Quote
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

Go to Top of Page
  Previous Topic Topic Next Topic  
 New Topic  Reply to Topic
 Printer Friendly
Jump To:
Insider 3000 - Forums © Copyright 2003-2016 Tradersoft s.r.l. Go To Top Of Page
Powered By: Snitz Forums 2000 Version 3.4.07