Insider 3000 - Forums
Insider 3000 - Forums
Home | Profile | Active Topics | Members | Search | FAQ
 All Forums
 Problemi con "Insider 3000 versione 3"
 Problemi col linguaggio di programmazione
 piccolo T.S. che non mi funziona

Note: You must be registered in order to post a reply.

Screensize:
UserName:
Password:
Format Mode:
Format: BoldItalicizedUnderlineStrikethrough Align LeftCenteredAlign Right Horizontal Rule Insert HyperlinkInsert Email Insert CodeInsert QuoteInsert List
   
Message:

* HTML is OFF
* Forum Code is ON
Smilies
Smile [:)] Big Smile [:D] Cool [8D] Blush [:I]
Tongue [:P] Evil [):] Wink [;)] Clown [:o)]
Black Eye [B)] Eight Ball [8] Frown [:(] Shy [8)]
Shocked [:0] Angry [:(!] Dead [xx(] Sleepy [|)]
Kisses [:X] Approve [^] Disapprove [V] Question [?]

   
   

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




Insider 3000 - Forums © Copyright 2003-2016 Tradersoft s.r.l. Go To Top Of Page
Powered By: Snitz Forums 2000 Version 3.4.07