T O P I C R E V I E W |
piter |
Posted - 03 March 2005 : 10:16:13 Salve, il modello del t.s. e il Delphi. In sostanza si ha un setup di acquisto quando la m.m.s. a 18 gg incrocia verso l'alto quella a 40 gg sempre m.m.s. Si attende il ritracciamento del prezzo con chiusura sotto la media a 18 e il segnale buy entra dal giorno successivo in poi al superamento della m.m.s. a 18. Lo stop loss va' messo sotto la m.m.s. a 40 e lo stop profit si attiva quando la m.m.s a 18 incrocia quella a semplice a 4 gg. Se l'operazione viene chiusa sia in loss che in profit per effettuare un'altra operazione long bisogna attente un'altro cross 18-40 e non ? pi? utilizzabile quello precendentemente usato per la posizione.
ENTRATA IN ACQUISTO
dim a as boolean = false dim b as boolean = false dim c as boolean = false dim d as boolean = false
function main() if crossabove(moveav(close, 18, "S"), moveav(close, 40, "S")) then a = true endif if crossabove(moveav(close, 18, "S"), close) and a = true then b = true endif if close < moveav(close, 18, "S") and a = true and b = true then c = true endif if crossabove(high, moveav(close, 18, "S")) and a = true and b = true and c = true then d = true and a = false endif return d endfunction
CHIUDI POSIZIONE IN ACQUISTO
function main() return crossabove(moveav(close, 18, "S"), moveav(close, 4, "S")) or crossabove(moveav(close, 40, "S"), low) endfunction
Problema : mi dice errore di sintassi 'E riga 10
piter |
5 L A T E S T R E P L I E S (Newest First) |
SupportoTecnico |
Posted - 03 March 2005 : 18:02:50 Si esatto, il motivo ? semplice:
ad ogni passaggio all'interno di una funzione le variabili locali (quelle dichiarate all'interno di una funzione) vengono reinizializzate ogni volta con in valori di default. Per le variabili booleane il valore di default ? FALSE a meno che tu non l'abbia esplicitamente dichiarato a TRUE nella riga di dichiarazione.
Ad ogni modo, la sintassi pi? corretta per scrivere ci? che vuoi ?:
function main() dim a as boolean = false a = crossabove(moveav(close, 18, "S"), moveav(close, 40, "S")) return a endfunction
a meno che nell'if tu non debba inserire altre righe di codice.
Ma a questo punto non ha nemmeno senso utilizzare la variabile "a", a meno che tu non debba inserire altre righe di codice all'interno della funzione Main.
Quindi, se il tuo codice si limita a quella condizione la sintassi pi? corretta ? senza dubbio:
function main() return crossabove(moveav(close, 18, "S"), moveav(close, 40, "S")) endfunction
|
piter |
Posted - 03 March 2005 : 17:49:22 dim a as boolean = false function main() if crossabove(moveav(close, 18, "S"), moveav(close, 40, "S")) then a = true endif return a endfunction
Dichiarata cos?, a livello modulo, in sostanza "a" sar? sempre true anche se non avviene il cross. quindi se proprio volessimo utilizzare una variabile a livello modulo per essere corretto dovremmo aggiungere else a = false
Inserendola invece all'interno di function main() la variabile "a" assumer? valore true o false a seconda se trova o no il cross.
piter |
SupportoTecnico |
Posted - 03 March 2005 : 16:54:14 No, non producono lo stesso risultato perch? hai dichiarato la variabile "a" a livello di modulo. Per avere lo stesso risultato la dovevi dichiarare all'interno della funzione Main.
Le variabili dichiarate a livello di modulo non vengono reinizializzate ogni volta e mantengono in memoria l'ultimo valore assunto.
|
piter |
Posted - 03 March 2005 : 16:23:34 Hai ragione, ho capito come usare la sintassi in insider. Il T.S. non esegue quello che voglio, ci st? lavorando.
Ho solo un dubbio, o meglio i due codici riportati di seguito dovrebbero produrre lo stesso risultato ma non ? cos?
dim a as boolean = false
function main() if crossabove(moveav(close, 18, "S"), moveav(close, 40, "S")) then a = true endif return a endfunction
function main() return crossabove(moveav(close, 18, "S"), moveav(close, 40, "S")) endfunction
piter |
SupportoTecnico |
Posted - 03 March 2005 : 14:23:06 Senza controllare se fa ci? che hai descritto ti dico subito che devi rispettare una certa sitassi di scrittura. In un If .. Then mi devi scrivere tutto sulla stessa riga cos?:
If (X > 1) and (Y < 3) then a = 2 endif
e non come hai fatto tu cos?:
If (X > 1) and (Y < 3) Then a = 2 endif
|
|
|