Author |
Topic  |
|
scarlet
Nuovo Utente
17 Posts |
Posted - 08 March 2004 : 10:45:36
|
buongiorno, innanzitutto i miei complimenti per questo sw in italiano, ottima idea e ottimo sw. vorrei creare una regola per la chiusura delle posizioni sia long che short da poter adattare a qualsiasi sistema. Nelle posizioni long lo stop dovrebbe entrare a Xpunti sotto il il prezzo di entrata, oppure se la posizione va in guadagno di almeno Ypunti, lo stop va messo in pari e per ogni punto ulteriore di guadagno lo stop si alza di 1 punto senza mai tornare indietro. Il contrario avverra' per la chiusura di posizioni short. X e Y dovrebbero essere dei valori variabili per poter permettere una ottimizzazione in fase di test. Spero di essere stato chiaro e che possiate aiutarmi. Grazie scarlet
|
|
SupportoTecnico
Forum Admin
1261 Posts |
Posted - 08 March 2004 : 18:58:32
|
La cosa non ? molto complicata. Per farla devi usare le variabili globali che possono cio? essere viste da qualsiasi modulo. Prova a vedere il Trading System che si chiama BreakOut_Min_Max che trovi come esempio nella finestra di "Gestione Trading Systems"
Una variabile globale va dichiarata nel modulo Opzioni Comuni:
Dim pEntryPrice As Numeric Dim pStopLong As Numeric Option OptX(1, 1000, 5) Option OptY(1, 1000, 5)
Nel modulo "Entra in acquisto" dovrai settare la variabile con il prezzo di ingresso (ovviamente in questo esempio viene omesso il codice che genera il segnale di ingresso):
Function Main() pEntryPrice = Close EndFunction
Nel Modulo "Esci da posizioni in acquisto" potresti scrivere una cosa di questo genere:
Function Main() Dim bRes as Boolean If (High > (pEntryPrice + OptY)) then gStopLong = pEntryPrice + OptY Else gStopLong = pEntryPrice EndIf bRes = False If (Low <= (pEntryPrice - OptX)) then bRes = True Else If ((High > pEntryPrice) And (Low <= gStopLong)) Then bRes = True EndIf EndIf Return bRes EndFunction
Questo ? ovviamente solo uno spunto da completare e testare, ma sufficiente per farti capire come cominciare ad scrivere la cosa.
|
 |
|
scarlet
Nuovo Utente
17 Posts |
Posted - 08 March 2004 : 23:22:41
|
Buondi', prendiamo in considerazione il TS Breakout, questo e' il codice del modulo entra in acquisto:
Function Main() Dim bResult As Boolean Dim i As Numeric Dim dTmpMax As Numeric
bResult = (Close = Max(Close, OptMax))
If (bResult = True) then dTmpMax = Close( - 1) For i = 2 to OptMax If (dTmpMax < Close( - i)) Then dTmpMax = Close( - i) EndIf Next i pdStopLossLong = dTmpMax EndIf
Price high Return bResult EndFunction
ho provato a inserire l'istruzione pEntryPrice = Close
in vari punti ma mi restituisce errore nel modulo di chiusura posizioni acquisto.
questo e' il modulo opzioni comuni:
Option OptMax(10, 20, 1) Option OptMin(10, 20, 1) Dim pdStopLossLong As Numeric Dim pdStopLossShort As Numeric
al quale ho aggiunto
Dim pEntryPrice As Numeric Dim pStopLong As Numeric Option OptX(1, 1000, 5) Option OptY(1, 1000, 5)
immagino bisognera' togliere le vechie istruzioni
Dim pdStopLossLong As Numeric Dim pdStopLossShort As Numeric
perche' riguardano la vecchia regola di uscita, ma sono presenti anche nel codice di acquisto, quindi non so proprio come fare. e poi non vorrei dire un'eresia, ma sempre nel modulo opzioni comuni non bisogna aggiungere anche
Dim pStopShort As Numeric
per la chiusura delle posizioni short? Vi sarei grato per un' ulteriore aiuto grazie scarlet
|
 |
|
SupportoTecnico
Forum Admin
1261 Posts |
Posted - 09 March 2004 : 11:58:45
|
Nel modulo Opzioni comuni puoi aggiungere un numero infinito di variabili. Ovviamente metterai solo quelle che dovranno essere viste da tutti i moduli e quindi anche pStopShort se ? questa la tua intenzione.
Attento che nel nostro codice di esempio c'? un errore:
il nome della variabile dichiarata in opzioni comuni ? pStopLong e ne l modulo invece ? usata gStopLong. Quindi correggi in opzioni comuni in questo modo:
Dim gStopLong As Numeric
N.B. Se non lo stai ancora usando ti consiglio di usare l'Editor del linguaggio con tutte le sue funzionalit? di debug.
Inoltre devi pensare al linguaggio di Insider 3000 un po' come al Visual basic. La filosofia ? la stessa.
|
 |
|
scarlet
Nuovo Utente
17 Posts |
Posted - 09 March 2004 : 14:41:45
|
Grazie Admin, provero' a vedere se riesco a ottenere qualcosa di buono, una cosa pero' che proprio non capisco e' in quale punto del modulo di acquisto bisogna inserire cio' che scrive qui:
"Nel modulo "Entra in acquisto" dovrai settare la variabile con il prezzo di ingresso (ovviamente in questo esempio viene omesso il codice che genera il segnale di ingresso): Function Main() pEntryPrice = Close EndFunction
Se fosse cosi' gentile da modificarmelo lei........ grazie molte
|
 |
|
SupportoTecnico
Forum Admin
1261 Posts |
Posted - 09 March 2004 : 15:03:18
|
La riga:
pEntryPrice = Close
cos? come ? scritta puoi posizionarla in qualsiasi punto all'interno della funzione Main. Ci? che ? importante ? che sia posizionata prima della parola chiave "Return".
Per non sbagliare mettila pure come prima riga:
Function Main() pEntryPrice = Close
'scrivi il resto della funzione...
EndFunction
|
 |
|
scarlet
Nuovo Utente
17 Posts |
Posted - 13 March 2004 : 18:09:21
|
ho modificato il TS breakout ( considerando solo le posizione long) come segue:
IN OPZIONI COMUNI:
' supponiamo che per ora non voglia ottimizzare questi parametri Option OptMax(18, 18, 1) Option OptMin(18, 18, 1)
'ho tolto dal vecchio codice le due righe qui sotto 'Dim pdStopLossLong As Numeric 'Dim pdStopLossShort As Numeric
'ho aggiunto Dim pEntryPrice As Numeric Dim pStopLong As Numeric Option OptX(3, 10, 1) Option OptY(3, 10, 1)
IN ENTRA IN ACQUISTO:
Function Main() 'ho aggiunto la riga qui sotto pEntryPrice = Close
Dim bResult As Boolean Dim i As Numeric Dim dTmpMax As Numeric
bResult = (Close = Max(Close, OptMax))
If (bResult = True) then dTmpMax = Close( - 1) For i = 2 to OptMax If (dTmpMax < Close( - i)) Then dTmpMax = Close( - i) EndIf Next i 'Ho eliminato la riga qui sotto 'pdStopLossLong = dTmpMax EndIf
Price high Return bResult EndFunction
IN CHIUDI POSIZIONI IN ACQUISTO:
Function Main() Dim bRes as Boolean
If (High > (pEntryPrice + OptY)) then pStopLong = pEntryPrice + OptY Else pStopLong = pEntryPrice EndIf
bRes = False If (Low <= (pEntryPrice - OptX)) then bRes = True Else If ((High > pEntryPrice) And (Low <= pStopLong)) Then bRes = True EndIf EndIf
Return bRes
EndFunction
-----------------------------------------------------------
Il TS non da errore, ed e' gia' qualcosa, ma mi fa' uscire quasi sempre sulla barra successiva all'entrata non rispettando la regola del trailing stop che avevo specificato, anche mettendo valori elevati in X e Y. (10) Il test e' sul dax future a 1 minuto. Pure la regola di ingresso non viene rispettata come nel TS originale, anche non eliminando la riga "pdStopLossLong = dTmpMax" e le relative variabili nel modulo opzioni comuni. Potreste controllare, per cortesia, dov'e' l'errore? Io non ci arrivo.....
Avrei anche un'altra domanda :-(( ho questa istruzione: return momentum(40) > 100 che entra in acquisto quando il momentum supera 100 di valore. vorrei modificarla in modo che entri in acquisto solo quando passa da 99.999 a 100 . ho provato cosi': return Momentum (40) Crossabove(99.999, 100) ma non e' corretto
grazie ancora
|
 |
|
SupportoTecnico
Forum Admin
1261 Posts |
Posted - 13 March 2004 : 20:57:10
|
Bisogna fare alcune considerazioni:
1) Il sistema non permette di entrare e uscire nella stessa barra, quindi se una barra genera un segnale di acquisto non pu? generare anche un segnale di uscita.
2) Il prezzo di ingresso e uscita dalle varie posizioni ? di default quello specificato nella tabella delle "Opzioni" nella finestra di "Gestione trading systems". Per definire un prezzo personalizzato, come nel tuo caso per l'uscita da posizioni in acquisto, devi usare la parola chiave "Price" seguita da un'espressione che sar? poi il prezzo di esecuzione dell'operazione (come ? stato usato nel modulo di Entra in acquisto).
Per l'altra domanda riguardante il momentum:
Return (Value(Momentum(40), -1) <= 99.999) And (Momentum(40) >= 100)
|
 |
|
scarlet
Nuovo Utente
17 Posts |
Posted - 13 March 2004 : 22:01:26
|
Admin ha scritto: 1) Il sistema non permette di entrare e uscire nella stessa barra, quindi se una barra genera un segnale di acquisto non pu? generare anche un segnale di uscita.
questo e' evidente, cio' che intendevo dire e' che il sistema mi fa' uscire sulla barra successiva a quella di entrata anche se non dovrebbe intervenire perche' il mercato va' dalla mia parte quindi non entra alcuno stop. E questo accade anche se regolo lo stop a 10 punti, cioe' alto per quel time frame . Purtroppo non si possono allegare immagini, sarebbe molto comodo poterlo fare e mi sembra che anche qualcun'altro la pensi come me.
Return (Value(Momentum(40), -1) <= 99.999) And (Momentum(40) >= 100)
con questa formula il segnale di entrata e' perfetto ( chissa' se si poteva fare anche con crossabove?), anche in questo caso pero' se in uscita metto il trailing stop di cui abbiamo parlato tanto le posizioni vengono chiuse troppo presto, i valori nel modulo opzioni non vengono rispettati. grazie ancora Admin
|
 |
|
SupportoTecnico
Forum Admin
1261 Posts |
Posted - 14 March 2004 : 00:16:07
|
Il sistema va in stop perch? il codice scritto gli dice di farlo. Le righe incriminate sono queste:
If ((High > pEntryPrice) And (Low <= gStopLong)) Then bRes = True EndIf
Cerchiamo quindi di riscrivere le funzioni:
Entra in Acquisto:
function main() pEntryPrice = close pStopLong = -1 Return (Value(Momentum(opt_mom), - 1) <= 99.999) And (Momentum(opt_mom) >= 100) endfunction
Esci da posizioni in Acquisto:
Function Main() Dim bRes as Boolean Dim dOffset as Numeric
If (pStopLong <= 0) Then pStopLong = pEntryPrice EndIf If (High >= (pEntryPrice + OptY)) then dOffset = High - (pEntryPrice + OptY) If (dOffset < 0) then dOffset = 0 EndIf pStopLong = pEntryPrice + OptY + dOffset EndIf
bRes = False If (Low <= (pEntryPrice - OptX)) then bRes = True Else If (Low <= pStopLong) Then bRes = True EndIf EndIf
Return bRes
EndFunction
|
 |
|
|
Topic  |
|