robom1
Forumer storico
Ciao a tutti, in allegato vi scrivo il codice in Visual Trader per l'identificazione degli swing di minimo e di massimo di Gann.
Il codice non ha alcuna valenza operativa e deve essere considerato esclusivamente un explorer.
Il programma esclude le barre inside anche multiple che intercorrono tra le tre barre che identificano lo swing di minimo o di massimo, attraverso lo shift dei valori.
Il codice non ha alcuna valenza operativa e deve essere considerato esclusivamente un explorer.
Il programma esclude le barre inside anche multiple che intercorrono tra le tre barre che identificano lo swing di minimo o di massimo, attraverso lo shift dei valori.
Codice:
{******************************************************************************
* Swing Gann - robom1
******************************************************************************}
Var: opeA(0), opeB(0), opeC(0),
higA(0), higB(0), higC(0),
lowA(0), lowB(0), lowC(0),
cloA(0), cloB(0), cloC(0),
barrainside(0), confronto(0),
swing(0), swingattivo(0),
indzona1, indzona2;
indzona1=CreateViewport(200, true, True);
indzona2=CreateViewport(200, true, True);
//******************************************************************************
//VERIFICA DELLE BARRE INSIDE
//le barre inside non vengono considerate; il confronto viene effettuato su
//high e min dell'ultima barra validata (per barra validata vedi success.)
if H <= higC and L >= lowC then barrainside = 1; else barrainside = 0; endif;
//******************************************************************************
//SHIFT DEI VALORI E DETERMINAZIONE DEI VALORI DELLE TRE BARRE DI CONFRONTO
//Se la barra non è inside occorre verificare che, nelle fasi preliminari vi
//siano almeno tre valori positivi su cui effettuare il confronto.
//Si possono avere pertanto i seguenti casi:
if barrainside = 0 then
//Caso A
//Esistono già tutte le serie dei tre valori di confronto; allora in questo
//caso si procede allo shift dei valori precedenti e il valore della barra
//corrente diventa il valore della barra C; in questo caso quindi si è
//proceduto allo shift dei valori precedenti e si potrà procedere al confronto
//per la verifica/determinazione di eventuali swing
if
opeA <> 0 and opeB <> 0 and opeC <> 0
then
opeA = opeB; higA = higB; lowA = lowB; cloA = cloB;
opeB = opeC; higB = higC; lowB = lowC; cloB = cloC;
opeC = C; higC = H; lowC = L; cloC = C;
confronto = 1;
endif;
//Caso B
//Esistono due delle tre serie di valori e manca la barra C; si procede quindi
//al solo inserimento della barra C senza procedere allo shift ed inoltre si
//procederà al confronto per la verifica/determinazione di eventuali swing.
if
opeA <> 0 and opeB <> 0 and opeC = 0
then
opeC = C; higC = H; lowC = L; cloC = C;
confronto = 1;
endif;
//Caso C
//Esiste solo la serie relativa alla barra A mentre ancora mancano quelli della
//barra B; la barra B assumerà pertanto i valori correnti e non si potrà
//procedere al confronto in quanto mancano ancora i valori della barra C.
if
opeA <> 0 and opeB = 0
then
opeB = C; higB = H; lowB = L; cloB = C;
confronto = 0;
endif;
//Caso D
//Manca ancora il valore della barra A (siamo alla prima barra); la barra A
//assumerà pertanto i valori correnti e non si potrà procedere al confronto
//in quanto mancano ancora i valori della barra B e C.
if
opeA = 0
then
opeA = C; higA = H; lowA = L; cloA = C;
confronto = 0;
endif;
endif;
//******************************************************************************
//DETERMINAZIONE DEGLI SWING DI MAX E SWING DI MIN
//Se la barra non è inside e puo' essere effettuato il confronto viene
//verificato se si tratta di uno swing di max
//Prima di iniziare il ciclo pongo lo swing uguale a zero
swing = 0;
//Faccio il ciclo solo se la barra non è inside e posso effettuare il confronto
if barrainside = 0 and confronto = 1 then
//Caso A. SWING DI MAX
//
//Confronto tra barra B e barra A:
// - la barra B deve avere un max maggiore di quello della barra A e un minimo
// maggiore o uguale a quello della barra A
//
//Confronto tra la barra B e la barra C:
// - la barra B deve avere un massimo maggiore o uguale a quello della barra C
// ed inoltre il minimo della barra C deve essere inferiore a quello della
// barra B.
//La segnalazione dello swing di max viene effettuato sulla barra C
if
higB > higA and
lowB >= lowA and
higB >= higC and
lowB > lowC
then
swing = -1;
endif;
//Caso B. SWING DI MIN
//
//Confronto tra barra B e barra A:
// - la barra B deve avere un massimo inferiore o uguale al massimo di A e
// inoltre un minimo inferiore a quello di A.
//
//Confronto tra la barra B e la barra C:
// - la barra B deve avere un massimo inferiore al massimo di C ed inoltre
// un minimo inferiore o uguale al minimo di C
//La segnalazione dello swing di min viene effettuato sulla barra C
if
higB <= higA and
lowB < lowA and
higB < higC and
lowB <= lowC
then
swing = 1;
endif;
endif;
//******************************************************************************
//COLORO LE INSIDE DI GIALLO
if barrainside = 1 then colorbar(yellow); endif;
//******************************************************************************
//DETERMINAZIONE DELLO SWING ATTIVO IN OGNI BARRA
//Se lo swing è diverso da zero chiaramente lo swing attivo sarà quello rilevato
//altrimenti sarà lo swing precedentemente determinato
if swing <> 0 then swingattivo = swing; else swingattivo = swingattivo[1]; endif;
PlotChart(swingattivo, indzona1, blue, istogramma, 3);
PlotChart(swing, indzona2, blue, solid, 3);