Author |
Topic |
|
apietrop
Nuovo Utente
9 Posts |
Posted - 08 May 2007 : 23:23:37
|
Vorrei chiedere il Vs. parere sul codice Insider3000 allegato qui sotto che vuole rappresentare l'indicatore Chandelier Stop come descritto al seguente link http://www.tradingprofessionale.it/indexarticolo.php?idarea=6&idsez=33&idart=808&ids=no.
Non sono sicuro di aver correttamente traslato l'algoritmo del Chandelier nel linguaggio di Insider. Ogni commento è benvenuto, grazie.
Dim Chandelier as Numeric = 0 Dim StopLong as Numeric = 0 Dim StopShort as Numeric = 0
Function Main()
Dim Stop1 as Numeric Dim Stop2 as Numeric Dim previous_stopshort as Numeric Dim previous_stoplong as Numeric
previous_stopshort = StopShort previous_stoplong = StopLong
If (Chandelier < Low) then If (High - 3 * Atr(10) >= Chandelier) then Stop1 = High - 3 * Atr(10) else Stop1 = Chandelier endif else Stop1 = High - 3 * Atr(10) endif
If (Chandelier < Low) then If (Close - 2.5 * Atr(10) >= Chandelier) then Stop2 = Close - 2.5 * Atr(10) else Stop2 = Chandelier endif else Stop2 = Close - 2.5 * Atr(10) endif
If (Stop1 > Stop2) then StopLong = Stop1 else StopLong = Stop2 endif
If (Chandelier > High) then If (Low + 3 * Atr(10) <= Chandelier) then Stop1 = Low + 3 * Atr(10) else Stop1 = Chandelier endif else Stop1 = Low + 3 * Atr(10) endif
If (Chandelier > High) then If (Close + 2.5 * Atr(10) <= Chandelier) then Stop2 = Close + 2.5 * Atr(10) else Stop2 = Chandelier endif else Stop2 = Close + 2.5 * Atr(10) endif
If (Stop1 < Stop2) then StopShort = Stop1 else StopShort = Stop2 endif
If (BarSince(Low < previous_stoplong) > BarSince(High > previous_stopshort)) then Chandelier = StopLong else Chandelier = StopShort endif
Return Chandelier
Endfunction
|
|
SupportoTecnico
Forum Admin
1261 Posts |
Posted - 09 May 2007 : 13:43:09
|
A colpo d'occhio a me sembra corretto. Ti consiglio però di assegnare le espressioni:
2.5 * Atr(10)
e
3 * Atr(10)
a due variabili all'inizio della procedura e poi utilizzare quelle nelle varie parti del codice e non direttamente le due espressioni. Ne guadagnerai in memoria e soprattutto in velocità di esecuzione.
|
|
|
lanas
Nuovo Utente
22 Posts |
Posted - 20 September 2009 : 14:38:55
|
quote: Originally posted by SupportoTecnico
A colpo d'occhio a me sembra corretto. Ti consiglio però di assegnare le espressioni:
2.5 * Atr(10)
e
3 * Atr(10)
a due variabili all'inizio della procedura e poi utilizzare quelle nelle varie parti del codice e non direttamente le due espressioni. Ne guadagnerai in memoria e soprattutto in velocità di esecuzione.
Salve, riesco a farlo funzionare correttamente, ma quando aggiungo l'indicatore al grafico, la linea è sempre sopra il prezzo non lo incrocia mai. Mentre credo l'effetto dovrebbe essere questo
http://www.tradingprofessionale.it/magazine/money_trade_management/stop_loss_e_volatili/Fideuram_Chandelier_SH.gif
grazie
|
|
|
SupportoTecnico
Forum Admin
1261 Posts |
Posted - 20 September 2009 : 15:30:24
|
Devi settare giustamente la proprietà dell'indicatore "Usa Min-Max grafico" che trovi nel pannello di controllo tra le proprietà dell'indicatore.
La proprietà abilita l'uso dei massimi e minimi del grafico. E' molto utile per quegli indicatori che come la media mobile seguono l'andamento del grafico. |
|
|
lanas
Nuovo Utente
22 Posts |
Posted - 20 September 2009 : 16:26:56
|
quote: Originally posted by SupportoTecnico
Devi settare giustamente la proprietà dell'indicatore "Usa Min-Max grafico" che trovi nel pannello di controllo tra le proprietà dell'indicatore.
La proprietà abilita l'uso dei massimi e minimi del grafico. E' molto utile per quegli indicatori che come la media mobile seguono l'andamento del grafico.
Si l'avevo fatto...ma il problema persiste ecco uno screen
http://img84.imageshack.us/img84/9269/imgd.jpg
cosa può essere? |
|
|
SupportoTecnico
Forum Admin
1261 Posts |
Posted - 20 September 2009 : 18:09:36
|
Allora il problema non è nei settaggi delle proprietà, ma nella formula dell'indicatore. Purtroppo non conosco l'indicatore e non ti so dire dove possa essere, se c'è, l'errore logico (magari "apietrop" che ha scritto l'indicatore voleva proprio questo risultato). |
|
|
apietrop
Nuovo Utente
9 Posts |
Posted - 21 September 2009 : 13:17:30
|
ciao, considera che ho scritto il codice due anni fa e da allora dopo un primo periodo di prova non l'ho più usato.
Ricordo il problema che bvidenzi, e ricordo che feci una modifica (arbitraria) per gestire e correggere la cosa.
Il codice postato era una "traslazione secca" dal codice di un altro programma riportato nell'articolo al link, e la traslazione non funzionava come doveva (motivo per cui chiedevo al supporto tecnico un parere).
Spero di avere ancora da qualche parte del mio vecchio HD il codice "corretto"; se lo trovo te lo invio volentieri.
Saluti
|
|
|
paolog
Nuovo Utente
10 Posts |
Posted - 18 March 2010 : 08:43:02
|
Ho provato l'indicatore ed ho trovato un errore alla 7ultima riga dalla fine. tu hai scritto:
If (BarSince(Low < previous_stoplong) > BarSince(High > previous_stopshort)) then
devi invece scrivere:
If (BarSince(Low > previous_stoplong) > BarSince(High < previous_stopshort)) then
con questa correzione l'indicatore passa sopra e sotto i valori del grafico. Sarebbe utile poter variare il valore 10 di atr come input dell'utente ma non riesco a farlo.
saluti
Paolo |
|
|
SupportoTecnico
Forum Admin
1261 Posts |
Posted - 18 March 2010 : 11:26:30
|
Per rendere un parametro editabile dall'utente basta creare una Property. In pratica, aggiungi queste righe al codice dell'indicatore (esternamente alla funzione Main):
Property PeriodiATR() as Numeric Default (10) EndProperty
Poi usa PeriodiATR al posto di 10 come parametro Atr. Esempio:
If (Chandelier > High) then If (Close + 2.5 * Atr(PeriodiATR) <= Chandelier) then Stop2 = Close + 2.5 * Atr(PeriodiATR) else Stop2 = Chandelier endif else Stop2 = Close + 2.5 * Atr(PeriodiATR) endif
Salva il tutto.
Ora, dal pannello di controllo nelle proprietà dell'indicatore puoi decidere anche i periodi di ATR (per default 10).
|
|
|
paolog
Nuovo Utente
10 Posts |
Posted - 19 March 2010 : 07:52:58
|
ora funziona.... ho inserito come variabili anche i due valori 3 e 2,5 così l'indicatore si può adattare ai titoli più o meno volatili. grazie e saluti
Property PeriodiATR() as Numeric Default (10) EndProperty Property valmin() as Numeric Default (2.5) EndProperty Property valmax() as Numeric Default (3) EndProperty Dim Chandelier as Numeric = 0 Dim StopLong as Numeric = 0 Dim StopShort as Numeric = 0 Function Main() Dim Stop1 as Numeric Dim Stop2 as Numeric dim val3 as Numeric = 0 dim val25 as Numeric = 0 Dim previous_stopshort as Numeric Dim previous_stoplong as Numeric
previous_stopshort = StopShort previous_stoplong = StopLong val3 = atr(PeriodiATR) * valmax val25 = atr(PeriodiATR) * valmin
If (Chandelier < Low) then If (High - val3 >= Chandelier) then Stop1 = High - val3 else Stop1 = Chandelier endif else Stop1 = High - val3 endif If (Chandelier < Low) then If (Close - val25 >= chandelier) then Stop2 = Close - val25 else Stop2 = Chandelier endif else Stop2 = Close - val25 endif If (Stop1 > Stop2) then StopLong = Stop1 else StopLong = Stop2 endif If (Chandelier > High) then If (Low + val3 <= Chandelier) then Stop1 = Low + val3 else Stop1 = Chandelier endif else Stop1 = Low + val3 endif If (Chandelier > High) then If (Close + val25 <= Chandelier) then Stop2 = Close + val25 else Stop2 = Chandelier endif else Stop2 = Close + val25 endif If (Stop1 < Stop2) then StopShort = Stop1 else StopShort = Stop2 endif If (BarSince(Low > previous_stoplong) < BarSince(High < previous_stopshort)) then Chandelier = StopLong else Chandelier = StopShort endif Return Chandelier Endfunction |
|
|
|
Topic |
|