Nel mio trading system ho scritto la seguente formula: dove una volta che si verifica la prima condizione si va in acquisto se si verifica la seconda condizione entro le 5 successive dalla prima ____________________ function main() return ((close<prima condizione)) if (seconda condizione) If ((CurrentBar - plStartBar) > 5) then lStartBar = 0 Endif If (plStartBar <= 0) Then If .. prima condizione.. Then plStartBar = CurrentBar Endif Else If .. seconda condizione .. Then plStartBar = 0 bSignal = True Endif Endif ___________________________
Messo così, le righe di codice dopo il Return non saranno mai eseguite, perchè Return ritorna si il risultato ma anche esce dalla funzione.
Ti consiglio di utilizzare l'Editor e le funzionalità di Debug passo passo.. in questo modo ti puoi accorgere subito se il tuo codice viene eseguito secondo le tue intenzioni oppure no.
quando vado a salvare mi dice: errore di sintassi "I (riga 2 funzione main)" la riga 2 è quella dove ho digitato le 2 condizioni. non capisco in un altro trading system con and e facendogli eseguire le due condizioni insieme non mi da errore. dove sbaglio?
Ovviamente il linguaggio di programmazione ha una sua sintassi rigorosa non è che si può scrivere a caso ciò che si vuole sperando che il compilatore riesca a capirti! magari fosse così! :-)))
La riga:
return ((close<prima condizione)) if (seconda condizione)
non significa assolutamente nulla.
Io stesso non riesco a capire ne a cosa serve messa li, ne cosa dovrebbe fare secondo le tue intenzioni. In particolare la parola chiave IF messa li in mezzo non ha senso. Forse volevi scrivere "AND" e non "IF". Ma anche scrivendo "And" e quindi correggendola sintatticamente continuo a non capire a cosa serve la riga. Non si lega in nessun modo alle righe successive.
Inoltre non mi puoi scrivere la riga di "Return" come prima riga della funzione. Sarebbe come salire su di un Taxi dalla porta di sinistra e scendere dalla porta di destra senza che il taxi sia mai partito! In pratica tutte le righe dopo quella di "Return" non saranno mai eseguite! Sul serio credimi!
Quindi eventualmente scrivi una cosa del genere:
function main() Dim bSignal As Boolean = False
If ((CurrentBar - plStartBar) > 5) then plStartBar = 0 Endif If (plStartBar <= 0) Then If .. prima condizione.. Then plStartBar = CurrentBar Endif Else If .. seconda condizione .. Then plStartBar = 0 bSignal = True Endif Endif
Return bSignal
Endfunction
oppure:
function main() return (close<prima condizione) And (seconda condizione) Endfunction
Ovviamente i due modi di scrittura non producono lo stesso risultato. solo il primo si avvicina a quello che vorresti fare tu e cioè: "dove una volta che si verifica la prima condizione si va in acquisto se si verifica la seconda condizione entro le 5 successive dalla prima"