Insider 3000 - Forums
Insider 3000 - Forums
Home | Profile | Active Topics | Members | Search | FAQ
Username:
Password:
Save Password
Forgot your Password?

 All Forums
 Problemi con "Insider 3000 versione 3"
 Problemi col linguaggio di programmazione
 piccolo T.S. che non mi funziona
 New Topic  Reply to Topic
 Printer Friendly
Author Previous Topic Topic Next Topic  

piter
Nuovo Utente

40 Posts

Posted - 03 March 2005 :  10:16:13  Show Profile  Reply with Quote
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

SupportoTecnico
Forum Admin

1261 Posts

Posted - 03 March 2005 :  14:23:06  Show Profile  Reply with Quote

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



Go to Top of Page

piter
Nuovo Utente

40 Posts

Posted - 03 March 2005 :  16:23:34  Show Profile  Reply with Quote
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
Go to Top of Page

SupportoTecnico
Forum Admin

1261 Posts

Posted - 03 March 2005 :  16:54:14  Show Profile  Reply with Quote
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.


Go to Top of Page

piter
Nuovo Utente

40 Posts

Posted - 03 March 2005 :  17:49:22  Show Profile  Reply with Quote
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
Go to Top of Page

SupportoTecnico
Forum Admin

1261 Posts

Posted - 03 March 2005 :  18:02:50  Show Profile  Reply with Quote
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



Go to Top of Page
  Previous Topic Topic Next Topic  
 New Topic  Reply to Topic
 Printer Friendly
Jump To:
Insider 3000 - Forums © Copyright 2003-2016 Tradersoft s.r.l. Go To Top Of Page
Powered By: Snitz Forums 2000 Version 3.4.07