ProRealCode - Trading & Coding with ProRealTime™
Buongiorno a tutti, spero di essere nel forum corretto e la richiesta sia compatibile allo spirito dello stesso .
Mi rivolgo a chi possa darmi un aiuto/supporto sui seguenti codici di programmazione che ho trovato navigando all’interno del forum, spiegandomi con un esempio pratico l’obiettivo al fine di comprendere al meglio il risultato finale.
routine copiata a da analizzare :
TIMEFRAME(Weekly)
c1 = Volume > Volume[10]
p = 20
Upper = HIGHEST[p](HIGH[1])
//Lower = LOWEST[p](LOW[1])
Distanza = 0.2 * pipsize
c2 = close >= (Upper – Distanza)
c1 = Volume > Volume[10] :
il valore (10) indica il numero di azioni scambiate nei giorni precedenti (10) oppure indica un giorno specifico (-10 gg) rispetto alla data corrente ?
in ottica di operazioni long, è corretto questa formula, oppure è consigliabile usare AVG? se affermativo come sarebbe l’istruzione corretta ?
p = 20
Upper = HIGHEST[p](HIGH[1]) : è il prezzo massimo raggiunto nelle ultime 20 giornate (time frame settimanale) rispetto al valore corrente (HIGH[1])?
distanza 0.2 * pipsize……
cosa rappresenta questa istruzione ? in pratica quale sarebbe il suo risultato e l’unità di misura di 0.2, è una percentuale (%); è un valore assoluto ?.
modificando in aumento o in ribasso tale valore, cosa accadrebbe al risultato ?
c2 = close >= (Upper – Distanza) quale sarebbe il risultato ?
esiste una funzione ” print” per leggere il contenuto di un codice / variabile al fine di capire cosa accade di fronte ad una condizione ?
se volessi leggere il contenuto delle suddetta variale c2, cosa devo fare all’interno del programma ?
Grazie in anticipo
il valore (10) indica il numero di azioni scambiate nei giorni precedenti (10) oppure indica un giorno specifico (-10 gg) rispetto alla data corrente ?
indica -10 candele (giorni, settimane o minuti che siano) rispetto a quella corrente, per indicare le candele si usa un numero tra parentesi quadre, partendo da quella corrente che è [0] (che di solito si omette), [1] è la precedente, [2] l’altra ancora, ecc…
CLOSE (o CLOSE[0]) indica il prezzo di chiusura della candela corrente, se la candela è in corso indica sempre l’ultimo, CLOSE[15] indica il prezzo di chiusura della 15esima candela precedente quella corrente.
in ottica di operazioni long, è corretto questa formula, oppure è consigliabile usare AVG? se affermativo come sarebbe l’istruzione corretta ?
p = 20
non capisco cosa intendi dire, puoi dettagliare meglio?
p è una variabile a cui viene assegnato il valore 20, in questo casp sta per Periodi ed è usato nelle righe successive per cercare i valori minimi e massimi degli ultimi 20 periodi. Si usa una variabile, invece del numero 20, per non doverla cambiare in più righe, ma in una soltanto, quando si devono fare variazioni.
Upper = HIGHEST[p](HIGH[1]) : è il prezzo massimo raggiunto nelle ultime 20 giornate (time frame settimanale) rispetto al valore corrente (HIGH[1])?
No, è il prezzo massimo delle ultime 20 candele a partire dalla precedente, [1] si riferisce alla candela precedente (ieri sul giornaliero, la settimana scorsa sul settimanale, 1 minuto fa su 1 minuto)
distanza 0.2 * pipsize……
cosa rappresenta questa istruzione ? in pratica quale sarebbe il suo risultato e l’unità di misura di 0.2, è una percentuale (%); è un valore assoluto ?.
0.2 è una costanta numerica assegnata ad una variabile, può essere quello che vuoi, potrebbe essere una percentuale (0.2%), un valore assoluto (corrispondente ad una percentuale del 20%, oppure, in questo caso rappresenta 2 decimi di Pip. Si capisce perché dopo c’è PIPSIZE che serve a trasformare i PIPS in PREZZO (su Eur/Usd, 40 pips diventano 0.0040, mentre sul Dax, 40 pips restano 40, è PIPSIZE che si preoccupa di come fare la conversione secondo lo strumento)
modificando in aumento o in ribasso tale valore, cosa accadrebbe al risultato ?
c2 = close >= (Upper – Distanza) quale sarebbe il risultato ?
C2 è una variabile a cui viene assegnato un valore logico, 1 (vero) oppure 0 (falso). in tal caso si verifica che il prezzo di chiusura corrente, CLOSE, sia uguale o superiore al massimo (Upper) delle ultime 20 candele precedenti – 0.2 pips.
esiste una funzione ” print” per leggere il contenuto di un codice / variabile al fine di capire cosa accade di fronte ad una condizione ?
se volessi leggere il contenuto delle suddetta variale c2, cosa devo fare all’interno del programma ?
esiste, solo per le strategie, la possibilità di utilizzare GRAPH e GRAPHONPRICE per oservare il valore delle variabili, candela per candela, durante la fase di backtest, per fare il cosiddetto debugging.
Per Indicatori/Oscillatori e Screener di mercato NON c’è questa possibilità, però si può ovviare a questo trasformandoli in strategie fittizie.
Per favore usa sempre il pulsante “Insert PRT code” quando inserisci il codice nei tuoi post per facilitare la lettura degli altri. Grazie 🙂
Buongiorno Roberto,
scusami se riprendo i punti analizzati, non è semplice per chi non conosce il prodotto, lo faccio per chiarirmi i concetti
CLOSE (o CLOSE[0])
indica il prezzo di chiusura della candela corrente, se la candela è in corso indica sempre l’ultimo, CLOSE[15] indica il prezzo di chiusura della 15esima candela precedente quella corrente.
in ottica di operazioni long, è corretto questa formula, oppure è consigliabile usare AVG? se affermativo come sarebbe l’istruzione corretta ?
non capisco cosa intendi dire, puoi dettagliare meglio?
tornando al tema Pipsize, se ho capito bene, 0.2 è una costante fissa(il valore può essere diverso, esempio 0.1?) che può essere numerico o percentuale(0.2%), quindi se volessi calcolare la % di una candela/prezzo, quale sarebbe la corretta istruzione per estrarre le azioni che hanno subito una variazione di prezzo in percentuale in Up(in trend per capirci) a chiusura di mercato ?
Per Indicatori/Oscillatori e Screener di mercato NON c’è questa possibilità, però si può ovviare a questo trasformandoli in strategie fittizie.
grazie in anticipo
Buongiorno Roberto,
scusami se riprendo i punti analizzati, non è semplice per chi non conosce il prodotto, lo faccio per chiarirmi i concetti
1 CLOSE (o CLOSE[0])indica il prezzo di chiusura della candela corrente, se la candela è in corso indica sempre l’ultimo, CLOSE[15] indica il prezzo di chiusura della 15esima candela precedente quella corrente.
- quindi, se [15] riporta il prezzo della 15esima candela, cosa devo usare per conoscere il prezzo delle ultime cinque candele rispetto alla candela corrente, considerando il time frame (giornaliero; settimanale)?
questo può essere utile se voglio analizzare le azioni che hanno subito un incremento di prezzo a fine giornata
[5] per avere il prezzo della 5a candela precedente quella correntein ottica di operazioni long, è corretto questa formula, oppure è consigliabile usare AVG? se affermativo come sarebbe l’istruzione corretta ?
non capisco cosa intendi dire, puoi dettagliare meglio?
- mi riferivo alla seguente istruzione “c1 = Volume > Volume[10]” se fosse corretta, posso usarla per individuare in ottica di investimento a lungo termine, le azioni che hanno subito più scambi negli ultimi 10giorni rispetto al grafico corrente ;
No, è l’esatto opposto, per individuare quelle che nel periodo corrente hanno avuto più scambi tra gli ultimi 10 giornitornando al tema Pipsize, se ho capito bene, 0.2 è una costante fissa(il valore può essere diverso, esempio 0.1?) che può essere numerico o percentuale(0.2%), quindi se volessi calcolare la % di una candela/prezzo, quale sarebbe la corretta istruzione per estrarre le azioni che hanno subito una variazione di prezzo in percentuale in Up(in trend per capirci) a chiusura di mercato ?
Ogni valore lo decidi tu, non c’è un obbligo prestabilito. Non è una percentuale quella, ma un numero di PIPSPer Indicatori/Oscillatori e Screener di mercato NON c’è questa possibilità, però si può ovviare a questo trasformandoli in strategie fittizie.
- Cosa intendi trasformabili in strategie fittizie , potresti farmi un esempio applicabile ?
Non adesso, mi sembra un compito un pò più complicato di quanto tu possa comprendere adesso, quando avrai più padronanza del linguaggio siscusami, un principiante come il sottoscritto, avere un mezzo semplice per eseguire il debugging, sarebbe veramente di supporto in quanto conoscendo i risultati ottenuti delle istruzioni, aiuterebbero la conoscenza dell’uso delle stesse
Si, come ti ho detto le strategie possono usare GRAPH e GRAPHONPRICEgrazie in anticipo
Comunque, l’importante è studiare i manuali e leggere tanti codici, più semplici e meno semplici che trovi qui sul forum e provarli, facendo modifiche, annullandole, sbagliando, ecc… e facendo domande specifiche su certe funzioni o istruzioni o costanti. Nel giro di qualche mese sarai in grado di creare anche tu qualcosa anche di una certa complessità.
Perdonami,
[5] per avere il prezzo della 5a candela precedente quella corrente
forse non mi sono espresso correttamente, quale sarebbe la corretta istruzione che individui il prezzo di tutte le candele delle giornate antecedenti(5) rispetto al prezzo corrente e non alla singola giornata(5a) ?
per la variazione di prezzo della candela, mi manca qualche passaggio, quindi se non ti dispiace riprenderò il tema più avanti, dopo che ho visto qualche documentazione sul tema
Tuttavia, se usassi questa routine per estrarre le azioni che hanno subito una variazione di prezzo in percentuale in Up(in trend per capirci) a chiusura di mercato può funzionare ?
In caso contrario, potresti definirne una ad hoc ?
grazie
p = 20
Upper = HIGHEST[p](HIGH[1])
//Lower = LOWEST[p](LOW[1])
Distanza = 0.2 * pipsize
c2 = close >= (Upper – Distanza)
Per avere il prezzo di 5 candele ti servono 5 variabili (con la verione 11.x di ProRealTime, solo disponibile con PRT stessa, non con IG, è possibile usufruire dei vettori) per facilitare la cosa.
Esempio:
PrimaVariabile = close[1]
SecondaVariabile = close[2]
.
.
La tua routine è in PIPS, non in percentuale.
Per farla in percentuale occorre modificarla così:
p = 20
Upper = HIGHEST[p](HIGH[1])
//Lower = LOWEST[p](LOW[1])
Distanza = 0.02 //2%
c2 = close >= (Upper – (Upper * Distanza))
questa ti eveidenzia quei titoli dove il prezzo ha raggiunto almeno il massimo – 2%.
Qui puoi trovare alcuni video di ProRealTime Italia https://www.youtube.com/channel/UCj1ZsVjiKQQH1XzIMENQTyQ.
Qui altri video del forum https://www.prorealcode.com/programming-with-prorealtime/.
Qui ci sono i manuali https://www.prorealtime.com/it/manuale/probuilder-indicatori-personalizzati.
grazie per il supporto e per il materiale didattico
buona serata
Buongiorno Roberto,
il seguente codice “screen” ha l’obiettivo di estrarre le azioni che rientrano nei parametri definiti nel codice (titoli in trend – rialzo), il risultato non è soddisfacente, perché vedo titoli che non dovrebbero essere nella lista. Ad : neos(primo titolo della lista) ha un RSI(14) inferiore a 60, quindi il test condizionato, avrebbe dovuto escluderlo.
potresti indicarmi dove sbaglio ?
Grazie in anticipo
Timeframe (weekly)
p = 18
Upper = HIGHEST[p](HIGH[1])
Distanza = 0.02 //2%
cgraph = close >= (Upper - (Upper * Distanza))
Timeframe (daily)
// volumi della giornata devono essere superiore alla media degli ultimi 7 giorni
vol = average[7](volume)
Cvol = volume => vol
//prezzo max di quotazione = 80
cquote = close <= 80
prezzo = close > close[1]
// indice a 14 gg deveono essere => di 60
RSI14 = RSI[14]
cRSI14 = RSI14 => 60
//il prezzo di chiusura deve essere maggiore dell'apertura
Rialzo = close > open
Roc20 = ROC[20](close)
cRoc20 = Roc20 > 0
Roc50 = ROC[20](close)
cRoc50 = Roc50 > 0
Roc200 = ROC[20](close)
cRoc200 = Roc200 > 0
Croc = cRoc200 and Croc50 and Croc20
//risultato = (prezzo and crsi14 and croc and rialzo and cgraph and cdmi18 and cvol and cquote)
Test = (prezzo and crsi14 and croc and rialzo and cquote and cvol and cgraph )
SCREENER [Test[1]] (Test[1] AS "Rialzo/Ribasso")
scusa, il titolo in esame è : Nautilus Group Inc (NLS) ..
Buongiorno,
esiste una built function oppure un modo per estrarre una specifica azione ?
grazie in anticipo
raffaele
Penso sia dovuto al fatto che alla riga 41 usi il riferimento a Test[1], cioè al valore che aveva nella candela precedente.
Non si può estrarre una sola azione, anche perché non avrebbe molto senso, perché fare una scansione di mercato se t’interessa un unico titolo? Basta che lo metti sul grafico e ne vedi l’andamento.
serve solo per troubleshooting, analizzare un azione puoi capire se i parametri inseriti sono correttamente impostati.
Fare qello che hai detto puoi farlo sicuramente, osservi un determinato titolo e metti i valori in modo che combacino esattamente (o quasi) con quel titolo, ad esempio:
//vol = average[7](volume)
Cvol = volume => 100000 AND volume <= 101000
se un certo titolo ha in un dato momento un volume di 100750, puoi fare come sopra, lo stesso per gli altri indicatori. Potresti mettere = 100750, ma essendo la scansione fatta in diretta, può darsi che cambi ogni secondo e quando lo esegui non è più quel valore esatto.
Alla prima riga ho messo le // iniziali dei commenti per evitare che venga segnalato il mancato utilizzo della variabile VOL (dal momento che sotto l’ho tolta).
Buongiorno Roberto,
sono qui per condividere un nuovo screenner per cercare di implementare i codici a scopo didattico, che onestamente funziona parzialmente rispetto l’obiettivo.
Cerco titoli che hanno raggiunto il suo prezzo max di chiusura nelle ultime 52 settimane ; prezzo al di sopra delle medie mobili e volumi crescenti..
I grafici allegati, rappresentano il risultato. Come vedi sono diversi uno dall’altro… il titolo JD corretto ha il prezzo di chiusura max , mentre mkt, non sarebbe dovuto essere selezionato., perchè il prezzo di chiusura è più basso della chiusura del 12/maggio, quindi rientra nelle ultime 52 settimane.
In aggiunta nelle lista delle azioni, vedo anche quelli con segno negativo, perciò mi chiedo come sia possibile se cerco titoli in rialzo?
Anche in questo caso dov’è l’errore ? sicuramente è presente nel codice o nella logica. Potresti indicarmi il codice corretto?
Infine, se non volessi indicare le 52 settimane, ma se volessi indicare un periodo temporale dinamico, per tutto il periodo preso in esame dell’azione, quale sarebbe l’istruzione ?
Grazie per il supporto in anticipo.
Timeframe (weekly)
//prezzo max nelle ultime 52 settimane
prezzo52 = highest[52](close[1])
Timeframe (daily)
c1 = close > prezzo52
// il prezzo supera le meda mobile
M20 = average[20,0](close)
cM20 = M20 > M20[1]
M50 = average[50,0](close)
cM50 = M50 > M50[1]
M200 = average[200,0](close)
cM200 = M200 > M200[1]
//Volume crescenti nelle ultime 52 candele
Vol = Average[52](Volume[1])
//cvol = vol >= 100000
cvol = volume > vol
CMM = cm20 and cm50 and cm200
Test = (cmm and c1 and cvol)
SCREENER [Test[1]] (Test[1] AS "Rialzo/Ribasso")
Funziona benissimo, perché alla riga 3 non prendi le ultime 52 settimane, ma le penultime 52.
Prendi 52 settimane partendo dalla precedente [1], non da quella corrente.
Istruzioni tecniche e uso del codice
This topic contains 64 replies,
has 2 voices, and was last updated by
robertogozzi
5 years, 7 months ago.
| Forum: | ProScreener: Scansione Mercati & Screener |
| Language: | Italian |
| Started: | 04/22/2020 |
| Status: | Active |
| Attachments: | 18 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.