Errore in screener composito
Forums › ProRealTime forum Italiano › Supporto ProScreener › Errore in screener composito
- This topic has 6 replies, 2 voices, and was last updated 10 months ago by massininja.
-
-
02/21/2024 at 3:10 PM #228503
Buongiorno,
ho assemblato alcuni screener per cercare di averne uno complessivo, anche grazie al suggerimento che mi avete fornito in un altro post (qui il link https://www.prorealcode.com/topic/scan-con-media-e-macd/). Singolarmente gli screener funzionano, ma credo di sbagliare qualcosa nell’assemblaggio.
Potreste darmi una mano a capire dove?
Allego qui il codice:Grazie mille
Screener di più condizioni123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221// restituisce i seguenti vslori://// Rialzo Ribasso inv.Rialz Inv.Ribas. Later.// U D u d L// 1 1 1 1 1// Trend medie mobili// 1 = Rialzo// 2 = Ribasso// 3 = Laterale//Sma5 = average[5,0](close)Sma20 = average[20,0](close)Rialzo = close > max(Sma5,Sma20)Ribasso = close < min(Sma5,Sma20)Laterale = ((close > Sma20) AND (close < Sma5)) OR ((close > Sma5) AND (close < Sma20))UP = RialzoDN = RibassoLat = Laterale// Calcolo del MACD personalizzatoMyMACD = Average[12](close) - Average[26](close)MySignal = Average[9](MyMACD)// Calcolo del Parabolic SARStep = 0.02Maximum = 0.2SARValue = SAR[Step, Step, Maximum]// Condizioni per il trendMACDLong = MyMACD > MySignalSARLong = close > SARValueMACDShort = MyMACD < MySignalSARShort = SARValue > High//stocastico lentoPeriodi = 10 // Numero di periodi per il calcolo del massimo e del minimoKp = 6 // Periodi per la media mobile di KDp = 3 // Periodi per la media mobile di DAvgType = 0 // 0=sma (media mobile semplice)IC = 75 // Soglia per l'ipercompratoIV = 100 - IC // Soglia per l'ipervenduto (25 se IC è 75)// Calcolo dei massimi e dei minimiHH = HIGHEST[Periodi](HIGH)LL = LOWEST[Periodi](LOW)// Calcolo dell'oscillatoreosc = (CLOSE - LL) / (HH - LL) * 100// Calcolo delle linee K e DLineaK = AVERAGE[Kp, AvgType](osc)LineaD = AVERAGE[Dp, AvgType](LineaK)// Definizione dei segnali di incrocio in zone di ipercomprato e ipervendutoIncrocioKSuD = LineaK CROSSES OVER LineaDIncrocioDKSu = LineaD CROSSES OVER LineaKCondL = IncrocioKSuD AND LineaK < IV // Segnale di acquisto quando K incrocia D verso l'alto in zona ipervendutoCondS = IncrocioDKSu AND LineaK > IC // Segnale di vendita quando D incrocia K verso l'alto in zona ipercomprato//bollinger rivistoBBVal = 5 // 5 periodi per le Bande di BollingerBBdev = 1.8 // 1.8 deviazione standard per le Bande di BollingerBBavg = average[BBval,0](close) // Calcolo della linea mediana delle Bande di BollingerBollUP = BBavg + ((std[BBval](close)) * BBdev) // Calcolo della banda superiore delle Bande di BollingerBollDN = BBavg - ((std[BBval](close)) * BBdev) // Calcolo della banda inferiore delle Bande di BollingerBullish = close > open // Condizione per identificare una candela rialzistaBearish = close < open // Condizione per identificare una candela ribassistaSma200 = average[200,0](close) // Calcolo della SMA a 200 periodiTrendUP = close > Sma200 // Condizione per un trend rialzistaTrendDN = close < Sma200 // Condizione per un trend ribassista// Condizioni per il segnale di acquistoL1 = Bullish AND Bearish[1]L2 = close[1] > BollDNL3 = low[1] <= BollDNCondL = TrendDN AND L1 AND L2 AND L3// Condizioni per il segnale di venditaS1 = Bearish AND Bullish[1]S2 = close[1] < BollUPS3 = high[1] >= BollUPCondS = TrendUP AND S1 AND S2 AND S3segnale = 0//breakout// Breakout RialzistaBreakoutRialzista = (HIGH = highest[10](HIGH)) AND ((HIGH - LOW) = highest[5](HIGH - LOW)) AND (VOLUME > average[5](VOLUME)) AND (CLOSE > (HIGH - ((HIGH - LOW) / 4)))// Breakout RibassistaBreakoutRibassista = (LOW = lowest[10](LOW)) AND ((HIGH - LOW) = highest[5](HIGH - LOW)) AND (VOLUME > average[5](VOLUME)) AND (CLOSE < (LOW + ((HIGH - LOW) / 4)))//volatilita breve e medio termine// Calcolo della volatilità di breve/brevissimo termine e di medio termineVolatilitaBreve5 = STD[5](log(close / close[1]))VolatilitaBreve10 = STD[10](log(close / close[1]))VolatilitaMedio100 = STD[100](log(close / close[1]))// Verifica delle condizioni di compressione della volatilitàCompressioneVolatilita5 = (VolatilitaBreve5 / VolatilitaMedio100) < 0.50CompressioneVolatilita10 = (VolatilitaBreve10 / VolatilitaMedio100) < 0.50// Calcolo del range per la barra correnteRangeCorrente = high - low// Inizializzazione del MinRange6 al range di 6 giorni fa per iniziare il confrontoMinRange6 = high[6] - low[6]// Confronto per trovare il minimo rangeMinRange6 = MIN(MinRange6, high[5] - low[5])MinRange6 = MIN(MinRange6, high[4] - low[4])MinRange6 = MIN(MinRange6, high[3] - low[3])MinRange6 = MIN(MinRange6, high[2] - low[2])MinRange6 = MIN(MinRange6, high[1] - low[1])// BoomerboomerOK = low > low[1] AND high < high[1] AND high[1] < high[2] AND low[1] > low[2]// Calcolo degli indicatori per il pattern doubleinsideindicator1 = high < High[2]indicator2 = high[1] < high[12]indicator3 = low > high[2]indicator4 = low[1] > low[2]// Verifica del pattern doubleinsidedoubleinside = indicator1 AND indicator2 AND indicator3 AND indicator4// Swing HighSwingHigh = (high < high[1]) AND (high[1] > high[2]) AND (close < open)// Swing LowSwingLow = (low > low[1]) AND (low[1] < low[2]) AND (close > open)// Key Reversal High BarKeyReversalHigh = (open > close[1]) AND (high > high[1]) AND (close < low[1]) AND (volume > average[5](volume))// Key Reversal Low BarKeyReversalLow = (open < close[1]) AND (low < low[1]) AND (close > high[1]) AND (volume > average[5](volume))// Calcolo degli indicatori per il pattern shooting star// Verifica se l'high corrente è il più alto degli ultimi 10 periodiindicator1 = high = highest[10](high)indicator2 = close < (low + ((high - low) / 3))indicator3 = open < (low + ((high - low) / 3))indicator4 = volume > average[5](volume)indicator5 = abs(close - open) < ((high - low) / 3)// Calcolo degli indicatori per il pattern hammerindicator1 = low < lowest[10](low)indicator2 = close > (high - ((high - low)/3))indicator3 = open > (high - ((high - low)/3))indicator4 = volume > average[5](volume)indicator5 = abs(close - open) < ((high - low)/3)Segnale = 900000000000000IF UP THENSegnale = Segnale + 10000000000000ELSIF DN THENSegnale = Segnale + 20000000000000ELSIF Lat THENSegnale = Segnale + 30000000000000ENDIFIF MACDLong AND SARLong THENTrendResult = Segnale + 1000000000000 // Indica un trend rialzistaELSIF MACDShort AND SARShort THENTrendResult = Segnale + 2000000000000 // Indica un trend ribassistaENDIFIF CondL THENSegnale = Segnale + 100000000000 // Segnale di acquistoELSIF CondS THENSegnale = Segnale + 200000000000 // Segnale di venditaENDIFIF CondL THENSegnale = Segnale + 10000000000 // Segnale di acquistoELSIF CondS THENSegnale = Segnale + 20000000000 // Segnale di venditaENDIFIF CondL THENSegnale = Segnale + 1000000000ELSIF CondS THENSegnale = Segnale + 2000000000ENDIFIF BreakoutRialzista THENSegnale = Segnale + 100000000ELSIF BreakoutRibassista THENSegnale = Segnale + 200000000ENDIFIF CompressioneVolatilita5 OR CompressioneVolatilita10 THENSegnale = Segnale + 10000000 // Compressione di volatilità identificataENDIFIF RangeCorrente < MinRange6 THENSegnale = Segnale + 1000000 // Pattern NR7 identificatoENDIFIF boomerOK THENSegnale = Segnale + 100000 // Se il pattern di Boomer è identificato, assegna 1ENDIFIF doubleinside THENSegnale = Segnale + 10000 // Se il pattern doubleinside è identificato, assegna 1ENDIFIF SwingHigh THENSegnale = Segnale + 1000 // Swing High identificatoELSIF SwingLow THENSegnale = Segnale + 2000 // Swing Low identificatoENDIFIF KeyReversalHigh THENSegnale = Segnale + 100 // Key Reversal High Bar identificataELSIF KeyReversalLow THENSegnale = Segnale + 200 // Key Reversal Low Bar identificataENDIFIF indicator1 AND indicator2 AND indicator3 AND indicator4 AND indicator5 THENSegnale = Segnale + 10 // Se il pattern shooting star è identificato, assegna 1ENDIFIF indicator1 AND indicator2 AND indicator3 AND indicator4 AND indicator5 THENSegnale = Segnale + 1 // Se il pattern hammer è identificato, assegna 1ENDIFIF Segnale = 900000000000000 THENSegnale = 0ENDIFSCREENER(Segnale AS "- risultati")02/21/2024 at 6:50 PM #228526Negli SCREENER non possono esserci variabili inutilizzate, quindi o le togli oppure le usi prima della fine del codice.
Io non posso farlo perché non so il motivo per il quale vuoi utilizzarle.
02/22/2024 at 11:02 PM #228604Ha ragione, sono riuscito a risolvere sfruttando tutte le variabili. Ora lo screener gira perfettamente ma ho un problema con la visione dei risultati. In pratica il sistema mi “accorcia” i numeri e invece di darmi il risultato completo, nasconde alcune cifre con le lettere che definiscono le migliaia (k) i milioni (M) etc.
E anche esportando il file in formato CSV, il risultato è accorciato.
Come posso fare per vedere tutte le cifre?
Qui il codice dello screener, in allegato metto anche il file di esportazione
screener completo123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191//trend medie mobiliSma5 = average[5,0](close)Sma20 = average[20,0](close)Rialzo = close > max(Sma5,Sma20)Ribasso = close < min(Sma5,Sma20)Laterale = ((close > Sma20) AND (close < Sma5)) OR ((close > Sma5) AND (close < Sma20))// Calcolo del MACD personalizzatoMyMACD = Average[12](close) - Average[26](close)MySignal = Average[9](MyMACD)// Calcolo del Parabolic SARStep = 0.02Maximum = 0.2SARValue = SAR[Step, Step, Maximum]// Condizioni per il trendMACDLong = MyMACD > MySignalSARLong = close > SARValueMACDShort = MyMACD < MySignalSARShort = SARValue > HighPeriodi = 10 // Numero di periodi per il calcolo del massimo e del minimoKp = 6 // Periodi per la media mobile di KDp = 3 // Periodi per la media mobile di DAvgType = 0 // 0=sma (media mobile semplice)IC = 75 // Soglia per l'ipercompratoIV = 100 - IC // Soglia per l'ipervenduto (25 se IC è 75)// Calcolo dei massimi e dei minimiHH = HIGHEST[Periodi](HIGH)LL = LOWEST[Periodi](LOW)// Calcolo dell'oscillatoreosc = (CLOSE - LL) / (HH - LL) * 100// Calcolo delle linee K e DLineaK = AVERAGE[Kp, AvgType](osc)LineaD = AVERAGE[Dp, AvgType](LineaK)// Definizione dei segnali di incrocio in zone di ipercomprato e ipervendutoIncrocioKSuD = LineaK CROSSES OVER LineaDIncrocioDKSu = LineaD CROSSES OVER LineaKCondL = IncrocioKSuD AND LineaK < IV // Segnale di acquisto quando K incrocia D verso l'alto in zona ipervendutoCondS = IncrocioDKSu AND LineaK > IC // Segnale di vendita quando D incrocia K verso l'alto in zona ipercompratoBBVal = 5 // 5 periodi per le Bande di BollingerBBdev = 1.8 // 1.8 deviazione standard per le Bande di BollingerBBavg = average[BBval,0](close) // Calcolo della linea mediana delle Bande di BollingerBollUP = BBavg + ((std[BBval](close)) * BBdev) // Calcolo della banda superiore delle Bande di BollingerBollDN = BBavg - ((std[BBval](close)) * BBdev) // Calcolo della banda inferiore delle Bande di BollingerBullish = close > open // Condizione per identificare una candela rialzistaBearish = close < open // Condizione per identificare una candela ribassistaSma200 = average[200,0](close) // Calcolo della SMA a 200 periodiTrendUP = close > Sma200 // Condizione per un trend rialzistaTrendDN = close < Sma200 // Condizione per un trend ribassista// Condizioni per il segnale di acquistoL1 = Bullish AND Bearish[1]L2 = close[1] > BollDNL3 = low[1] <= BollDNCondL = TrendDN AND L1 AND L2 AND L3// Condizioni per il segnale di venditaS1 = Bearish AND Bullish[1]S2 = close[1] < BollUPS3 = high[1] >= BollUPCondS = TrendUP AND S1 AND S2 AND S3// Breakout RialzistaBreakoutRialzista = (HIGH = highest[10](HIGH)) AND ((HIGH - LOW) = highest[5](HIGH - LOW)) AND (VOLUME > average[5](VOLUME)) AND (CLOSE > (HIGH - ((HIGH - LOW) / 4)))// Breakout RibassistaBreakoutRibassista = (LOW = lowest[10](LOW)) AND ((HIGH - LOW) = highest[5](HIGH - LOW)) AND (VOLUME > average[5](VOLUME)) AND (CLOSE < (LOW + ((HIGH - LOW) / 4)))// Calcolo della volatilità di breve/brevissimo termine e di medio termineVolatilitaBreve5 = STD[5](log(close / close[1]))VolatilitaBreve10 = STD[10](log(close / close[1]))VolatilitaMedio100 = STD[100](log(close / close[1]))// Verifica delle condizioni di compressione della volatilitàCompressioneVolatilita5 = (VolatilitaBreve5 / VolatilitaMedio100) < 0.50CompressioneVolatilita10 = (VolatilitaBreve10 / VolatilitaMedio100) < 0.50// Calcolo del range per la barra correnteRangeCorrente = high - low// Inizializzazione del MinRange6 al range di 6 giorni fa per iniziare il confrontoMinRange6 = high[6] - low[6]// Confronto per trovare il minimo rangeMinRange6 = MIN(MinRange6, high[5] - low[5])MinRange6 = MIN(MinRange6, high[4] - low[4])MinRange6 = MIN(MinRange6, high[3] - low[3])MinRange6 = MIN(MinRange6, high[2] - low[2])MinRange6 = MIN(MinRange6, high[1] - low[1])// BoomerboomerOK = low > low[1] AND high < high[1] AND high[1] < high[2] AND low[1] > low[2]// Calcolo degli indicatori per il pattern doubleinsideindicator1 = high < High[2]indicator2 = high[1] < high[12]indicator3 = low > high[2]indicator4 = low[1] > low[2]// Verifica del pattern doubleinsidedoubleinside = indicator1 AND indicator2 AND indicator3 AND indicator4// Swing HighSwingHigh = (high < high[1]) AND (high[1] > high[2]) AND (close < open)// Swing LowSwingLow = (low > low[1]) AND (low[1] < low[2]) AND (close > open)// Key Reversal High BarKeyReversalHigh = (open > close[1]) AND (high > high[1]) AND (close < low[1]) AND (volume > average[5](volume))// Key Reversal Low BarKeyReversalLow = (open < close[1]) AND (low < low[1]) AND (close > high[1]) AND (volume > average[5](volume))// Calcolo degli indicatori per il pattern shooting star// Verifica se l'high corrente è il più alto degli ultimi 10 periodiindicator1 = high = highest[10](high)indicator2 = close < (low + ((high - low) / 3))indicator3 = open < (low + ((high - low) / 3))indicator4 = volume > average[5](volume)indicator5 = abs(close - open) < ((high - low) / 3)// Calcolo degli indicatori per il pattern hammerindicator1 = low < lowest[10](low)indicator2 = close > (high - ((high - low)/3))indicator3 = open > (high - ((high - low)/3))indicator4 = volume > average[5](volume)indicator5 = abs(close - open) < ((high - low)/3)Segnale = 90000000000000IF Rialzo THENSegnale = Segnale + 1000000000000ELSIF Ribasso THENSegnale = Segnale + 2000000000000ELSIF Laterale THENSegnale = Segnale + 3000000000000ENDIFIF MACDLong AND SARLong THENSegnale = Segnale + 100000000000// Indica un trend rialzistaELSIF MACDShort AND SARShort THENSegnale = Segnale + 200000000000// Indica un trend ribassistaENDIFIF CondL THENSegnale = Segnale + 10000000000 // Segnale di acquistoELSIF CondS THENSegnale = Segnale + 20000000000 // Segnale di venditaENDIFIF CondL THENSegnale = Segnale + 1000000000ELSIF CondS THENSegnale = Segnale + 2000000000ENDIFIF BreakoutRialzista THENSegnale = Segnale + 100000000ELSIF BreakoutRibassista THENSegnale = Segnale + 200000000ENDIFIF CompressioneVolatilita5 OR CompressioneVolatilita10 THENSegnale = Segnale + 10000000 // Compressione di volatilità identificataENDIFIF RangeCorrente < MinRange6 THENSegnale = Segnale + 1000000 // Pattern NR7 identificatoENDIFIF boomerOK THENSegnale = Segnale + 100000 // Se il pattern di Boomer è identificato, assegna 1ENDIFIF doubleinside THENSegnale = Segnale + 10000 // Se il pattern doubleinside è identificato, assegna 1ENDIFIF SwingHigh THENSegnale = Segnale + 1000 // Swing High identificatoELSIF SwingLow THENSegnale = Segnale + 2000 // Swing Low identificatoENDIFIF KeyReversalHigh THENSegnale = Segnale + 100 // Key Reversal High Bar identificataELSIF KeyReversalLow THENSegnale = Segnale + 200 // Key Reversal Low Bar identificataENDIFIF indicator1 AND indicator2 AND indicator3 AND indicator4 AND indicator5 THENSegnale = Segnale + 10 // Se il pattern shooting star è identificato, assegna 1ENDIFIF indicator1 AND indicator2 AND indicator3 AND indicator4 AND indicator5 THENSegnale = Segnale + 1 // Se il pattern hammer è identificato, assegna 1ENDIFIF Segnale = 900000000000 THENSegnale = 0ENDIFSCREENER[Segnale](Segnale AS "- risultati")02/23/2024 at 11:12 AM #228618Sono numeri troppo grandi, li mette in notazione esponenziale. Succede anche per le date che le indica con 20M.
Devi per forza usare numeri di 5-6 cifre, non di più.
02/23/2024 at 12:21 PM #228632Grazie mille, ora ho diviso lo screener in tre e le cifre vengono fuori correttamente. L’unica cosa che non capisco è come la parte 1 funziona perfettamente e non screma nessun titolo ma gli assegna un numero maggiore di “0” se la condizione si verifica e lo “0” se non si verifica nessuna condizione. Le parti 2 e 3, pur replicandole esattamente (o almeno, così mi pare) alla prima, scremano i titoli.
Allego i due codici non funzionanti, davvero non riesco a capire dove sta l’errore
parte 3 che screma102/23/2024 at 4:24 PM #228653Intanto la riga 231 va scritta così:
1IF indicator1 OR indicator2 OR indicator3 OR indicator4 OR indicator5 THENbasta che uno qualsiasi sia verificato, invece con AND devono verificarsi TUTTI e non è possibile!
Per il resto vanno bene, sia la parte 2 che la parte 3.
Nella parte 3 ci sono gli indicatori da 1 a 5 ripetuti 3 volte; le prime due volte puoi anche commentarli o toglierli, non servono a niente perché la terza volta va a sovrascrivere qualunque valore avessero in precedenza.
Alla riga 42, dove non hai messo il dato tra parentesi tonde alla fine, quello su cui vengono fatti calcoli, automaticamente assume (close) per difetto.
02/23/2024 at 4:37 PM #228662Veramente, veramente grazie!
-
AuthorPosts
Find exclusive trading pro-tools on