ProRealCode - Trading & Coding with ProRealTime™
Le avevi già definite te nel tuo codice, quello che gho scritto io devi aggiungerlo dopo la riga 8 (togliendo, o meglio, commentando le tue).
defparam drawonlastbaronly = true
defparam calculateonlastbars = 1000
P = 200
X= highest[P](high)
A= lowest[P](low)
RangeMax = (X - A) * 0.618
RangeMin = (X - A) * 0.500
BarraA = 0
BarraB = 0
For i = 1 To 1000
If high <= RangeMax Then
BarraB = BarIndex[i]
Endif
If low = A Then
BarraA = BarIndex[i]
Endif
If BarraA and BarraB Then
Break
Endif
Next
DRAWSEGMENT(BarraA,A,BarraB,RangeMax)
return
scusami ma non avevo capito…allora ho unito il tutto ma mi dice comunque di definire il “rangemin”
(forse sono io che non riesco nemmeno ad unire le due cose insieme…)
No, dovrebbe dirti che non staimusando la variabile RANGEMIN.
Quando una variabile non viene usata devi commentarla.
Buona sera allego un disegno dove cerco spiegare quello che voglio e oltre alle info sul disegno vorrei anche altre condizioni
1=che il punto D sia al massimo di 2/3 candele precedenti all ultima barra
2=mi piacerebbe un programma per lo screener con quelle condizioni sopra citata
3= un indicatore dove disegni il pattern trovato
Grazie in anticipo per il vostro interessamento e tempo
ci sto impazzendo da mesi ormai…io sono sicuramente troppo ignorante in materia..alla fine mi sa che tocca comprarlo..tatanka se ti va ci possiamo sentire in privato..(vedo che abbiamo idee simili)
Capisco la vostra attesa, ma è abbastanza macchinoso riuscire a fare quello che chiedi.
Prendere un Massimo ed un Minimo e visualizzare i livelli di Fibonacci è di una semplicità estrema e ce ne sono di codici qui sul forum.
Partire da un minimo A, poi individuare B (se nel frattempo il prezzo scende sotto A, questo diventa la nuova A), se poi il prezzo supera B questo diventa la nuova B, se poi il prezzo scende occorre individuare C che sia tra le due percentuali indicate, se scende sotto 76.4 occorre riazzerare tutto e ricominciare nuovamente a trovare A, ecc…. è una cosa difficile, non tanto concettualmente, quanto nella scrittura del codice perché prevede molti intrecci.
Io ho scritto intanto i punti A e B, sto cercando di mettere a punto C, ma devo fare ancora delle prove.
Ciao Roberto , figurati non e un problema il tempo , riesci a a postare la prima parte del programma?
Qusto è il codice, fino al punto C. Nella foto del DAX h1 di adesso il punto C non è stato ancora raggiunto, ma spero lo faccia per vedere se viene stampato correttamente, dopodiché diventa semplice fare la proiezione per il punto D:
DEFPARAM DrawOnLastBarOnly = true
IF BarIndex = 0 OR (Barra > MaxBarre) THEN
MaxBarre = 100
Distanza = 5 * pipsize
PuntoA = low
BarraA = BarIndex
PuntoB = high
BarraB = BarIndex
PuntoC = 0
BarraC = 0
PuntoD = 0
BarraD = 0
Barra = 0
ENDIF
Barra = Barra + 1 //incrementare il passare delle barre per azzerare tutto quando arriva a 100
//
// Determinare se il prezzo scende sotto A, in tal caso avremo una nuova A più bassa e ripartiremo daccapo con B,C e D
PuntoA = min(PuntoA,low)
IF PuntoA < PuntoA[1] THEN
BarraA = BarIndex
Barra = 0
PuntoB = high
BarraB = BarIndex
PuntoC = 0
BarraC = 0
PuntoD = 0
BarraD = 0
ENDIF
//
// Determinare se il prezzo sale sopra B, in tal caso avremo una nuova B più alta e ripartiremo daccapo con C e D
PuntoB = max(PuntoB,high)
IF PuntoB > PuntoB[1] THEN
PuntoC = 0
BarraC = 0
PuntoD = 0
BarraD = 0
ENDIF
// Calcolare la differenza tra i punti A e B e le due percentuali di fibonacci da usare per la verifica di C
DiffAB = PuntoB - PuntoA
FibC1 = DiffAB * 0.618
FibC2 = DiffAB * 0.786
IF low <= (PuntoB - FibC1) AND low >= (PuntoB - FibC2) THEN
// se il MINIMO è tra 0.618 e 0.786 abbiamo trovato il punto C....
PuntoC = low
BarraC = BarIndex
ELSIF low < (PuntoB - FibC2) THEN
// ...altrimenti si riparte daccapo con un nuovo punto A ed un nuovo punto B
PuntoA = low
BarraA = BarIndex
PuntoB = high
BarraB = BarIndex
PuntoC = 0
BarraC = 0
PuntoD = 0
BarraD = 0
Barra = 0
ENDIF
// si stampano i punti trovati, ognuno dipendente dal precedente, si stampa A, poi B solo se A è stato stampato, poi C solo se B è stato stampato ed infine D se anche C è stato stampato
IF PuntoA > 0 THEN
DRAWSEGMENT(BarraA,PuntoA,BarIndex,PuntoA) COLOURED(255,0,0,255) //Rosso
DRAWTEXT("A",BarraA,PuntoA - Distanza,Dialog,Bold,14) coloured(205,0,205,255))
IF PuntoB > 0 THEN
DRAWSEGMENT(BarraB,PuntoB,BarIndex,PuntoB) COLOURED(0,255,0,255) //Verde
DRAWTEXT("B",BarraB,PuntoB + Distanza,Dialog,Bold,14) coloured(205,0,205,255))
IF PuntoC > 0 THEN
DRAWSEGMENT(BarraC,PuntoC,BarIndex,PuntoC) COLOURED(0,0,255,255) //Blu
DRAWTEXT("C",BarraC,PuntoC - Distanza,Dialog,Bold,14) coloured(205,0,205,255))
IF PuntoD > 0 THEN
DRAWSEGMENT(BarraD,PuntoD,BarIndex,PuntoD) COLOURED(238,201,0,255) //Oro
DRAWTEXT("D",BarraD,PuntoD + Distanza,Dialog,Bold,14) coloured(205,0,205,255))
ENDIF
ENDIF
ENDIF
ENDIF
RETURN
Eccolo finito e funzionante (almeno sul DAX, h1):
DEFPARAM DrawOnLastBarOnly = true
IF BarIndex = 0 OR (Barra > MaxBarre) THEN
MaxBarre = 100
Distanza = 5 * pipsize
PuntoA = low
BarraA = BarIndex
PuntoB = high
BarraB = BarIndex
PuntoC = 0
BarraC = 0
PuntoD = 0
BarraD = 0
Barra = 0
ENDIF
Barra = Barra + 1 //incrementare il passare delle barre per azzerare tutto quando arriva a 100
//
// Determinare se il prezzo scende sotto A, in tal caso avremo una nuova A più bassa e ripartiremo daccapo con B,C e D
PuntoA = min(PuntoA,low)
IF PuntoA < PuntoA[1] THEN
BarraA = BarIndex
Barra = 0
PuntoB = high
BarraB = BarIndex
PuntoC = 0
BarraC = 0
PuntoD = 0
BarraD = 0
ENDIF
//
// Determinare se il prezzo sale sopra B, in tal caso avremo una nuova B più alta e ripartiremo daccapo con C e D
PuntoB = max(PuntoB,high)
IF PuntoB > PuntoB[1] THEN
IF PuntoC = 0 THEN
PuntoC = 0
BarraC = 0
PuntoD = 0
BarraD = 0
ENDIF
ENDIF
// Calcolare la differenza tra i punti A e B e le due percentuali di fibonacci da usare per la verifica di C
DiffAB = PuntoB - PuntoA
FibC1 = DiffAB * 0.618
FibC2 = DiffAB * 0.786
FibD1 = PuntoA + (DiffAB * 1.270)
FibD2 = PuntoA + (DiffAB * 1.618)
IF low <= (PuntoB - FibC1) AND low >= (PuntoB - FibC2) THEN
// se il MINIMO è tra 0.618 e 0.786 abbiamo trovato il punto C....
PuntoC = low
BarraC = BarIndex
ELSIF close < (PuntoB - FibC2) THEN
// ...altrimenti si riparte daccapo con un nuovo punto A ed un nuovo punto B
PuntoA = low
BarraA = BarIndex
PuntoB = high
BarraB = BarIndex
PuntoC = 0
BarraC = 0
PuntoD = 0
BarraD = 0
Barra = 0
ENDIF
//
// Una volta superato il 161.8 si riparte daccapo
//
IF close > FibD2 AND PuntoD > 0 THEN
PuntoA = low
BarraA = BarIndex
PuntoB = high
BarraB = BarIndex
PuntoC = 0
BarraC = 0
PuntoD = 0
BarraD = 0
Barra = 0
ENDIF
IF PuntoC > 0 AND PuntoD = 0 THEN
PuntoD = 1
BarraD = BarIndex
ENDIF
// si stampano i punti trovati, ognuno dipendente dal precedente, si stampa A, poi B solo se A è stato stampato, poi C solo se B è stato stampato ed infine D se anche C è stato stampato
IF PuntoA > 0 THEN
DRAWSEGMENT(BarraA,PuntoA,BarIndex,PuntoA) COLOURED(255,0,0,255) //Rosso
DRAWTEXT("A",BarraA,PuntoA - Distanza,Dialog,Bold,14) coloured(205,0,205,255)
IF PuntoB > 0 THEN
DRAWSEGMENT(BarraB,PuntoB,BarIndex,PuntoB) COLOURED(0,255,0,255) //Verde
DRAWTEXT("B",BarraB,PuntoB + Distanza,Dialog,Bold,14) coloured(205,0,205,255)
IF PuntoC > 0 THEN
DRAWSEGMENT(BarraC,PuntoC,BarIndex,PuntoC) COLOURED(0,0,255,255) //Blu
DRAWTEXT("C",BarraC,PuntoC - Distanza,Dialog,Bold,14) coloured(205,0,205,255)
// D
DRAWSEGMENT(BarraD,FibD1,BarIndex,FibD1) COLOURED(238,201,0,255) //Oro
DRAWSEGMENT(BarraD,FibD2,BarIndex,FibD2) COLOURED(238,201,0,255) //Oro
DRAWTEXT("D",BarraD,FibD1 - Distanza,Dialog,Bold,14) coloured(205,0,205,255)
ENDIF
ENDIF
ENDIF
RETURN
nelle foto ho allegato anche quella dove si vede solo C, mentre in realtà questa non si vedrà, perché appena rileva il puntoC automaticamente proietterà in alto anche il D con i due segmenti.
Questo è l’indicatore, se è quello che volevi e ti va bene ti farò lo screener.
Grazie Roberto , se riesco lo provo oggi stesso
Si proprio cosi , ed abbiamo (hai) creato l indicatore del pattern armonico ABCD , se possibile puoi tracciare dei segmenti e le lettere al loro vertice corrispondenti come immagine che allego , si se puoi creare lo screener sarebbe grandioso
Allego la nuova versione dell’indicatore, di cui allego immagine e file .ITF per l’importazione:
DEFPARAM DrawOnLastBarOnly = true
IF BarIndex = 0 OR (Barra > MaxBarre) THEN
MaxBarre = 100
Distanza = 2 * pipsize
PuntoA = low
BarraA = BarIndex
PuntoB = high
BarraB = BarIndex
PuntoC = 0
BarraC = 0
PuntoD = 0
Barra = 0
ENDIF
Barra = Barra + 1 //incrementare il passare delle barre per azzerare tutto quando arriva a 100
//
// Determinare se il prezzo scende sotto A, in tal caso avremo una nuova A più bassa e ripartiremo daccapo con B,C e D
PuntoA = min(PuntoA,low)
IF PuntoA < PuntoA[1] THEN
BarraA = BarIndex
Barra = 0
PuntoB = high
BarraB = BarIndex
PuntoC = 0
BarraC = 0
PuntoD = 0
ENDIF
//
// Determinare se il prezzo sale sopra B, in tal caso avremo una nuova B più alta e ripartiremo daccapo con C e D
PuntoB = max(PuntoB,high)
IF PuntoB > PuntoB[1] THEN
BarraB = BarIndex
PuntoC = 0
BarraC = 0
PuntoD = 0
ENDIF
// Calcolare la differenza tra i punti A e B e le due percentuali di fibonacci da usare per la verifica di C
DiffAB = PuntoB - PuntoA
FibC1 = DiffAB * 0.618
FibC2 = DiffAB * 0.786
FibD1 = PuntoA + (DiffAB * 1.270)
FibD2 = PuntoA + (DiffAB * 1.618)
IF low <= (PuntoB - FibC1) AND low >= (PuntoB - FibC2) THEN
// se il MINIMO è tra 0.618 e 0.786 abbiamo trovato il punto C....
PuntoC = low
BarraC = BarIndex
ELSIF close < (PuntoB - FibC2) THEN
// ...altrimenti si riparte daccapo con un nuovo punto A ed un nuovo punto B
PuntoA = low
BarraA = BarIndex
PuntoB = high
BarraB = BarIndex
PuntoC = 0
BarraC = 0
PuntoD = 0
Barra = 0
ENDIF
//
// Una volta superato il 161.8 si riparte daccapo
//
IF close > FibD2 AND PuntoD > 0 THEN
PuntoA = low
BarraA = BarIndex
PuntoB = high
BarraB = BarIndex
PuntoC = 0
BarraC = 0
PuntoD = 0
Barra = 0
ENDIF
IF PuntoC > 0 AND PuntoD = 0 THEN
PuntoD = 1
ENDIF
// si stampano i punti trovati, ognuno dipendente dal precedente, si stampa A, poi B solo se A è stato stampato, poi C solo se B è stato stampato ed infine D se anche C è stato stampato
IF PuntoA > 0 THEN
DRAWSEGMENT(BarraA,PuntoA,BarIndex,PuntoA) COLOURED(255,0,0,255) //Rosso
DRAWTEXT("A",BarraA,PuntoA - Distanza,Dialog,Bold,14) coloured(205,0,205,255)
IF PuntoB > 0 THEN
DRAWSEGMENT(BarraB,PuntoB,BarIndex,PuntoB) COLOURED(0,255,0,255) //Verde
DRAWTEXT("B",BarraB,PuntoB + Distanza,Dialog,Bold,14) coloured(205,0,205,255)
IF PuntoC > 0 THEN
DRAWSEGMENT(BarraC,PuntoC,BarIndex,PuntoC) COLOURED(0,0,255,255) //Blu
DRAWTEXT("C",BarraC,PuntoC - Distanza,Dialog,Bold,14) coloured(205,0,205,255)
// D
DRAWSEGMENT(BarraC,FibD1,BarIndex,FibD1) COLOURED(238,201,0,255) //Oro
DRAWSEGMENT(BarraC,FibD2,BarIndex,FibD2) COLOURED(238,201,0,255) //Oro
DRAWTEXT("D",BarIndex,FibD1 - Distanza,Dialog,Bold,14) coloured(205,0,205,255)
//
// stampa segmenti per Pattern Armonici
DRAWSEGMENT(BarraA,PuntoA,BarraB,PuntoB) COLOURED(0,0,0,255) //Nero
DRAWSEGMENT(BarraA,PuntoA,BarraC,PuntoC) COLOURED(0,0,0,255) //Nero
DRAWSEGMENT(BarraB,PuntoB,BarraC,PuntoC) COLOURED(0,0,0,255) //Nero
DRAWSEGMENT(BarraB,PuntoB,BarraC,PuntoC) COLOURED(0,0,0,255) //Nero
DRAWSEGMENT(BarraC,PuntoC,BarIndex,FibD1) COLOURED(0,0,0,255) //Nero
DRAWSEGMENT(BarIndex,low,BarIndex,FibD1) COLOURED(0,0,0,255) //Nero
DRAWSEGMENT(BarraC,PuntoC,BarIndex,low) COLOURED(0,0,0,255) //Nero
ENDIF
ENDIF
ENDIF
RETURN
Resta da fare la colorazione dell’interno dei pattern, abbiate un pò di pazienza ancora.
E questo è lo screener, anchesso con allegato file .ITF per l’importazione.
IF BarIndex = 0 OR (Barra > MaxBarre) THEN
MaxBarre = 100
//Distanza = 5 * pipsize
PuntoA = low
//BarraA = BarIndex
PuntoB = high
//BarraB = BarIndex
PuntoC = 0
//BarraC = 0
PuntoD = 0
//BarraD = 0
Barra = 0
ENDIF
Barra = Barra + 1 //incrementare il passare delle barre per azzerare tutto quando arriva a 100
//
// Determinare se il prezzo scende sotto A, in tal caso avremo una nuova A più bassa e ripartiremo daccapo con B,C e D
PuntoA = min(PuntoA,low)
IF PuntoA < PuntoA[1] THEN
//BarraA = BarIndex
Barra = 0
PuntoB = high
//BarraB = BarIndex
PuntoC = 0
//BarraC = 0
PuntoD = 0
//BarraD = 0
ENDIF
//
// Determinare se il prezzo sale sopra B, in tal caso avremo una nuova B più alta e ripartiremo daccapo con C e D
PuntoB = max(PuntoB,high)
IF PuntoB > PuntoB[1] THEN
PuntoC = 0
//BarraC = 0
PuntoD = 0
//BarraD = 0
ENDIF
// Calcolare la differenza tra i punti A e B e le due percentuali di fibonacci da usare per la verifica di C
DiffAB = PuntoB - PuntoA
FibC1 = DiffAB * 0.618
FibC2 = DiffAB * 0.786
//FibD1 = PuntoA + (DiffAB * 1.270)
//FibD2 = PuntoA + (DiffAB * 1.618)
IF low <= (PuntoB - FibC1) AND low >= (PuntoB - FibC2) THEN
// se il MINIMO è tra 0.618 e 0.786 abbiamo trovato il punto C....
PuntoC = low
//BarraC = BarIndex
ELSIF close < (PuntoB - FibC2) THEN
// ...altrimenti si riparte daccapo con un nuovo punto A ed un nuovo punto B
PuntoA = low
//BarraA = BarIndex
PuntoB = high
//BarraB = BarIndex
PuntoC = 0
//BarraC = 0
PuntoD = 0
//BarraD = 0
Barra = 0
ENDIF
//
// Una volta superato il 161.8 si riparte daccapo
//
//IF close > FibD2 AND PuntoD > 0 THEN
//PuntoA = low
//BarraA = BarIndex
//PuntoB = high
//BarraB = BarIndex
//PuntoC = 0
//BarraC = 0
//PuntoD = 0
//BarraD = 0
//Barra = 0
//ENDIF
IF PuntoC > 0 AND PuntoD = 0 THEN
PuntoD = 1
//BarraD = BarIndex
ENDIF
SCREENER [PuntoC](Barra AS "Old")
Ciao Roberto non preoccuparti per il tempo che devo attendere per la colorazione , ho scaricato ultima versione e anche lo screener ti chiedo ancora due cose 1° puoi togliere linee orizzontali colorate che segnano i livelli di fibo ( ho provato a modificarlo ma mi da errore)
2° nello screener mi deve trovare solo i grafici che esaudiscano tutti e 4 i punti
complimenti Roberto…e grazie infinite per il tempo che ci hai dedicato…..sei veramente bravo…
Fibonacci e Pattern Armonici ABCD
This topic contains 76 replies,
has 5 voices, and was last updated by Al
6 years, 2 months ago.
| Forum: | ProScreener: Scansione Mercati & Screener |
| Language: | Italian |
| Started: | 04/27/2019 |
| Status: | Active |
| Attachments: | 39 files |
The information collected on this form is stored in a computer file by ProRealCode to create and access your ProRealCode profile. This data is kept in a secure database for the duration of the member's membership. They will be kept as long as you use our services and will be automatically deleted after 3 years of inactivity. Your personal data is used to create your private profile on ProRealCode. This data is maintained by SAS ProRealCode, 407 rue Freycinet, 59151 Arleux, France. If you subscribe to our newsletters, your email address is provided to our service provider "MailChimp" located in the United States, with whom we have signed a confidentiality agreement. This company is also compliant with the EU/Swiss Privacy Shield, and the GDPR. For any request for correction or deletion concerning your data, you can directly contact the ProRealCode team by email at privacy@prorealcode.com If you would like to lodge a complaint regarding the use of your personal data, you can contact your data protection supervisory authority.