T O P I C R E V I E W |
Pingu |
Posted - 22 May 2007 : 10:06:48 Il codice seguente è un semplice TS che fa entrare quando la chiusura è la più alta di tot periodi (Opt1) e fa uscire quando la chiusura è la più bassa di tot periodi (Opt2) oppure se scatta uno stop loss del 3%.
Option Opt1(3, 30, 1) Option Opt2(3, 30, 1) Dim StopLoss As Numeric = 0
Function main() Dim Signal As Boolean
StopLoss = 0 Signal = Close >= Max(Close, Opt1) If (Signal = True) Then StopLoss = Close - Close * 0.03 EndIf
Return Signal Endfunction
Function main() Return (Close <= Min(Close, Opt2)) Or (Close <= StopLoss) Endfunction
Quello che vorrei fare è modificarlo in modo che l'entrata si abbia solo su un ritracciamento del prezzo successivo alla chiusura più alta (ad es. entrata al prezzo corrispondente alla metà della barra che ha la chiusura più alta). Ho provato in vari modi, fra cui con la seguente modifica, ma ottengo sempre errori di vario genere...mi potete aiutare?
Option Opt1(3, 30, 1) Option Opt2(3, 30, 1) Dim StopLoss As Numeric = 0
Function main() Dim Signal As Boolean Dim Signal2 As Boolean
StopLoss = 0 Signal = Close >= Max(Close, Opt1) If (Signal = True) Then StopLoss = Close - Close * 0.03 Signal2 = Low-((High-Low)/2) If (Signal2 = True) Then Price = Low-((High-Low)/2) EndIf EndIf
Return Signal2 Endfunction
Function main() Return (Close <= Min(Close, Opt2)) Or (Close <= StopLoss) Endfunction
Grazie e buona giornata. |
3 L A T E S T R E P L I E S (Newest First) |
SupportoTecnico |
Posted - 22 May 2007 : 13:28:24 Il codice così scritto non tiene però conto del fatto che se il titolo continua a salire e quindi a segnare nuovi massimi il punto di ingresso rimane sempre lo stesso. Quindi se vuoi spostare dinamicamente il punto di ingresso ogni nuovo massimo successivo al primo devi scrivere:
Option Opt1(3, 30, 1) Option Opt2(3, 30, 1) Dim StopLoss As Numeric = 0 Dim pbSignal1 as boolean Dim pdRet as numeric
Function main() Dim bTmpNewMax as boolean = False
StopLoss = 0
bTmpNewMax = Close >= Max(Close, Opt1) if bTmpNewMax = True then pdRet = Low + (High-Low)/2 pbSignal1 = False endif
if pbSignal1 = True then if Low <= pdRet then Price pdRet StopLoss = pdRet - pdRet * 0.03 Return True endif else if bTmpNewMax = True then pbSignal1 = True endif EndIf
Return False Endfunction
Function main() dim bSignal as boolean = false
bSignal = (Close <= Min(Close, Opt2)) Or (Close <= StopLoss) If bSignal = True then pbSignal1 = false pdRet = 0 endif
Return bSignal Endfunction
|
Pingu |
Posted - 22 May 2007 : 11:52:49 Supporto tecnico eccezionale, come sempre!!! Grazie. Purtroppo non sono ancora entrato nel modo di pensare di I3000...grazie di nuovo anche per la celerità. |
SupportoTecnico |
Posted - 22 May 2007 : 11:33:37 Ci sono un paio di errori gravi.
1) Signal2 = Low-((High-Low)/2) Questa riga non significa nulla. Infatti eguagliare un'espressione come questa ad una variabile booleana non ha nessun senso.
2) Price = Low-((High-Low)/2) L'uguale non va messo.
Detto questo la logica dell'intera funzione è comunque completamente sbagliata.
Il segnale di ingresso deve avvenire in due tempi:
Option Opt1(3, 30, 1) Option Opt2(3, 30, 1) Dim StopLoss As Numeric = 0 Dim pbSignal1 as boolean Dim pdRet as numeric
Function main()
StopLoss = 0 if pbSignal1 = True then if Low <= pdRet then Price pdRet StopLoss = pdRet - pdRet * 0.03 Return True endif else pbSignal1 = Close >= Max(Close, Opt1) if pbSignal1 = True then pdRet = Low + (High-Low)/2 endif EndIf
Return False Endfunction
Function main() dim bSignal as boolean = false
bSignal = (Close <= Min(Close, Opt2)) Or (Close <= StopLoss) If bSignal = True then pbSignal1 = false pdRet = 0 endif
Return bSignal Endfunction
Con questo codice l'entrata è al prezzo da te richiesto se raggiunto in una delle barre successive alla barra del massimo
|
|
|