Help easylanguage

  • ANNUNCIO: Segui le NewsLetter di Borse.it.

    Al via la Newsletter di Borse, con tutte le notizie quotidiane sui mercati finanziari. Iscriviti per rimanere aggiornato con le ultime News di settore, quotazioni e titoli del momento.
    Per iscriverti visita questo link.

Glb

Nuovo Utente
Registrato
15/12/00
Messaggi
3.067
Punti reazioni
122
Ciao

Ho finalmente cominciato a studiare seriamente l'easylanguage di Tradestation e per esercitarmi ho scritto un indicatore (allegato in fondo) che dovrebbe tracciare uno Swing Chart unendo tutti i min e max relativi.
Il problema che non sono riuscito ancora risolvere è che questo indicatore non mi parte dalla prima barra e non capisco il perchè.
Utilizzando la Debug window ho notato che per un motivo per me incomprensibile ogni x barre le variabili vengono tutte reinizializzate. Ad esempio se scrivo:
print (currentbar);

il risultato sarà:

1
2
3
1
2
3
4
5
..

Sapendo che in questo forum ci sono veri "mostri" di easylanguage spero che qualcuno vorra aiutarmi.

Bye

Variable: LastH(-1),LastL(-1),Dir(0),Tl(0),OldSwing(-1);
LastH=LastH+1;
LastL=LastL+1;
OldSwing=OldSwing+1;
{Print(LastH ",LastH," LastL ",LastL," OldSwing ",OldSwing);}


if (L>=L[LastL] And H<=H[LastH])=false then
Begin
Print("Non Inside ");
if L<L[LastL] and H>H[LastH] then
Begin
if dir=1 then LastH=0;
if dir=-1 then LastL=0;
End
Else
Begin
if L>=L[LastL] and H>H[LastH] then
Begin
if Dir<1 then
Begin
{ Print(Date, " New TL DW "," CurrentBar = ");
Print("OldSwing = ", OldSwing, " LastL = ",LastL);}
Tl=TL_New(Date[OldSwing], Time[OldSwing], H[OldSwing], Date[LastL], Time[LastL], L[LastL]);
OldSwing=LastL;
End;
Dir=1;
End;
if L<L[LastL] and H<=H[LastH] then
Begin
If Dir>-1 then
Begin
{ Print(Date, " New TL UP "," CurrentBar = ");
Print("OldSwing = ", OldSwing, " LastL = ",LastL);}
Tl=TL_New(Date[OldSwing], Time[OldSwing], L[OldSwing], Date[LastL], Time[LastL], H[LastL]);
OldSwing=LastH;
End;
Dir=-1;
End;
LastH=0;
LastL=0;
End;
End;
 

Allegati

  • gioswchart.jpg
    gioswchart.jpg
    41,6 KB · Visite: 350
Nessun "Mostro" in ascolto ?????

:D
 
L'EL non reinizializza la variabili Semplicemente la funzione print ha un baco Invece di iniziare dalla currentbar inzia prima per poi riniziare a stampare correttamente dalla currentbar in poi Pertanto le variabili mantengono sempre il loro valore
Tutti gli indicatori iniziano il plotting dal MaxBarsBack in poi
Il MaxBarsBack è un parametro che trovi nel setting dell'indicatore
Può essere automatico o manuale Per default il MaxBarsBack è su automatico
Il currentbar inizia un giorno dopo il MaxBarsBack
Appurato questo il plotting inizia :
-Quando currentbar=1 oppure
-Quando ,dopo che currentbar>=1, tutte le condizioni da te richieste risultano vere

Cmq all'interno dell'Omega esisto già indicatori e/o funzioni pronti alla bisogna
-SwingHigh(Low)
-SwingHigh(Low)Bar
-PivotHighVS(Low)
-PivotHighVS(Low)Bar
-Lowest e LowestBar
-Highest e HighestBar
-ZigZag*
Per il loro uso vedi l'help in linea
*Questo indicatore non è compreso nella suite originale ma deve essere scaricato dal sito ftp://ftp.omegaresearch.com/pub/easylang/
B.-
 
Grazie mille x la risposta. Non ci speravo più . :)


Scritto da Baiano
L'EL non reinizializza la variabili Semplicemente la funzione print ha un baco Invece di iniziare dalla currentbar inzia prima per poi riniziare a stampare correttamente dalla currentbar in poi Pertanto le variabili mantengono sempre il loro valore
Tutti gli indicatori iniziano il plotting dal MaxBarsBack in poi
Il MaxBarsBack è un parametro che trovi nel setting dell'indicatore
Può essere automatico o manuale Per default il MaxBarsBack è su automatico
Il currentbar inizia un giorno dopo il MaxBarsBack
Appurato questo il plotting inizia :
-Quando currentbar=1 oppure
-Quando ,dopo che currentbar>=1, tutte le condizioni da te richieste risultano vere


Quindi il problema delle variabili non esiste ma si tratterebbe di un errore nella funzione print?
OK! Ma in pratica cosa devo fare x far partire l'indicatore dall'inizio?
Devo mettere su manuale MaxBarBack? e che valore devo mettere?

Scritto da Baiano

Cmq all'interno dell'Omega esisto già indicatori e/o funzioni pronti alla bisogna
-SwingHigh(Low)
-SwingHigh(Low)Bar
-PivotHighVS(Low)
-PivotHighVS(Low)Bar
-Lowest e LowestBar
-Highest e HighestBar
-ZigZag*
Per il loro uso vedi l'help in linea
*Questo indicatore non è compreso nella suite originale ma deve essere scaricato dal sito ftp://ftp.omegaresearch.com/pub/easylang/
B.-

Conosco già questi indicatori ma danno un risultato completamente diverso dal mio.
SwingHigh ad esempio mi trova il prezzo di una barra con un max maggiore delle altre barre di un intervallo prefissato (il parametro strenght).
Il mio indicatore (che poi non è tutta farina del mio sacco) non ha bisogno di un intervallo prefissato e determina lo swing che èdovuto ad una rottura del min dell'ultimo rally (non considerando tutti gli inside che nel frattempo si sono verificati).
Nel grafico allegato vedi le differenze tra il mio indicatore e la funzione SwingHigh.

Approfitto x farti i complimenti x la tua competenza in questa materia. Ultimamente cercando vecchi post che dove si parlava di easylanguage ho letto parecchie cose molto interessanti scritte da te.

Ciao
 

Allegati

  • gioswchart2.jpg
    gioswchart2.jpg
    42,7 KB · Visite: 273
>OK! Ma in pratica cosa devo fare x far partire l'indicatore dall'inizio?
>Devo mettere su manuale MaxBarBack? e che valore devo mettere?

In base al tuo indicatore non puoi saperlo in anticipo
Nel tuo indicatore esistono due variabili incrementali
..
..
LastH=LastH+1;
LastL=LastL+1;
..
..
Che successivamente utilizzi per ottenere uno specifico Low/High
..
(L>=L[LastL] And H<=H[LastH])=
..
Se dai un limite al MaxBarsBack ,ad esempio 5, e LastH o LastL superano questo limite avrai un "runtime error"
Dovresti porre un limite alle tue variabili
LastL=LastL+1;
If LastL > n then LastL=n
Dove "n" è il limite massimo che sarà lo stesso numero che metterai nel setting del MaxBarsBack Da questo comprendi che il tuo indicatore non potrà mai partire dalla prima barra

B.-
 
Scritto da Baiano
>OK! Ma in pratica cosa devo fare x far partire l'indicatore dall'inizio?
>Devo mettere su manuale MaxBarBack? e che valore devo mettere?

In base al tuo indicatore non puoi saperlo in anticipo
Nel tuo indicatore esistono due variabili incrementali
..
..
LastH=LastH+1;
LastL=LastL+1;
..
..
Che successivamente utilizzi per ottenere uno specifico Low/High
..
(L>=L[LastL] And H<=H[LastH])=
..
Se dai un limite al MaxBarsBack ,ad esempio 5, e LastH o LastL superano questo limite avrai un "runtime error"
Dovresti porre un limite alle tue variabili
LastL=LastL+1;
If LastL > n then LastL=n
Dove "n" è il limite massimo che sarà lo stesso numero che metterai nel setting del MaxBarsBack Da questo comprendi che il tuo indicatore non potrà mai partire dalla prima barra

B.-

Ci sono riuscito :)

Ho riscritto completamente l'indicatore eliminando i riferimenti all'indietro e sono riuscito a farlo partire dalla prima barra.

:)

Variable: OldDir(0),NewDir(0), Tl(0),
Inside(False),Outside(False),Rally(False),IsSwing(False);
arrays: LastH[4](-1),LastL[4](-1),LastSwing[4](0);

{Posizioni array
1 = NBarra
2 = Valore
3 = Data
4 = Time }



if currentbar=1 then
Begin
LastH[1]=1; LastH[2]=H ; LastH[3]=date ;LastH[4]=Time;
LastL[1]=1; LastL[2]=L ; LastH[3]=date ;LastH[4]=Time;
LastSwing[1]=1; LastH[2]=H ; LastSwing[3]=date ;LastSwing[4]=Time;
End
Else
Begin
Inside=(L>=LastL[2] And H<=LastH[2]);
Outside=(L<LastL[2] and H>LastH[2]);
Rally=((inside Or Outside)=false);
IsSwing=false;
if Rally then
Begin
if H>LastH[2] then Newdir=1 else Newdir=-1;
if OldDir=0 then
Begin
OldDir=NewDir;
if OldDir=1 then LastSwing[2]=LastL[2] Else LastSwing[2]=LastH[2];
End;
isSwing=Newdir<>OldDir;
OldDir=Newdir;

if isSwing then
Begin
if NewDir=1 then
Begin
{ print( LastSwing[3]," ",LastSwing[4]," " , LastSwing[2]," ", LastL[3]," ",LastL[4] ," ", LastL[2]);}
Tl=TL_New(LastSwing[3],LastSwing[4] , LastSwing[2], LastL[3],LastL[4] , LastL[2]);
LastSwing[1]=LastL[1];LastSwing[2]=LastL[2]; LastSwing[3]=LastL[3];LastSwing[4]=LastL[4];
End
else
Begin
Tl=TL_New(LastSwing[3],LastSwing[4] , LastSwing[2], LastH[3],LastH[4] , LastH[2]);
LastSwing[1]=LastH[1];LastSwing[2]=LastH[2]; LastSwing[3]=LastH[3];LastSwing[4]=LastH[4];
End;
End;
LastH[1]=CurrentBar; LastH[2]=H ; LastH[3]=date ;LastH[4]=Time;
LastL[1]=CurrentBar; LastL[2]=L ; LastL[3]=date ;LastL[4]=Time;
End;
End;
 

Allegati

  • gioswchart3.jpg
    gioswchart3.jpg
    45,6 KB · Visite: 215
Avrei però ancora una cosa da chiedere.

Volendo utilizzare questo indicatore x creare una strategy cosa devo fare?

Devo salvarlo come funzione o come signal ?

:confused:
 
Indietro