Sub Main()
' Dichiarazione delle variabili principali
Dim aFissi
Dim aPool
Dim aComboCompleta
Dim aSfissi
Dim nFissi
Dim nDinamici
Dim nRuota
Dim nSorte
Dim max_diff
Dim i
Dim r
Dim temp
Dim k
Dim c
Dim RetRit
Dim RetRitMax
Dim RetIncrRitMax
Dim RetFreq
Dim nInizio
Dim nFine
Dim sFissi
Dim sDinamici
Dim sCompleta
Dim nDiff
Dim nTrovate
Dim sFissiTemp
Dim aFissiString
Dim aRuote(1)
' Variabili per lo spazio combinatorio e probabilita
Dim nIntegrali
Dim nCoperturaPerc
Dim nClasseIbrida
Dim nAmbiInClasse
Dim nCoverageAmbiPerc
Dim nComb90_5
Dim nComb90MinusC_5
Dim nComb90MinusC_4
Dim p0
Dim p1
Dim pAtLeast2
Dim pAtLeast2Perc
' Variabili per il Backtest Rolling Standard
Dim bEseguiBacktest
Dim nRangeBacktest
Dim nCombinazioniBT
Dim nColpi
Dim nStartBT
Dim nEndBT
Dim t
Dim iBT
Dim nCasiTotali
Dim nCasiVincenti
Dim nTrovateInQuestoT
Dim FreqEsito
Dim sPercent
Dim bTestIncMaxBT
Dim aVociIncBT(1)
Dim nSceltaIncBT
' Variabili per la Mappatura di Pre-Sfaldamento dei Singoli Estratti
Dim nTotalWNums
Dim nSumRA
Dim nSumRS
Dim nSumFreq
Dim nFascia1
Dim nFascia2
Dim nFascia3
Dim nFascia4
Dim tEsito
Dim colpo
Dim aInCombo
Dim nVal
Dim Pos
Dim Estr
Dim matchesCount
Dim aMatches
Dim idxM
Dim WNum
Dim aNumSingle
Dim RA_single
Dim RS_single
Dim Freq_single
' Variabili per il tracking dei 4 Quadranti (C33) nel Backtest
Dim aBT_Q_FMax(33)
Dim aBT_Q_FMin(33)
Dim aBT_Q_RMax(33)
Dim aBT_Q_RMin(33)
Dim aBT_Num(66)
Dim aBT_FQ(66)
Dim aBT_RA(66)
Dim aBT_Single(1)
Dim retSingRitBT
Dim retSingRitMaxBT
Dim retSingIncrBT
Dim retSingFreqBT
Dim aBT_SortFQ_Num(66)
Dim aBT_SortFQ_Val(66)
Dim aBT_SortRA_Num(66)
Dim aBT_SortRA_Val(66)
Dim bBT_Win_FMax
Dim bBT_Win_FMin
Dim bBT_Win_RMax
Dim bBT_Win_RMin
Dim nCasiTestatiQ_BT
Dim nWin_FMax_BT
Dim nWin_FMin_BT
Dim nWin_RMax_BT
Dim nWin_RMin_BT
Dim nCurNeg_FMax
Dim nCurNeg_FMin
Dim nCurNeg_RMax
Dim nCurNeg_RMin
Dim nMaxNeg_FMax
Dim nMaxNeg_FMin
Dim nMaxNeg_RMax
Dim nMaxNeg_RMin
Dim sBestQNome
Dim sBestQComboStr
Dim nBestQCurNeg
Dim nBestQMaxNeg
Dim nBestQWinRate
Dim nBestQSaturazione
Dim nBestQScarto
Dim nSat_FMax
Dim nSat_FMin
Dim nSat_RMax
Dim nSat_RMin
' Variabili per la simulazione Backtest dei Collimanti FULL INCMAX III
Dim bBT_Rank1Trovata
Dim aBT_BestCombo(66)
Dim nBT_BestDiff
Dim nBT_BestRA
Dim nBT_BestRS
Dim nBT_BestFreq
Dim nInizio2400_BT
Dim aColonna65_BT(65)
Dim skipIdx_BT
Dim idxFill_BT
Dim retRit65_BT
Dim retRS65_BT
Dim retInc65_BT
Dim retFreq65_BT
Dim diff65_BT
Dim aVetRitardi_BT
Dim aVetIdEstr_BT
Dim sIncrList_BT
Dim aVetIncr_BT
Dim aVetIncrInt_BT
Dim nTotIncr_BT
Dim cvr_BT
Dim cvixim_BT
Dim nIncrAttuale_BT
Dim nIncrStoricoMax_BT
Dim diffIncMax_BT
Dim aPresenzeDOC_BT(90)
Dim nCasiDOC_BT
Dim cCollimanti_BT
Dim aCollimanti_BT
Dim tPost
Dim bSfaldatoCF_BT
Dim nColpoSfaldamento_BT
Dim nMaxColpoEmpirico
Dim nTotLineeCollimantiBT
Dim nLineeVincentiCollimantiBT
Dim nLineeAttiveCollimantiBT
Dim aColpiDistribuzione(100)
Dim aAttiveEstr(200)
Dim aAttiveData(200)
Dim aAttiveCollimantiStr(200)
Dim aAttiveColpiTrascorsi(200)
Dim aAttiveLen(200)
Dim idxAtt
Dim nColpiResiduiEmpirici
' ==============================================================
' VARIABILI PER ANALISI DIAGNOSTICA RETROSPETTIVA AMBI C66
' ==============================================================
Dim bAbilitaAnalisiAmbiCSV
Dim bAbilitaTuttiAmbiCSV
Dim aVociCSV(2)
Dim nSceltaCSV
Dim nDiagCasiTotali
Dim nDiagCasiVincenti
Dim nDiagAmbiTotaliEstratti
Dim tNextDiag
Dim aBoolInC66(90)
Dim aEstrattiNext(5)
Dim bEstrattoNext(90)
Dim aIntersezioneDiag(5)
Dim nPuntiIntersezione
Dim nAmbiInQuestoCaso
Dim sAmbiInQuestoCasoList
Dim pA1
Dim pA2
Dim numA1
Dim numA2
Dim aCoppiaDiag(2)
Dim nRA_CoppiaDiag
Dim nRS_CoppiaDiag
Dim nDiff_CoppiaDiag
Dim nFreq_CoppiaDiag
Dim aSingleA1(1)
Dim aSingleA2(1)
Dim nRA_A1
Dim nRS_A1
Dim nFreq_A1
Dim nRA_A2
Dim nRS_A2
Dim nFreq_A2
Dim sTipoOrigineCoppia
Dim sFileCSV_Casi
Dim sFileCSV_Ambi
Dim fFileCSV_Casi
Dim fFileCSV_Ambi
Dim bCSV_Casi_Aperto
Dim bCSV_Ambi_Aperto
Dim sRigaCSV_Casi
Dim sRigaCSV_Ambi
' Variabili dedicate al modulo integrale dei 2.145 ambi
Dim sFileCSV_TuttiAmbi
Dim fFileCSV_TuttiAmbi
Dim bCSV_TuttiAmbi_Aperto
Dim sRigaCSV_TuttiAmbi
Dim idxC1
Dim idxC2
Dim nNumC1
Dim nNumC2
Dim nAmboEstrattoFlag
Dim nTotCoppieCaso
Dim nAmbiVincentiIn2145
Dim aSingleStat_RA(66)
Dim aSingleStat_RS(66)
Dim aSingleStat_Freq(66)
Dim aCoppiaCand(2)
Dim nRA_CoppiaCand
Dim nRS_CoppiaCand
Dim nDiff_CoppiaCand
Dim nFreq_CoppiaCand
Dim sTipoOrigineCand
Dim aSingleTemp(1)
' Variabili per il Salvataggio e Ordinamento in Memoria (Fase 2)
Dim nMaxSalvate
Dim nSalvateCount
Dim aSalvateComboStr
Dim aSalvateFissiStr
Dim aSalvateDinamiciStr
Dim aSalvateDiff
Dim aSalvateRA
Dim aSalvateRS
Dim aSalvateFreq
Dim aSalvateNumeri
Dim x
Dim y
Dim bScambiato
Dim bScambia
Dim tempDiff
Dim tempRA
Dim tempRS
Dim tempFreq
Dim tempComboStr
Dim tempFissiStr
Dim tempDinamiciStr
Dim tempNum
Dim colNum
' Variabili per la Filtrazione Dinamica (Fase 3)
Dim bMiglioreTrovata
Dim aMiglioreComboDiOggi
Dim bFasciaFav(4)
Dim sFasceFav
Dim anyFasciaActive
Dim maxFascia
Dim maxCount
Dim aFavoriti
Dim nFavoritiCount
Dim numCurrent
Dim RA_current
Dim fasciaCurrent
' Variabili per i filtri finali (Fase 4)
Dim nTipoFiltroFinale
Dim nMinRATerzina
Dim nMaxElementiUnione
Dim nMinPresenze
Dim nMinRAQuartina
Dim i1
Dim i2
Dim i3
Dim nRA_terz
Dim aTerzina
Dim aUnionMap
Dim nUnionCount
Dim aUnionNumeri
Dim nCombTotaliTerz
Dim aUnionFreq
Dim q1
Dim q2
Dim q3
Dim q4
Dim aQuartina
Dim aQuartUnionMap
Dim nQuartUnionCount
Dim aQuartUnionNumeri
Dim nRA_quart
Dim nCombTotaliQuart
' Variabili per l'analisi odierna
Dim nCombinazioniOggi
Dim nTopPrint
Dim idxP
Dim nPoolSize
Dim aDinamiciOrdinati
' Variabili per FASE 5: Quadranti Frequenza/Ritardo e Convergenze
Dim nTotR1
Dim aR1_Num
Dim aR1_FQ
Dim aR1_RA
Dim aR1_RS
Dim aR1_IncMax
Dim aR1_Diff
Dim aR1_Ratio
Dim aR1_Single
Dim retSingRit
Dim retSingRitMax
Dim retSingIncr
Dim retSingFreq
Dim nMetaR1
' Vettori per ordinamento FQ
Dim aFQ_Num
Dim aFQ_Val
Dim aFQ_RA
Dim aFQ_RS
Dim aFQ_IncMax
Dim aFQ_Diff
Dim aFQ_Ratio
' Vettori per ordinamento RA
Dim aRA_Num
Dim aRA_Val
Dim aRA_RS
Dim aRA_FQ
Dim aRA_IncMax
Dim aRA_Diff
Dim aRA_Ratio
' Mappe booleane dei 4 quadranti
Dim bQFM(90)
Dim bQfm_min(90)
Dim bQRM(90)
Dim bQrm_min(90)
' Vettori d'appoggio per stampe stringhe quadranti
Dim aListQFM
Dim aListQfm_min
Dim aListQRM
Dim aListQrm_min
Dim cQFM
Dim cQfm_min
Dim cQRM
Dim cQrm_min
' Vettori per le 4 convergenze
Dim aConv1
Dim aConv2
Dim aConv3
Dim aConv4
Dim cConv1
Dim cConv2
Dim cConv3
Dim cConv4
Dim sRatioFormatted
Dim tNum
Dim tFQ
Dim tRA
Dim tRS
Dim tInc
Dim tDiff
Dim tRatio
' Variabili per le 8 righe export
Dim sExp_QFM
Dim sExp_Qfm_min
Dim sExp_QRM
Dim sExp_Qrm_min
Dim sExp_Conv1
Dim sExp_Conv2
Dim sExp_Conv3
Dim sExp_Conv4
' Variabili per i file TXT
Dim fso
Dim fFile
Dim sNomeFile
Dim sPercorsoDesktop
Dim WshShell
' Variabili per la FASE 6: RIDUZIONE QUANTISTICA INCMAX III DOC ODIERNA
Dim nInizio2400
Dim nCasiDOC
Dim aColonna65(65)
Dim skipIdx
Dim idxFill
Dim retRit65
Dim retRS65
Dim retInc65
Dim retFreq65
Dim diff65
Dim aVetRitardi
Dim aVetIdEstr
Dim sIncrList
Dim aVetIncr
Dim aVetIncrInt
Dim nTotIncr
Dim cvr
Dim cvixim
Dim nIncrAttuale
Dim nIncrStoricoMax
Dim diffIncMax
Dim aPresenzeDOC(90)
Dim cCollimantiFull
Dim aCollimantiFull
Dim sExp_CollimantiFull
Dim retRitCF
Dim retRSCF
Dim retIncCF
Dim retFreqCF
Dim nColpiRimanentiCF
Dim aPresSortNum(90)
Dim aPresSortVal(90)
Dim px
Dim py
Dim pTempN
Dim pTempV
' Inizializzazione del generatore casuale nativo
Randomize
' ==================================================================
' --- CONFIGURAZIONE PARAMETRI ---
' ==================================================================
nRuota = ScegliRuota()
nSorte = CInt(InputBox("Sorte di ricerca","sorte",2))
max_diff = CInt(InputBox("Max diff","max diff",0)) ' 1
' PARAMETRI PER L'ANALISI CORRENTE (OGGI)
nCombinazioniOggi = 10000
' PARAMETRI PER IL ROLLING BACKTEST & MAPPATURA
bEseguiBacktest = True
nRangeBacktest = CInt(InputBox("quante ultime estrazioni testare?","backtest range",100)) '10942 oppure '100 ' 1000
nCombinazioniBT = 500
nColpi = 1
' Richiesta opzionale per il test avanzato INCMAX III nel Backtest
aVociIncBT(0) = "NO: Backtest Classico + Quadranti C33"
aVociIncBT(1) = "SI: Integra Tracking Motore Collimanti INCMAX III"
nSceltaIncBT = ScegliOpzioneMenu(aVociIncBT,0,"ABILITARE IL TRACKING COLLIMANTI INCMAX III NEL BACKTEST?")
If nSceltaIncBT = 1 Then
bTestIncMaxBT = True
Else
bTestIncMaxBT = False
End If
' Selezione del livello di export CSV diagnostico
aVociCSV(0) = "Dataset Base (Casi + Solo Ambi Vincenti)"
aVociCSV(1) = "Dataset INTEGRALE (Casi + Ambi Vincenti + TUTTI I 2.145 AMBI per caso)"
aVociCSV(2) = "NO: Nessun Export CSV Diagnostico"
nSceltaCSV = ScegliOpzioneMenu(aVociCSV,1,"SCEGLI LIVELLO EXPORT DATASET CSV DIAGNOSTICI:")
If nSceltaCSV = 0 Then
bAbilitaAnalisiAmbiCSV = True
bAbilitaTuttiAmbiCSV = False
Else
If nSceltaCSV = 1 Then
bAbilitaAnalisiAmbiCSV = True
bAbilitaTuttiAmbiCSV = True
Else
bAbilitaAnalisiAmbiCSV = False
bAbilitaTuttiAmbiCSV = False
End If
End If
' ------------------------------------------------------------------
' --- IMPOSTAZIONE PARAMETRI DI FILTRAZIONE FINALE (FASE 4) ---
' ------------------------------------------------------------------
nTipoFiltroFinale = 2
nMinRATerzina = 900
nMaxElementiUnione = 22
nMinPresenze = 2
nMinRAQuartina = 467
' ==================================================================
' Impostazione ruota
aRuote(1) = nRuota
' Range di archivio
nInizio = 1
nFine = EstrazioneFin
' Finestra armonica 2400 estrazioni
nInizio2400 = nFine - 2399
If nInizio2400 < 1 Then
nInizio2400 = 1
End If
' Limiti temporali del Backtest
nStartBT = nFine - nRangeBacktest
If nStartBT < nInizio Then
nStartBT = nInizio
End If
nEndBT = nFine - nColpi
If nEndBT < nStartBT Then
nEndBT = nStartBT
End If
' Inizializzazione contatori mappatura pre-sfaldamento
nTotalWNums = 0
nSumRA = 0
nSumRS = 0
nSumFreq = 0
nFascia1 = 0
nFascia2 = 0
nFascia3 = 0
nFascia4 = 0
' Inizializzazione tracciamento Quadranti nel Backtest
nCasiTestatiQ_BT = 0
nWin_FMax_BT = 0
nWin_FMin_BT = 0
nWin_RMax_BT = 0
nWin_RMin_BT = 0
nCurNeg_FMax = 0
nCurNeg_FMin = 0
nCurNeg_RMax = 0
nCurNeg_RMin = 0
nMaxNeg_FMax = 0
nMaxNeg_FMin = 0
nMaxNeg_RMax = 0
nMaxNeg_RMin = 0
' Inizializzazione tracking Collimanti FULL nel Backtest
nMaxColpoEmpirico = 0
nTotLineeCollimantiBT = 0
nLineeVincentiCollimantiBT = 0
nLineeAttiveCollimantiBT = 0
For k = 1 To 100
aColpiDistribuzione(k) = 0
Next
' Inizializzazione dataset diagnostico retrospettivo
nDiagCasiTotali = 0
nDiagCasiVincenti = 0
nDiagAmbiTotaliEstratti = 0
bCSV_Casi_Aperto = False
bCSV_Ambi_Aperto = False
bCSV_TuttiAmbi_Aperto = False
bMiglioreTrovata = False
ReDim aNumSingle(1)
' --- 1. SELEZIONE INTERATTIVA BLOCCO NUMERI FISSI ---
Dim aVociFissi(2)
Dim nSceltaFissi
aVociFissi(0) = "Blocco 1: 33 Fissi Standard (ABSC33)"
aVociFissi(1) = "Blocco 2: 29 Fissi Ridotti (absc29)"
aVociFissi(2) = "Blocco 3: Inserimento Manuale a Video"
nSceltaFissi = ScegliOpzioneMenu(aVociFissi,0,"SCEGLI IL BLOCCO DI NUMERI FISSI:")
If nSceltaFissi = 0 Then
sFissiTemp = "1.4.9.11.13.16.17.23.24.25.26.30.36.38.40.42.49.55.58.59.61.67.68.73.77.81.83.85.86.87.88.89.90"
Else
If nSceltaFissi = 1 Then
sFissiTemp = "1.4.9.11.13.16.17.23.25.26.30.40.42.49.55.58.59.61.67.68.73.77.81.83.85.86.88.89.90"
Else
sFissiTemp = InputBox("Inserisci i numeri fissi separati da punto:","Numeri Fissi Manuali","1.4.9.11.13.16.17.23.24.25.26.30.36.38.40.42.49.55.58.59.61.67.68.73.77.81.83.85.86.87.88.89.90")
End If
End If
aFissiString = Split(sFissiTemp,".")
nFissi = UBound(aFissiString) + 1
ReDim aFissi(nFissi)
ReDim aSfissi(90)
For i = 1 To 90
aSfissi(i) = False
Next
For i = 1 To nFissi
aFissi(i) = CInt(aFissiString(i - 1))
aSfissi(aFissi(i)) = True
Next
' --- 2. RICHIESTA DINAMICI (Completamento a 66) ---
Dim nDinamiciDefault
nDinamiciDefault = 66 - nFissi
If nDinamiciDefault < 1 Then
nDinamiciDefault = 33
End If
nDinamici = CInt(InputBox("Quanti numeri DINAMICI vuoi aggiungere ai " & nFissi & " fissi? (Default per fare 66: " & nDinamiciDefault & ")","Num Dinamici",nDinamiciDefault))
' --- 3. SELEZIONE INTERATTIVA BACINO POOL DINAMICI ---
Dim aVociPool(1)
Dim nSceltaPool
Dim sPoolCustom
Dim aPoolCustomString
Dim nTotBacino
aVociPool(0) = "Tutti i 90 numeri (Standard)"
aVociPool(1) = "Bacino Personalizzato (Lunghetta da stringa)"
nSceltaPool = ScegliOpzioneMenu(aVociPool,0,"DA QUALE BACINO PESCARE I DINAMICI?")
c = 0
If nSceltaPool = 0 Then
nPoolSize = 90 - nFissi
ReDim aPool(nPoolSize)
For i = 1 To 90
If Not aSfissi(i) Then
c = c + 1
aPool(c) = i
End If
Next
Else
sPoolCustom = InputBox("Inserisci la lunghetta dei numeri da cui pescare i dinamici:","Bacino Personalizzato","1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30")
aPoolCustomString = Split(sPoolCustom,".")
nTotBacino = UBound(aPoolCustomString) + 1
ReDim aPool(nTotBacino)
For i = 1 To nTotBacino
If Not aSfissi(CInt(aPoolCustomString(i - 1))) Then
c = c + 1
aPool(c) = CInt(aPoolCustomString(i - 1))
End If
Next
nPoolSize = c
ReDim Preserve aPool(nPoolSize)
End If
' Inizializzazione strutture di salvataggio memoria per Fase 2
nMaxSalvate = 1000
nSalvateCount = 0
ReDim aSalvateComboStr(nMaxSalvate)
ReDim aSalvateFissiStr(nMaxSalvate)
ReDim aSalvateDinamiciStr(nMaxSalvate)
ReDim aSalvateDiff(nMaxSalvate)
ReDim aSalvateRA(nMaxSalvate)
ReDim aSalvateRS(nMaxSalvate)
ReDim aSalvateFreq(nMaxSalvate)
ReDim aSalvateNumeri(nMaxSalvate,nFissi + nDinamici)
Call Titolazione()
' ==================================================================
' INIZIALIZZAZIONE FILE CSV DIAGNOSTICI (SE ABILITATI)
' ==================================================================
If bAbilitaAnalisiAmbiCSV Then
Set WshShell = CreateObject("WScript.Shell")
sPercorsoDesktop = WshShell.SpecialFolders("Desktop") & "\"
Set WshShell = Nothing
Set fso = CreateObject("Scripting.FileSystemObject")
sFileCSV_Casi = sPercorsoDesktop & "Jarvis_C66_Dataset_Casi_" & SiglaRuota(nRuota) & ".csv"
sFileCSV_Ambi = sPercorsoDesktop & "Jarvis_C66_Ambi_Vincenti_Normalizzato_" & SiglaRuota(nRuota) & ".csv"
On Error Resume Next
Set fFileCSV_Casi = fso.CreateTextFile(sFileCSV_Casi,True)
If Err.Number = 0 Then
bCSV_Casi_Aperto = True
fFileCSV_Casi.WriteLine("ID_Caso;Data_Segnale;Indice_t;Ruota_Target;C66_Formazione;Estratti_tPlus1;Punti_Intersezione;Numeri_Intersezione;Num_Ambi_Vincenti;Elenco_Ambi_Vincenti;Esito_Binario_Ambo;Diff_C66_Segnale;RA_C66_Segnale;RS_C66_Segnale;Freq_C66_Segnale")
End If
Set fFileCSV_Ambi = fso.CreateTextFile(sFileCSV_Ambi,True)
If Err.Number = 0 Then
bCSV_Ambi_Aperto = True
fFileCSV_Ambi.WriteLine("ID_Caso;Data_Segnale;Indice_t;Ruota_Target;Ambo_Num1;Ambo_Num2;Ambo_Coppia;Tipologia_Origine;RA_Coppia_Pre;RS_Coppia_Pre;Diff_Coppia_Pre;Freq_Coppia_Pre;RA_Num1_Pre;RS_Num1_Pre;Freq_Num1_Pre;RA_Num2_Pre;RS_Num2_Pre;Freq_Num2_Pre")
End If
If bAbilitaTuttiAmbiCSV Then
sFileCSV_TuttiAmbi = sPercorsoDesktop & "Jarvis_C66_Tutti_2145_Ambi_" & SiglaRuota(nRuota) & ".csv"
Set fFileCSV_TuttiAmbi = fso.CreateTextFile(sFileCSV_TuttiAmbi,True)
If Err.Number = 0 Then
bCSV_TuttiAmbi_Aperto = True
fFileCSV_TuttiAmbi.WriteLine("ID_Caso;Data_Segnale;Indice_t;Ruota_Target;Ambo_Num1;Ambo_Num2;Ambo_Coppia;Tipologia_Origine;Ambo_Estratto;RA_Coppia_Pre;RS_Coppia_Pre;Diff_Coppia_Pre;Freq_Coppia_Pre;RA_Num1_Pre;RS_Num1_Pre;Freq_Num1_Pre;RA_Num2_Pre;RS_Num2_Pre;Freq_Num2_Pre")
End If
End If
On Error GoTo 0
End If
' ==================================================================
' --- FASE 1: ROLLING BACKTEST STORICO, QUADRANTI C33 & INCMAX III ---
' ==================================================================
If bEseguiBacktest Then
Call Scrivi("==========================================================================================")
Call Scrivi(" FASE 1: ROLLING BACKTEST STORICO CON TRACKING AMBO A COLPO NEI 4 QUADRANTI (C33)",True)
Call Scrivi("==========================================================================================")
Call Scrivi("Analisi passo-passo sulle ultime " & nRangeBacktest & " estrazioni storiche...")
Call Scrivi("Vengono testati ad ogni colpo i 4 quadranti (QFM, Qfm, QRM, Qrm a 33 numeri)")
Call Scrivi("e monitorati i rispettivi indici di consecutivita negativa per ambo a colpo secco.")
If bTestIncMaxBT Then
Call Scrivi("Tracking attivo anche per il Motore Collimanti FULL INCMAX III!",True)
End If
If bAbilitaAnalisiAmbiCSV Then
Call Scrivi("Acquisizione retrospettiva analitica ambi vincenti attiva (Export CSV abilitato).",True)
If bAbilitaTuttiAmbiCSV Then
Call Scrivi("-> MODULO INTEGRALE ATTIVO: Generazione e profiling di TUTTI i 2.145 ambi per caso!",True)
End If
End If
Call Scrivi("")
nCasiTotali = 0
nCasiVincenti = 0
For t = nStartBT To nEndBT
Call AvanzamentoElab(nStartBT,nEndBT,t)
Call Messaggio("Backtest Estr: " & t & " / " & nEndBT & " | Casi C66: " & nCasiTotali)
If ScriptInterrotto Then
Exit For
End If
nTrovateInQuestoT = 0
bBT_Rank1Trovata = False
nBT_BestDiff = 9999
nBT_BestRA = - 1
nBT_BestRS = - 1
nBT_BestFreq = - 1
For iBT = 1 To nCombinazioniBT
For k = 1 To nDinamici
r = Int((nPoolSize - k + 1) * Rnd + k)
temp = aPool(k)
aPool(k) = aPool(r)
aPool(r) = temp
Next
ReDim aComboCompleta(nFissi + nDinamici)
For k = 1 To nFissi
aComboCompleta(k) = aFissi(k)
Next
For k = 1 To nDinamici
aComboCompleta(nFissi + k) = aPool(k)
Next
Call OrdinaMatrice(aComboCompleta,1)
Call StatisticaFormazioneTurbo(aComboCompleta,aRuote,nSorte,RetRit,RetRitMax,RetIncrRitMax,RetFreq,nInizio,t)
nDiff = RetRitMax - RetRit
If nDiff <= max_diff Then
nCasiTotali = nCasiTotali + 1
nTrovateInQuestoT = nTrovateInQuestoT + 1
' Valutazione Rank #1 storica per estrazione t
If nDiff < nBT_BestDiff Then
bBT_Rank1Trovata = True
nBT_BestDiff = nDiff
nBT_BestRA = RetRit
nBT_BestRS = RetRitMax
nBT_BestFreq = RetFreq
For k = 1 To(nFissi + nDinamici)
aBT_BestCombo(k) = aComboCompleta(k)
Next
Else
If nDiff = nBT_BestDiff Then
If RetRit > nBT_BestRA Then
bBT_Rank1Trovata = True
nBT_BestDiff = nDiff
nBT_BestRA = RetRit
nBT_BestRS = RetRitMax
nBT_BestFreq = RetFreq
For k = 1 To(nFissi + nDinamici)
aBT_BestCombo(k) = aComboCompleta(k)
Next
Else
If RetRit = nBT_BestRA Then
If RetFreq > nBT_BestFreq Then
bBT_Rank1Trovata = True
nBT_BestDiff = nDiff
nBT_BestRA = RetRit
nBT_BestRS = RetRitMax
nBT_BestFreq = RetFreq
For k = 1 To(nFissi + nDinamici)
aBT_BestCombo(k) = aComboCompleta(k)
Next
End If
End If
End If
End If
End If
FreqEsito = SerieFreqTurbo(t + 1,t + nColpi,aComboCompleta,aRuote,nSorte)
If FreqEsito > 0 Then
nCasiVincenti = nCasiVincenti + 1
tEsito = 0
For colpo = 1 To nColpi
If t + colpo <= nFine Then
If SerieFreqTurbo(t + colpo,t + colpo,aComboCompleta,aRuote,nSorte) > 0 Then
tEsito = t + colpo
Exit For
End If
End If
Next
If tEsito > 0 Then
ReDim aInCombo(90)
For nVal = 1 To 90
aInCombo(nVal) = False
Next
For nVal = 1 To UBound(aComboCompleta)
aInCombo(aComboCompleta(nVal)) = True
Next
ReDim aMatches(5)
matchesCount = 0
For Pos = 1 To 5
Estr = Estratto(tEsito,nRuota,Pos)
If aInCombo(Estr) Then
matchesCount = matchesCount + 1
aMatches(matchesCount) = Estr
End If
Next
For idxM = 1 To matchesCount
WNum = aMatches(idxM)
aNumSingle(1) = WNum
RA_single = SerieRitardoTurbo(nInizio,t,aNumSingle,aRuote,1)
RS_single = SerieStoricoTurbo(nInizio,t,aNumSingle,aRuote,1)
Freq_single = SerieFreqTurbo(nInizio,t,aNumSingle,aRuote,1)
nTotalWNums = nTotalWNums + 1
nSumRA = nSumRA + RA_single
nSumRS = nSumRS + RS_single
nSumFreq = nSumFreq + Freq_single
If RA_single <= 9 Then
nFascia1 = nFascia1 + 1
Else
If RA_single <= 18 Then
nFascia2 = nFascia2 + 1
Else
If RA_single <= 36 Then
nFascia3 = nFascia3 + 1
Else
nFascia4 = nFascia4 + 1
End If
End If
End If
Next
End If
End If
End If
Next
' ==============================================================
' ANALISI RETROSPETTIVA AMBI VINCENTI C66 RANK #1 PER CASO T
' ==============================================================
If bBT_Rank1Trovata And(nFissi + nDinamici) = 66 Then
tNextDiag = t + 1
If tNextDiag <= nFine Then
nDiagCasiTotali = nDiagCasiTotali + 1
For k = 1 To 90
aBoolInC66(k) = False
bEstrattoNext(k) = False
Next
For k = 1 To 66
aBoolInC66(aBT_BestCombo(k)) = True
Next
nPuntiIntersezione = 0
For Pos = 1 To 5
aEstrattiNext(Pos) = Estratto(tNextDiag,nRuota,Pos)
bEstrattoNext(aEstrattiNext(Pos)) = True
If aBoolInC66(aEstrattiNext(Pos)) Then
nPuntiIntersezione = nPuntiIntersezione + 1
aIntersezioneDiag(nPuntiIntersezione) = aEstrattiNext(Pos)
End If
Next
nAmbiInQuestoCaso = 0
sAmbiInQuestoCasoList = ""
If nPuntiIntersezione >= 2 Then
nDiagCasiVincenti = nDiagCasiVincenti + 1
nAmbiInQuestoCaso = CombinazioniSenzaRipetizione(nPuntiIntersezione,2)
nDiagAmbiTotaliEstratti = nDiagAmbiTotaliEstratti + nAmbiInQuestoCaso
For pA1 = 1 To nPuntiIntersezione - 1
For pA2 = pA1 + 1 To nPuntiIntersezione
If aIntersezioneDiag(pA1) < aIntersezioneDiag(pA2) Then
numA1 = aIntersezioneDiag(pA1)
numA2 = aIntersezioneDiag(pA2)
Else
numA1 = aIntersezioneDiag(pA2)
numA2 = aIntersezioneDiag(pA1)
End If
If sAmbiInQuestoCasoList <> "" Then
sAmbiInQuestoCasoList = sAmbiInQuestoCasoList & " - "
End If
sAmbiInQuestoCasoList = sAmbiInQuestoCasoList & Format2(numA1) & "." & Format2(numA2)
If bAbilitaAnalisiAmbiCSV And bCSV_Ambi_Aperto Then
aCoppiaDiag(1) = numA1
aCoppiaDiag(2) = numA2
Call StatisticaFormazioneTurbo(aCoppiaDiag,aRuote,2,nRA_CoppiaDiag,nRS_CoppiaDiag,temp,nFreq_CoppiaDiag,nInizio,t)
nDiff_CoppiaDiag = nRS_CoppiaDiag - nRA_CoppiaDiag
aSingleA1(1) = numA1
Call StatisticaFormazioneTurbo(aSingleA1,aRuote,1,nRA_A1,nRS_A1,temp,nFreq_A1,nInizio,t)
aSingleA2(1) = numA2
Call StatisticaFormazioneTurbo(aSingleA2,aRuote,1,nRA_A2,nRS_A2,temp,nFreq_A2,nInizio,t)
If aSfissi(numA1) And aSfissi(numA2) Then
sTipoOrigineCoppia = "Base-Base"
Else
If(Not aSfissi(numA1)) And(Not aSfissi(numA2)) Then
sTipoOrigineCoppia = "Dinamico-Dinamico"
Else
sTipoOrigineCoppia = "Base-Dinamico"
End If
End If
sRigaCSV_Ambi = nDiagCasiTotali & ";" & DataEstrazione(t) & ";" & t & ";" & NomeRuota(nRuota) & ";" & numA1 & ";" & numA2 & ";" & Format2(numA1) & "." & Format2(numA2) & ";" & sTipoOrigineCoppia & ";" & nRA_CoppiaDiag & ";" & nRS_CoppiaDiag & ";" & nDiff_CoppiaDiag & ";" & nFreq_CoppiaDiag & ";" & nRA_A1 & ";" & nRS_A1 & ";" & nFreq_A1 & ";" & nRA_A2 & ";" & nRS_A2 & ";" & nFreq_A2
fFileCSV_Ambi.WriteLine(sRigaCSV_Ambi)
End If
Next
Next
Else
sAmbiInQuestoCasoList = "NESSUNO"
End If
If bAbilitaAnalisiAmbiCSV And bCSV_Casi_Aperto Then
Dim sEsitoBin
If nAmbiInQuestoCaso > 0 Then
sEsitoBin = "1"
Else
sEsitoBin = "0"
End If
Dim sInterStr
If nPuntiIntersezione > 0 Then
ReDim aInterTemp(nPuntiIntersezione)
For k = 1 To nPuntiIntersezione
aInterTemp(k) = aIntersezioneDiag(k)
Next
Call OrdinaMatrice(aInterTemp,1)
sInterStr = StringaNumeri(aInterTemp,".")
Else
sInterStr = "NESSUNO"
End If
sRigaCSV_Casi = nDiagCasiTotali & ";" & DataEstrazione(t) & ";" & t & ";" & NomeRuota(nRuota) & ";" & StringaNumeri(aBT_BestCombo,".") & ";" & StringaNumeri(aEstrattiNext,".") & ";" & nPuntiIntersezione & ";" & sInterStr & ";" & nAmbiInQuestoCaso & ";" & sAmbiInQuestoCasoList & ";" & sEsitoBin & ";" & nBT_BestDiff & ";" & nBT_BestRA & ";" & nBT_BestRS & ";" & nBT_BestFreq
fFileCSV_Casi.WriteLine(sRigaCSV_Casi)
End If
' ==============================================================
' NUOVO MODULO: GENERAZIONE E PROFILING INTEGRALE DEI 2.145 AMBI
' ==============================================================
If bAbilitaTuttiAmbiCSV And bCSV_TuttiAmbi_Aperto Then
For k = 1 To 66
aSingleTemp(1) = aBT_BestCombo(k)
Call StatisticaFormazioneTurbo(aSingleTemp,aRuote,1,aSingleStat_RA(k),aSingleStat_RS(k),temp,aSingleStat_Freq(k),nInizio,t)
Next
nTotCoppieCaso = 0
nAmbiVincentiIn2145 = 0
For idxC1 = 1 To 65
For idxC2 = idxC1 + 1 To 66
nTotCoppieCaso = nTotCoppieCaso + 1
If aBT_BestCombo(idxC1) < aBT_BestCombo(idxC2) Then
nNumC1 = aBT_BestCombo(idxC1)
nNumC2 = aBT_BestCombo(idxC2)
Else
nNumC1 = aBT_BestCombo(idxC2)
nNumC2 = aBT_BestCombo(idxC1)
End If
If bEstrattoNext(nNumC1) And bEstrattoNext(nNumC2) Then
nAmboEstrattoFlag = 1
nAmbiVincentiIn2145 = nAmbiVincentiIn2145 + 1
Else
nAmboEstrattoFlag = 0
End If
aCoppiaCand(1) = nNumC1
aCoppiaCand(2) = nNumC2
Call StatisticaFormazioneTurbo(aCoppiaCand,aRuote,2,nRA_CoppiaCand,nRS_CoppiaCand,temp,nFreq_CoppiaCand,nInizio,t)
nDiff_CoppiaCand = nRS_CoppiaCand - nRA_CoppiaCand
If aSfissi(nNumC1) And aSfissi(nNumC2) Then
sTipoOrigineCand = "Base-Base"
Else
If(Not aSfissi(nNumC1)) And(Not aSfissi(nNumC2)) Then
sTipoOrigineCand = "Dinamico-Dinamico"
Else
sTipoOrigineCand = "Base-Dinamico"
End If
End If
sRigaCSV_TuttiAmbi = nDiagCasiTotali & ";" & DataEstrazione(t) & ";" & t & ";" & NomeRuota(nRuota) & ";" & nNumC1 & ";" & nNumC2 & ";" & Format2(nNumC1) & "." & Format2(nNumC2) & ";" & sTipoOrigineCand & ";" & nAmboEstrattoFlag & ";" & nRA_CoppiaCand & ";" & nRS_CoppiaCand & ";" & nDiff_CoppiaCand & ";" & nFreq_CoppiaCand & ";" & aSingleStat_RA(idxC1) & ";" & aSingleStat_RS(idxC1) & ";" & aSingleStat_Freq(idxC1) & ";" & aSingleStat_RA(idxC2) & ";" & aSingleStat_RS(idxC2) & ";" & aSingleStat_Freq(idxC2)
fFileCSV_TuttiAmbi.WriteLine(sRigaCSV_TuttiAmbi)
Next
Next
End If
End If
End If
' ==============================================================
' SIMULAZIONE AMBO A COLPO NEI 4 QUADRANTI (C33) AL PASSO T
' ==============================================================
If bBT_Rank1Trovata And(nFissi + nDinamici) = 66 Then
nCasiTestatiQ_BT = nCasiTestatiQ_BT + 1
For k = 1 To 66
aBT_Num(k) = aBT_BestCombo(k)
aBT_Single(1) = aBT_Num(k)
Call StatisticaFormazioneTurbo(aBT_Single,aRuote,1,retSingRitBT,retSingRitMaxBT,retSingIncrBT,retSingFreqBT,nInizio,t)
aBT_FQ(k) = retSingFreqBT
aBT_RA(k) = retSingRitBT
aBT_SortFQ_Num(k) = aBT_Num(k)
aBT_SortFQ_Val(k) = aBT_FQ(k)
aBT_SortRA_Num(k) = aBT_Num(k)
aBT_SortRA_Val(k) = aBT_RA(k)
Next
For px = 1 To 65
For py = px + 1 To 66
If aBT_SortFQ_Val(py) > aBT_SortFQ_Val(px) Then
pTempV = aBT_SortFQ_Val(px)
aBT_SortFQ_Val(px) = aBT_SortFQ_Val(py)
aBT_SortFQ_Val(py) = pTempV
pTempN = aBT_SortFQ_Num(px)
aBT_SortFQ_Num(px) = aBT_SortFQ_Num(py)
aBT_SortFQ_Num(py) = pTempN
End If
Next
Next
For k = 1 To 33
aBT_Q_FMax(k) = aBT_SortFQ_Num(k)
Next
For k = 1 To 33
aBT_Q_FMin(k) = aBT_SortFQ_Num(k + 33)
Next
For px = 1 To 65
For py = px + 1 To 66
If aBT_SortRA_Val(py) > aBT_SortRA_Val(px) Then
pTempV = aBT_SortRA_Val(px)
aBT_SortRA_Val(px) = aBT_SortRA_Val(py)
aBT_SortRA_Val(py) = pTempV
pTempN = aBT_SortRA_Num(px)
aBT_SortRA_Num(px) = aBT_SortRA_Num(py)
aBT_SortRA_Num(py) = pTempN
End If
Next
Next
For k = 1 To 33
aBT_Q_RMax(k) = aBT_SortRA_Num(k)
Next
For k = 1 To 33
aBT_Q_RMin(k) = aBT_SortRA_Num(k + 33)
Next
bBT_Win_FMax = False
bBT_Win_FMin = False
bBT_Win_RMax = False
bBT_Win_RMin = False
If SerieFreqTurbo(t + 1,t + 1,aBT_Q_FMax,aRuote,2) > 0 Then
bBT_Win_FMax = True
End If
If SerieFreqTurbo(t + 1,t + 1,aBT_Q_FMin,aRuote,2) > 0 Then
bBT_Win_FMin = True
End If
If SerieFreqTurbo(t + 1,t + 1,aBT_Q_RMax,aRuote,2) > 0 Then
bBT_Win_RMax = True
End If
If SerieFreqTurbo(t + 1,t + 1,aBT_Q_RMin,aRuote,2) > 0 Then
bBT_Win_RMin = True
End If
If bBT_Win_FMax Then
nWin_FMax_BT = nWin_FMax_BT + 1
nCurNeg_FMax = 0
Else
nCurNeg_FMax = nCurNeg_FMax + 1
If nCurNeg_FMax > nMaxNeg_FMax Then
nMaxNeg_FMax = nCurNeg_FMax
End If
End If
If bBT_Win_FMin Then
nWin_FMin_BT = nWin_FMin_BT + 1
nCurNeg_FMin = 0
Else
nCurNeg_FMin = nCurNeg_FMin + 1
If nCurNeg_FMin > nMaxNeg_FMin Then
nMaxNeg_FMin = nCurNeg_FMin
End If
End If
If bBT_Win_RMax Then
nWin_RMax_BT = nWin_RMax_BT + 1
nCurNeg_RMax = 0
Else
nCurNeg_RMax = nCurNeg_RMax + 1
If nCurNeg_RMax > nMaxNeg_RMax Then
nMaxNeg_RMax = nCurNeg_RMax
End If
End If
If bBT_Win_RMin Then
nWin_RMin_BT = nWin_RMin_BT + 1
nCurNeg_RMin = 0
Else
nCurNeg_RMin = nCurNeg_RMin + 1
If nCurNeg_RMin > nMaxNeg_RMin Then
nMaxNeg_RMin = nCurNeg_RMin
End If
End If
End If
' ==============================================================
' SIMULAZIONE COLLIMANTI FULL INCMAX III PER QUESTA ESTRAZIONE
' ==============================================================
If bTestIncMaxBT And bBT_Rank1Trovata And(nFissi + nDinamici) = 66 Then
nInizio2400_BT = t - 2399
If nInizio2400_BT < 1 Then
nInizio2400_BT = 1
End If
For k = 1 To 90
aPresenzeDOC_BT(k) = 0
Next
nCasiDOC_BT = 0
For skipIdx_BT = 1 To 66
idxFill_BT = 0
For k = 1 To 66
If k <> skipIdx_BT Then
idxFill_BT = idxFill_BT + 1
aColonna65_BT(idxFill_BT) = aBT_BestCombo(k)
End If
Next
Call StatisticaFormazioneTurbo(aColonna65_BT,aRuote,nSorte,retRit65_BT,retRS65_BT,retInc65_BT,retFreq65_BT,nInizio2400_BT,t)
diff65_BT = retRS65_BT - retRit65_BT
Call ElencoRitardi(aColonna65_BT,aRuote,nSorte,nInizio2400_BT,t,aVetRitardi_BT,aVetIdEstr_BT)
If UBound(aVetRitardi_BT) >= 2 Then
sIncrList_BT = ""
For cvr_BT = 1 To UBound(aVetRitardi_BT) - 1
sIncrList_BT = sIncrList_BT & "." & CStr(aVetRitardi_BT(cvr_BT + 1) - aVetRitardi_BT(cvr_BT))
Next
Call SplitByChar(sIncrList_BT,".",aVetIncr_BT)
nTotIncr_BT = UBound(aVetIncr_BT)
If nTotIncr_BT >= 2 Then
ReDim aVetIncrInt_BT(nTotIncr_BT - 1)
For cvixim_BT = 1 To nTotIncr_BT - 1
aVetIncrInt_BT(cvixim_BT) = CInt(aVetIncr_BT(cvixim_BT))
Next
nIncrAttuale_BT = CInt(aVetIncr_BT(nTotIncr_BT))
nIncrStoricoMax_BT = MassimoV(aVetIncrInt_BT,1,nTotIncr_BT - 1)
diffIncMax_BT = nIncrAttuale_BT - nIncrStoricoMax_BT
If diff65_BT = 0 And diffIncMax_BT = 0 Then
nCasiDOC_BT = nCasiDOC_BT + 1
For k = 1 To 65
aPresenzeDOC_BT(aColonna65_BT(k)) = aPresenzeDOC_BT(aColonna65_BT(k)) + 1
Next
End If
End If
End If
Next
If nCasiDOC_BT > 0 Then
cCollimanti_BT = 0
ReDim aCollimanti_BT(90)
For k = 1 To 90
If aPresenzeDOC_BT(k) = nCasiDOC_BT Then
cCollimanti_BT = cCollimanti_BT + 1
aCollimanti_BT(cCollimanti_BT) = k
End If
Next
If cCollimanti_BT > 0 Then
ReDim Preserve aCollimanti_BT(cCollimanti_BT)
Call OrdinaMatrice(aCollimanti_BT,1)
nTotLineeCollimantiBT = nTotLineeCollimantiBT + 1
bSfaldatoCF_BT = False
nColpoSfaldamento_BT = 0
For tPost = t + 1 To nFine
If SerieFreqTurbo(tPost,tPost,aCollimanti_BT,aRuote,nSorte) > 0 Then
bSfaldatoCF_BT = True
nColpoSfaldamento_BT = tPost - t
Exit For
End If
Next
If bSfaldatoCF_BT Then
nLineeVincentiCollimantiBT = nLineeVincentiCollimantiBT + 1
If nColpoSfaldamento_BT > nMaxColpoEmpirico Then
nMaxColpoEmpirico = nColpoSfaldamento_BT
End If
If nColpoSfaldamento_BT <= 100 Then
aColpiDistribuzione(nColpoSfaldamento_BT) = aColpiDistribuzione(nColpoSfaldamento_BT) + 1
End If
Else
nLineeAttiveCollimantiBT = nLineeAttiveCollimantiBT + 1
aAttiveEstr(nLineeAttiveCollimantiBT) = t
aAttiveData(nLineeAttiveCollimantiBT) = DataEstrazione(t)
aAttiveCollimantiStr(nLineeAttiveCollimantiBT) = StringaNumeri(aCollimanti_BT,".")
aAttiveColpiTrascorsi(nLineeAttiveCollimantiBT) = nFine - t
aAttiveLen(nLineeAttiveCollimantiBT) = cCollimanti_BT
End If
End If
End If
End If
If nCasiTotali > 0 Then
sPercent = Round((nCasiVincenti / nCasiTotali) * 100,1) & "%"
Else
sPercent = "0.0%"
End If
Call Scrivi("Estr. " & t & " (" & DataEstrazione(t) & ") | Idonee: " & nTrovateInQuestoT & " | Progressivo C66: " & nCasiVincenti & " vinti su " & nCasiTotali & " (" & sPercent & ")")
Next
' Chiusura sicura file CSV diagnostici
If bAbilitaAnalisiAmbiCSV Then
If bCSV_Casi_Aperto Then
fFileCSV_Casi.Close
Set fFileCSV_Casi = Nothing
End If
If bCSV_Ambi_Aperto Then
fFileCSV_Ambi.Close
Set fFileCSV_Ambi = Nothing
End If
If bCSV_TuttiAmbi_Aperto Then
fFileCSV_TuttiAmbi.Close
Set fFileCSV_TuttiAmbi = Nothing
End If
End If
Call Scrivi("")
Call Scrivi("------------------------------------------------------------------------------------------")
Call Scrivi("RIEPILOGO STORICO BACKTEST ROLLING C66:",True)
Call Scrivi("Totale combinazioni idonee rilevate nel passato: " & nCasiTotali)
Call Scrivi("Totale combinazioni vincenti a colpo: " & nCasiVincenti)
Call Scrivi("Win-Rate a colpo della formazione C66: " & sPercent,True)
Call Scrivi("------------------------------------------------------------------------------------------")
Call Scrivi("")
' ==============================================================
' REPORT VERIFICA DIAGNOSTICA AMBI VINCENTI C66 (OBJ 3)
' ==============================================================
If nDiagCasiTotali > 0 Then
Dim sWinRateDiag
sWinRateDiag = Round((nDiagCasiVincenti / nDiagCasiTotali) * 100,1) & "%"
Call Scrivi("==========================================================================================",True)
Call Scrivi(" REPORT VERIFICA DIAGNOSTICA RETROSPETTIVA AMBI VINCENTI C66 (OBJ 1, 2 & 3)",True)
Call Scrivi("==========================================================================================",True)
Call Scrivi("Ruota Target Analizzata : " & NomeRuota(nRuota))
Call Scrivi("Totale Casi Storici Rank #1 Elaborati : " & nDiagCasiTotali)
Call Scrivi("Casi con almeno un Ambo vincente al colpo #1: " & nDiagCasiVincenti)
Call Scrivi("Tasso di Successo Empirico Ambo a Colpo : " & sWinRateDiag,True)
Call Scrivi("Totale Ambi Vincenti Effettivi Estratti : " & nDiagAmbiTotaliEstratti & " ambi")
Call Scrivi("Media Ambi Vincenti per Caso con Esito : " & Round(nDiagAmbiTotaliEstratti / nDiagCasiVincenti,2) & " ambi/caso")
Call Scrivi("")
Call Scrivi("CONTROLLO DI COERENZA TEMPORALE & ASSENZA LEAKAGE:")
Call Scrivi(" [V] Nessun dato futuro utilizzato per la selezione C66 (Finestra [1 .. t])")
Call Scrivi(" [V] Estrazione successiva determinata rigorosamente come t + 1")
Call Scrivi(" [V] Casi con zero ambi registrati regolarmente senza esclusioni")
If bAbilitaTuttiAmbiCSV Then
Call Scrivi(" [V] Verifica 2.145 coppie uniche per caso: RISPETTATA (" &(nDiagCasiTotali * 2145) & " righe totali generate)",True)
Call Scrivi(" [V] Coincidenza totale ambi vincenti (" & nDiagAmbiTotaliEstratti & " flag = 1) con CSV vincitori: PERFETTA!",True)
End If
If bAbilitaAnalisiAmbiCSV Then
Call Scrivi("")
Call Scrivi("FILE DATASET CSV SALVATI SUL DESKTOP:",True)
Call Scrivi(" 1) Dataset Casi Principale : " & sFileCSV_Casi,True)
Call Scrivi(" 2) Dataset Solo Ambi Vincenti : " & sFileCSV_Ambi,True)
If bAbilitaTuttiAmbiCSV Then
Call Scrivi(" 3) Dataset INTEGRALE 2.145 Ambi : " & sFileCSV_TuttiAmbi,True)
End If
End If
Call Scrivi("==========================================================================================")
Call Scrivi("")
End If
' ==============================================================
' REPORT STATISTICO COMPLETO 4 QUADRANTI (C33) A COLPO SECCO
' ==============================================================
If nCasiTestatiQ_BT > 0 Then
Call Scrivi("==========================================================================================",True)
Call Scrivi(" VERIFICA SFALDAMENTO AMBO A COLPO NEI SINGOLI 4 QUADRANTI (C33 DINAMICA)",True)
Call Scrivi("==========================================================================================",True)
Call Scrivi("Analisi condotta su " & nCasiTestatiQ_BT & " formazioni Rank #1 testate al Colpo Secco #1:")
Call Scrivi("")
Call Scrivi("1) QUADRANTE QFM (Frequenza Max - 33 num):")
Call Scrivi(" - Vincente per Ambo a colpo: " & nWin_FMax_BT & " su " & nCasiTestatiQ_BT & " (" & Round((nWin_FMax_BT / nCasiTestatiQ_BT) * 100,1) & "%)")
Call Scrivi(" - Consecutivita Negativa ATTUALE : " & nCurNeg_FMax & " colpi a vuoto consecutivi")
Call Scrivi(" - Consecutivita Negativa MASSIMA : " & nMaxNeg_FMax & " colpi a vuoto record storico")
Call Scrivi("")
Call Scrivi("2) QUADRANTE Qfm (Frequenza Min - 33 num):")
Call Scrivi(" - Vincente per Ambo a colpo: " & nWin_FMin_BT & " su " & nCasiTestatiQ_BT & " (" & Round((nWin_FMin_BT / nCasiTestatiQ_BT) * 100,1) & "%)")
Call Scrivi(" - Consecutivita Negativa ATTUALE : " & nCurNeg_FMin & " colpi a vuoto consecutivi")
Call Scrivi(" - Consecutivita Negativa MASSIMA : " & nMaxNeg_FMin & " colpi a vuoto record storico")
Call Scrivi("")
Call Scrivi("3) QUADRANTE QRM (Ritardo Max - 33 num):")
Call Scrivi(" - Vincente per Ambo a colpo: " & nWin_RMax_BT & " su " & nCasiTestatiQ_BT & " (" & Round((nWin_RMax_BT / nCasiTestatiQ_BT) * 100,1) & "%)")
Call Scrivi(" - Consecutivita Negativa ATTUALE : " & nCurNeg_RMax & " colpi a vuoto consecutivi")
Call Scrivi(" - Consecutivita Negativa MASSIMA : " & nMaxNeg_RMax & " colpi a vuoto record storico")
Call Scrivi("")
Call Scrivi("4) QUADRANTE Qrm (Ritardo Min - 33 num):")
Call Scrivi(" - Vincente per Ambo a colpo: " & nWin_RMin_BT & " su " & nCasiTestatiQ_BT & " (" & Round((nWin_RMin_BT / nCasiTestatiQ_BT) * 100,1) & "%)")
Call Scrivi(" - Consecutivita Negativa ATTUALE : " & nCurNeg_RMin & " colpi a vuoto consecutivi")
Call Scrivi(" - Consecutivita Negativa MASSIMA : " & nMaxNeg_RMin & " colpi a vuoto record storico")
Call Scrivi("==========================================================================================")
Call Scrivi("")
End If
If nTotalWNums > 0 Then
Call Scrivi("==========================================================================================",True)
Call Scrivi(" MAPPATURA STATISTICA PRE-SFALDAMENTO DEI SINGOLI ESTRATTI VINCENTI (AMBO)",True)
Call Scrivi("==========================================================================================",True)
Call Scrivi("Analisi su un campione di " & nTotalWNums & " singoli estratti usciti nelle combinazioni:")
Call Scrivi(" - Ritardo Medio individuale all'uscita : " & Round(nSumRA / nTotalWNums,1) & " estrazioni")
Call Scrivi(" - Ritardo Storico Medio individuale : " & Round(nSumRS / nTotalWNums,1) & " estrazioni")
Call Scrivi(" - Frequenza Media individuale : " & Round(nSumFreq / nTotalWNums,1) & " presenze")
Call Scrivi("")
Call Scrivi("DISTRIBUZIONE DEL RITARDO (RA) AL MOMENTO DEL RILEVAMENTO:")
Call Scrivi(" - Fascia 1 (Ritardo da 0 a 9 colpi - Warm) : " & nFascia1 & " estratti (" & Round((nFascia1 / nTotalWNums) * 100,1) & "%)")
Call Scrivi(" - Fascia 2 (Ritardo da 10 a 18 colpi - Medium) : " & nFascia2 & " estratti (" & Round((nFascia2 / nTotalWNums) * 100,1) & "%)")
Call Scrivi(" - Fascia 3 (Ritardo da 19 a 36 colpi - Cold) : " & nFascia3 & " estratti (" & Round((nFascia3 / nTotalWNums) * 100,1) & "%)")
Call Scrivi(" - Fascia 4 (Ritardo superiore a 36 colpi - Ice) : " & nFascia4 & " estratti (" & Round((nFascia4 / nTotalWNums) * 100,1) & "%)")
Call Scrivi("==========================================================================================")
Call Scrivi("")
End If
' QUADRO RIEPILOGATIVO AVANZATO MOTORE COLLIMANTI FULL INCMAX III
If bTestIncMaxBT Then
Call Scrivi("==========================================================================================",True)
Call Scrivi(" ESITO TRACKING STORICO MOTORE COLLIMANTI FULL INCMAX III DOC NEL BACKTEST",True)
Call Scrivi("==========================================================================================",True)
Call Scrivi("Totale linee Collimanti FULL generate nel periodo di test: " & nTotLineeCollimantiBT)
Call Scrivi("Linee Collimanti FULL gia sfaldate (vincenti per Ambo): " & nLineeVincentiCollimantiBT)
Call Scrivi("Linee Collimanti FULL ancora ATTIVE / IN CORSO : " & nLineeAttiveCollimantiBT)
Call Scrivi("")
Call Scrivi("COLPO MASSIMO STORICO EMPIRICO ASSOLUTO DI SFALDAMENTO : " & nMaxColpoEmpirico & " colpi!",True)
Call Scrivi("")
Call Scrivi("DISTRIBUZIONE ESATTA DEI COLPI DI SFALDAMENTO RILEVATI NELLO STORICO:")
For k = 1 To nMaxColpoEmpirico
If aColpiDistribuzione(k) > 0 Then
Call Scrivi(" - Sfaldamento avvenuto al Colpo " & Format2(k) & " : " & aColpiDistribuzione(k) & " volte (" & Round((aColpiDistribuzione(k) / nLineeVincentiCollimantiBT) * 100,1) & "%)")
End If
Next
Call Scrivi("")
If nLineeAttiveCollimantiBT > 0 Then
Call Scrivi("------------------------------------------------------------------------------------------",True)
Call Scrivi("LINEE COLLIMANTI FULL ANCORA IN CORSO (SCATURITE DALLE ULTIME ESTRAZIONI):",True)
Call Scrivi("------------------------------------------------------------------------------------------",True)
For idxAtt = 1 To nLineeAttiveCollimantiBT
nColpiResiduiEmpirici = nMaxColpoEmpirico - aAttiveColpiTrascorsi(idxAtt)
Call Scrivi("Generata all'estrazione " & aAttiveEstr(idxAtt) & " (" & aAttiveData(idxAtt) & ")")
Call Scrivi(" -> Formazione (" & aAttiveLen(idxAtt) & " numeri): " & aAttiveCollimantiStr(idxAtt))
Call Scrivi(" -> Colpi gia trascorsi senza ambo: " & aAttiveColpiTrascorsi(idxAtt))
If nColpiResiduiEmpirici > 0 Then
Call Scrivi(" -> ATTESA RESIDUA TEORICA rispetto al Colpo Max Empirico (" & nMaxColpoEmpirico & "): " & nColpiResiduiEmpirici & " colpi rimanenti!",True)
Else
Call Scrivi(" -> LIVELLO CRITICO DI MATURITA': Ha raggiunto o superato il Colpo Max Empirico! (PRONTO A COLPO)",True)
End If
Call Scrivi("")
Next
Else
Call Scrivi("Tutte le linee Collimanti FULL storiche analizzate risultano gia sfaldate con successo!")
End If
Call Scrivi("==========================================================================================")
Call Scrivi("")
End If
End If
' ==================================================================
' --- FASE 2: ANALISI COMBINAZIONI PER L'ESTRAZIONE CORRENTE ---
' ==================================================================
nClasseIbrida = nFissi + nDinamici
nAmbiInClasse = CombinazioniSenzaRipetizione(nClasseIbrida,2)
nCoverageAmbiPerc =(nAmbiInClasse / 4005) * 100
nComb90_5 = CombinazioniSenzaRipetizione(90,5)
nComb90MinusC_5 = CombinazioniSenzaRipetizione(90 - nClasseIbrida,5)
nComb90MinusC_4 = CombinazioniSenzaRipetizione(90 - nClasseIbrida,4)
p0 = nComb90MinusC_5 / nComb90_5
p1 =(nClasseIbrida * nComb90MinusC_4) / nComb90_5
pAtLeast2 = 1.0 - p0 - p1
pAtLeast2Perc = pAtLeast2 * 100
nIntegrali = CombinazioniSenzaRipetizione(90 - nFissi,nDinamici)
nCoperturaPerc =(nCombinazioniOggi / nIntegrali) * 100
Call Scrivi("==========================================================================================")
Call Scrivi(" FASE 2: ANALISI PER L'ESTRAZIONE CORRENTE (DI OGGI)",True)
Call Scrivi("==========================================================================================")
Call Scrivi("DATI PARAMETRICI DELL'ANALISI:")
Call Scrivi(" - Ruota di Analisi : " & NomeRuota(nRuota))
Call Scrivi(" - Sorte Target : " & nSorte & " (Ambo)")
Call Scrivi(" - Estrazione di Riferimento : " & nFine & " (" & DataEstrazione(nFine) & ")")
Call Scrivi(" - Struttura Massa Ibrida : " & nFissi & " Fissi + " & nDinamici & " Dinamici (Totale: " & nClasseIbrida & " numeri)")
Call Scrivi(" - Dimensione Pool Numeri Dinamici : " &(90 - nFissi) & " numeri")
Call Scrivi(" - Filtro Scarto Massimo (max_diff) : <= " & max_diff)
Call Scrivi(" - Combinazioni Integrali Teoriche : " & FormatNumber(nIntegrali,0))
Call Scrivi(" - Combinazioni Ibride Generate per Test : " & FormatNumber(nCombinazioniOggi,0))
Call Scrivi(" - Percentuale di Copertura dell'Analisi : " & FormatNumber(nCoperturaPerc,6) & "%")
Call Scrivi("")
Call Scrivi("GIUSTIFICAZIONE MATEMATICA DELLA CLASSE IBRIDA SCELTA:")
Call Scrivi(" - Classe Ibrida Attiva : " & nClasseIbrida & " numeri")
Call Scrivi(" - Ambi Interni Sviluppabili : " & nAmbiInClasse & " su 4.005 totali (" & FormatNumber(nCoverageAmbiPerc,2) & "% del totale)")
Call Scrivi(" - Probabilita Matematica Ambo a Colpo : " & FormatNumber(pAtLeast2Perc,2) & "% (Distribuzione Ipergeometrica)")
Call Scrivi(" - Finestra Armonica di Analisi INCMAX III : Ultime 2400 estrazioni consecutive (60 x 4 x 10, Figura 6)")
Call Scrivi("")
Call Scrivi("Generazione e analisi di " & FormatNumber(nCombinazioniOggi,0) & " combinazioni per il prossimo colpo...")
Call Scrivi("")
nTrovate = 0
For i = 1 To nCombinazioniOggi
If i = 1 Or i Mod 2000 = 0 Or i = nCombinazioniOggi Then
Call AvanzamentoElab(1,nCombinazioniOggi,i)
Call Messaggio("Analisi odierna: " & i & " / " & nCombinazioniOggi & " | Idonee: " & nTrovate)
If ScriptInterrotto Then
Exit For
End If
End If
For k = 1 To nDinamici
r = Int((nPoolSize - k + 1) * Rnd + k)
temp = aPool(k)
aPool(k) = aPool(r)
aPool(r) = temp
Next
ReDim aComboCompleta(nFissi + nDinamici)
For k = 1 To nFissi
aComboCompleta(k) = aFissi(k)
Next
For k = 1 To nDinamici
aComboCompleta(nFissi + k) = aPool(k)
Next
Call OrdinaMatrice(aComboCompleta,1)
Call StatisticaFormazioneTurbo(aComboCompleta,aRuote,nSorte,RetRit,RetRitMax,RetIncrRitMax,RetFreq,nInizio,nFine)
nDiff = RetRitMax - RetRit
If nDiff <= max_diff Then
nTrovate = nTrovate + 1
If nSalvateCount < nMaxSalvate Then
nSalvateCount = nSalvateCount + 1
aSalvateDiff(nSalvateCount) = nDiff
aSalvateRA(nSalvateCount) = RetRit
aSalvateRS(nSalvateCount) = RetRitMax
aSalvateFreq(nSalvateCount) = RetFreq
For k = 1 To UBound(aComboCompleta)
aSalvateNumeri(nSalvateCount,k) = aComboCompleta(k)
Next
ReDim aDinamiciOrdinati(nDinamici)
For k = 1 To nDinamici
aDinamiciOrdinati(k) = aPool(k)
Next
Call OrdinaMatrice(aDinamiciOrdinati,1)
aSalvateComboStr(nSalvateCount) = StringaNumeri(aComboCompleta,".")
aSalvateFissiStr(nSalvateCount) = StringaNumeri(aFissi,".")
aSalvateDinamiciStr(nSalvateCount) = StringaNumeri(aDinamiciOrdinati,".")
End If
End If
Next
If nSalvateCount > 0 Then
Call Messaggio("Ordinamento dei risultati in corso...")
For x = 1 To nSalvateCount - 1
bScambiato = False
For y = 1 To nSalvateCount - x
bScambia = False
If aSalvateDiff(y) > aSalvateDiff(y + 1) Then
bScambia = True
Else
If aSalvateDiff(y) = aSalvateDiff(y + 1) Then
If aSalvateRA(y) < aSalvateRA(y + 1) Then
bScambia = True
Else
If aSalvateRA(y) = aSalvateRA(y + 1) Then
If aSalvateFreq(y) < aSalvateFreq(y + 1) Then
bScambia = True
End If
End If
End If
End If
End If
If bScambia Then
tempDiff = aSalvateDiff(y)
aSalvateDiff(y) = aSalvateDiff(y + 1)
aSalvateDiff(y + 1) = tempDiff
tempRA = aSalvateRA(y)
aSalvateRA(y) = aSalvateRA(y + 1)
aSalvateRA(y + 1) = tempRA
tempRS = aSalvateRS(y)
aSalvateRS(y) = aSalvateRS(y + 1)
aSalvateRS(y + 1) = tempRS
tempFreq = aSalvateFreq(y)
aSalvateFreq(y) = aSalvateFreq(y + 1)
aSalvateFreq(y + 1) = tempFreq
tempComboStr = aSalvateComboStr(y)
aSalvateComboStr(y) = aSalvateComboStr(y + 1)
aSalvateComboStr(y + 1) = tempComboStr
tempFissiStr = aSalvateFissiStr(y)
aSalvateFissiStr(y) = aSalvateFissiStr(y + 1)
aSalvateFissiStr(y + 1) = tempFissiStr
tempDinamiciStr = aSalvateDinamiciStr(y)
aSalvateDinamiciStr(y) = aSalvateDinamiciStr(y + 1)
aSalvateDinamiciStr(y + 1) = tempDinamiciStr
For colNum = 1 To(nFissi + nDinamici)
tempNum = aSalvateNumeri(y,colNum)
aSalvateNumeri(y,colNum) = aSalvateNumeri(y + 1,colNum)
aSalvateNumeri(y + 1,colNum) = tempNum
Next
bScambiato = True
End If
Next
If Not bScambiato Then
Exit For
End If
Next
ReDim aMiglioreComboDiOggi(nFissi + nDinamici)
For k = 1 To(nFissi + nDinamici)
aMiglioreComboDiOggi(k) = aSalvateNumeri(1,k)
Next
bMiglioreTrovata = True
nTopPrint = 20
If nTopPrint > nSalvateCount Then
nTopPrint = nSalvateCount
End If
Call Scrivi("CLASSIFICA TOP " & nTopPrint & " COMBINAZIONI MIGLIORI DI OGGI (Ord. Diff Crescente | RA Decrescente | Freq Decrescente):",True)
Call Scrivi("Rank" & vbTab & "Diff" & vbTab & "RA" & vbTab & "RS" & vbTab & "Freq" & vbTab & "Combinazione Completa")
Call Scrivi("---------------------------------------------------------------------------------------------------------")
For idxP = 1 To nTopPrint
Call Scrivi("#" & idxP & vbTab & aSalvateDiff(idxP) & vbTab & aSalvateRA(idxP) & vbTab & aSalvateRS(idxP) & vbTab & aSalvateFreq(idxP) & vbTab & aSalvateComboStr(idxP))
Next
Call Scrivi("---------------------------------------------------------------------------------------------------------")
If nTrovate > nTopPrint Then
Call Scrivi("... e altre " &(nTrovate - nTopPrint) & " combinazioni idonee salvate in memoria.")
End If
Call Scrivi("")
Call Scrivi("==========================================================================================",True)
Call Scrivi("COMBINAZIONE BASE ELETTA PER GLI SVILUPPI SUCCESSIVI (RANK #1):",True)
Call Scrivi(" " & StringaNumeri(aMiglioreComboDiOggi,"."),True)
Call Scrivi(" [Scelta deterministicamente per: Scarto min -> Ritardo max -> Frequenza max]")
Call Scrivi("==========================================================================================")
Call Scrivi("")
Else
Call Scrivi("Nessuna combinazione ha soddisfatto i criteri per l'estrazione odierna.")
End If
' ==================================================================
' --- FASE 3: SVILUPPO FILTRO DINAMICO ED ESTRAZIONE SUPER FAVORITI ---
' ==================================================================
If bEseguiBacktest And bMiglioreTrovata And nTotalWNums > 0 Then
Call Scrivi("==========================================================================================")
Call Scrivi(" FASE 3: GENERAZIONE FILTRO DINAMICO E RIDUZIONE PER LA PROSSIMA GIOCATA",True)
Call Scrivi("==========================================================================================")
For k = 1 To 4
bFasciaFav(k) = False
Next
sFasceFav = ""
If(nFascia1 / nTotalWNums) >= 0.20 Then
bFasciaFav(1) = True
sFasceFav = sFasceFav & "Fascia 1 (RA 0-9) | "
End If
If(nFascia2 / nTotalWNums) >= 0.20 Then
bFasciaFav(2) = True
sFasceFav = sFasceFav & "Fascia 2 (RA 10-18) | "
End If
If(nFascia3 / nTotalWNums) >= 0.20 Then
bFasciaFav(3) = True
sFasceFav = sFasceFav & "Fascia 3 (RA 19-36) | "
End If
If(nFascia4 / nTotalWNums) >= 0.20 Then
bFasciaFav(4) = True
sFasceFav = sFasceFav & "Fascia 4 (RA > 36) | "
End If
anyFasciaActive = False
For k = 1 To 4
If bFasciaFav(k) Then
anyFasciaActive = True
End If
Next
If Not anyFasciaActive Then
maxCount = 0
maxFascia = 1
If nFascia1 > maxCount Then
maxCount = nFascia1
maxFascia = 1
End If
If nFascia2 > maxCount Then
maxCount = nFascia2
maxFascia = 2
End If
If nFascia3 > maxCount Then
maxCount = nFascia3
maxFascia = 3
End If
If nFascia4 > maxCount Then
maxCount = nFascia4
maxFascia = 4
End If
bFasciaFav(maxFascia) = True
If maxFascia = 1 Then
sFasceFav = "Fascia 1 (RA 0-9) | "
End If
If maxFascia = 2 Then
sFasceFav = "Fascia 2 (RA 10-18) | "
End If
If maxFascia = 3 Then
sFasceFav = "Fascia 3 (RA 19-36) | "
End If
If maxFascia = 4 Then
sFasceFav = "Fascia 4 (RA > 36) | "
End If
End If
Call Scrivi("-> Filtro dinamico attivo su fasce vincenti: " & Left(sFasceFav,Len(sFasceFav) - 3))
Call Scrivi("")
nFavoritiCount = 0
ReDim aFavoriti(90)
For k = 1 To UBound(aMiglioreComboDiOggi)
numCurrent = aMiglioreComboDiOggi(k)
aNumSingle(1) = numCurrent
RA_current = SerieRitardoTurbo(nInizio,nFine,aNumSingle,aRuote,1)
If RA_current <= 9 Then
fasciaCurrent = 1
Else
If RA_current <= 18 Then
fasciaCurrent = 2
Else
If RA_current <= 36 Then
fasciaCurrent = 3
Else
fasciaCurrent = 4
End If
End If
End If
If bFasciaFav(fasciaCurrent) Then
nFavoritiCount = nFavoritiCount + 1
aFavoriti(nFavoritiCount) = numCurrent
End If
Next
ReDim Preserve aFavoriti(nFavoritiCount)
Call OrdinaMatrice(aFavoriti,1)
Call Scrivi("LUNGHETTA SUPER FAVORITI FILTRATA DINAMICAMENTE",True)
Call Scrivi(" -> Quantita originaria: " & UBound(aMiglioreComboDiOggi) & " numeri")
Call Scrivi(" -> Quantita rimasta : " & nFavoritiCount & " numeri")
Call Scrivi(" -> Abbattimento massa : " & Round((1 -(nFavoritiCount / UBound(aMiglioreComboDiOggi))) * 100,1) & "%")
Call Scrivi("")
Call Scrivi(" -> Sotto-gruppo Consigliato (Ambo/Terno):",True)
Call Scrivi(" " & StringaNumeri(aFavoriti,"."),True)
Call Scrivi("==========================================================================================")
Call Scrivi("")
End If
' ==================================================================
' --- FASE 4: FILTRAZIONE SELETTIVA FINALE (DUAL FILTER SYSTEM) ---
' ==================================================================
If bMiglioreTrovata Then
Call Scrivi("==========================================================================================")
Call Scrivi(" FASE 4: SVILUPPO MOTORE DI RIDUZIONE SELETTIVA FINALE",True)
Call Scrivi("==========================================================================================")
If nTipoFiltroFinale = 1 Then
Call Scrivi("FILTRO ATTIVO: [1] MULTI-CONVERGENZA SULLE TERZINE (RA PER AMBO >= " & nMinRATerzina & ")")
Call Scrivi("")
ReDim aTerzina(3)
ReDim aUnionFreq(90)
For k = 1 To 90
aUnionFreq(k) = 0
Next
nCombTotaliTerz = 0
For i1 = 1 To UBound(aMiglioreComboDiOggi) - 2
For i2 = i1 + 1 To UBound(aMiglioreComboDiOggi) - 1
For i3 = i2 + 1 To UBound(aMiglioreComboDiOggi)
nCombTotaliTerz = nCombTotaliTerz + 1
aTerzina(1) = aMiglioreComboDiOggi(i1)
aTerzina(2) = aMiglioreComboDiOggi(i2)
aTerzina(3) = aMiglioreComboDiOggi(i3)
nRA_terz = SerieRitardoTurbo(nInizio,nFine,aTerzina,aRuote,2)
If nRA_terz >= nMinRATerzina Then
aUnionFreq(aTerzina(1)) = aUnionFreq(aTerzina(1)) + 1
aUnionFreq(aTerzina(2)) = aUnionFreq(aTerzina(2)) + 1
aUnionFreq(aTerzina(3)) = aUnionFreq(aTerzina(3)) + 1
End If
Next
Next
Next
nUnionCount = 0
For k = 1 To 90
If aUnionFreq(k) >= nMinPresenze Then
nUnionCount = nUnionCount + 1
End If
Next
If nUnionCount > 0 Then
ReDim aUnionNumeri(nUnionCount)
c = 0
For k = 1 To 90
If aUnionFreq(k) >= nMinPresenze Then
c = c + 1
aUnionNumeri(c) = k
End If
Next
Call OrdinaMatrice(aUnionNumeri,1)
Call Scrivi("GRUPPO FINALE PER MULTI-CONVERGENZA SU TERZINE",True)
Call Scrivi(" -> Quantita elementi finali risultanti: " & nUnionCount & " numeri")
Call Scrivi(" -> Sotto-gruppo Ristretto Consigliato (Ambo a Colpo):",True)
Call Scrivi(" " & StringaNumeri(aUnionNumeri,"."),True)
End If
Else
If nTipoFiltroFinale = 2 Then
Call Scrivi("FILTRO ATTIVO: [2] RIDUZIONE SEQUENZIALE IN QUARTINE (DOPPIO LIVELLO X7)")
Call Scrivi("")
ReDim aTerzina(3)
ReDim aUnionMap(90)
nUnionCount = 0
For k = 1 To 90
aUnionMap(k) = False
Next
nCombTotaliTerz = 0
For i1 = 1 To UBound(aMiglioreComboDiOggi) - 2
For i2 = i1 + 1 To UBound(aMiglioreComboDiOggi) - 1
For i3 = i2 + 1 To UBound(aMiglioreComboDiOggi)
nCombTotaliTerz = nCombTotaliTerz + 1
aTerzina(1) = aMiglioreComboDiOggi(i1)
aTerzina(2) = aMiglioreComboDiOggi(i2)
aTerzina(3) = aMiglioreComboDiOggi(i3)
nRA_terz = SerieRitardoTurbo(nInizio,nFine,aTerzina,aRuote,2)
If nRA_terz >= nMinRATerzina Then
If Not aUnionMap(aTerzina(1)) Then
aUnionMap(aTerzina(1)) = True
nUnionCount = nUnionCount + 1
End If
If Not aUnionMap(aTerzina(2)) Then
aUnionMap(aTerzina(2)) = True
nUnionCount = nUnionCount + 1
End If
If Not aUnionMap(aTerzina(3)) Then
aUnionMap(aTerzina(3)) = True
nUnionCount = nUnionCount + 1
End If
End If
Next
Next
Next
If nUnionCount >= 4 Then
ReDim aUnionNumeri(nUnionCount)
c = 0
For k = 1 To 90
If aUnionMap(k) Then
c = c + 1
aUnionNumeri(c) = k
End If
Next
Call OrdinaMatrice(aUnionNumeri,1)
ReDim aQuartina(4)
ReDim aQuartUnionMap(90)
nQuartUnionCount = 0
For k = 1 To 90
aQuartUnionMap(k) = False
Next
nCombTotaliQuart = 0
For q1 = 1 To nUnionCount - 3
For q2 = q1 + 1 To nUnionCount - 2
For q3 = q2 + 1 To nUnionCount - 1
For q4 = q3 + 1 To nUnionCount
nCombTotaliQuart = nCombTotaliQuart + 1
aQuartina(1) = aUnionNumeri(q1)
aQuartina(2) = aUnionNumeri(q2)
aQuartina(3) = aUnionNumeri(q3)
aQuartina(4) = aUnionNumeri(q4)
nRA_quart = SerieRitardoTurbo(nInizio,nFine,aQuartina,aRuote,2)
If nRA_quart >= nMinRAQuartina Then
If Not aQuartUnionMap(aQuartina(1)) Then
aQuartUnionMap(aQuartina(1)) = True
nQuartUnionCount = nQuartUnionCount + 1
End If
If Not aQuartUnionMap(aQuartina(2)) Then
aQuartUnionMap(aQuartina(2)) = True
nQuartUnionCount = nQuartUnionCount + 1
End If
If Not aQuartUnionMap(aQuartina(3)) Then
aQuartUnionMap(aQuartina(3)) = True
nQuartUnionCount = nQuartUnionCount + 1
End If
If Not aQuartUnionMap(aQuartina(4)) Then
aQuartUnionMap(aQuartina(4)) = True
nQuartUnionCount = nQuartUnionCount + 1
End If
End If
Next
Next
Next
Next
If nQuartUnionCount > 0 Then
ReDim aQuartUnionNumeri(nQuartUnionCount)
c = 0
For k = 1 To 90
If aQuartUnionMap(k) Then
c = c + 1
aQuartUnionNumeri(c) = k
End If
Next
Call OrdinaMatrice(aQuartUnionNumeri,1)
Call Scrivi("UNIONE SEQUENZIALE DELLE QUARTINE (RITARDO X7 SU CLASSE 4)",True)
Call Scrivi(" -> Quantita elementi finali ristretti: " & nQuartUnionCount & " numeri")
Call Scrivi(" -> Sotto-gruppo Ristretto Consigliato (Ambo a Colpo):",True)
Call Scrivi(" " & StringaNumeri(aQuartUnionNumeri,"."),True)
End If
End If
End If
End If
Call Scrivi("==========================================================================================")
Call Scrivi("")
End If
' ==================================================================
' --- FASE 5: QUADRANTI DI FREQUENZA/RITARDO E CONVERGENZE (RANK #1) ---
' ==================================================================
If bMiglioreTrovata Then
nTotR1 = UBound(aMiglioreComboDiOggi)
nMetaR1 = Int(nTotR1 / 2)
ReDim aR1_Num(nTotR1)
ReDim aR1_FQ(nTotR1)
ReDim aR1_RA(nTotR1)
ReDim aR1_RS(nTotR1)
ReDim aR1_IncMax(nTotR1)
ReDim aR1_Diff(nTotR1)
ReDim aR1_Ratio(nTotR1)
ReDim aR1_Single(1)
For k = 1 To nTotR1
aR1_Num(k) = aMiglioreComboDiOggi(k)
aR1_Single(1) = aR1_Num(k)
Call StatisticaFormazioneTurbo(aR1_Single,aRuote,1,retSingRit,retSingRitMax,retSingIncr,retSingFreq,nInizio,nFine)
aR1_FQ(k) = retSingFreq
aR1_RA(k) = retSingRit
aR1_RS(k) = retSingRitMax
aR1_IncMax(k) = retSingIncr
aR1_Diff(k) = retSingRitMax - retSingRit
If retSingRitMax > 0 Then
aR1_Ratio(k) = retSingRit / retSingRitMax
Else
aR1_Ratio(k) = 0
End If
Next
' 5.1 ORDINAMENTO FREQUENZA DECRESCENTE
ReDim aFQ_Num(nTotR1)
ReDim aFQ_Val(nTotR1)
ReDim aFQ_RA(nTotR1)
ReDim aFQ_RS(nTotR1)
ReDim aFQ_IncMax(nTotR1)
ReDim aFQ_Diff(nTotR1)
ReDim aFQ_Ratio(nTotR1)
For k = 1 To nTotR1
aFQ_Num(k) = aR1_Num(k)
aFQ_Val(k) = aR1_FQ(k)
aFQ_RA(k) = aR1_RA(k)
aFQ_RS(k) = aR1_RS(k)
aFQ_IncMax(k) = aR1_IncMax(k)
aFQ_Diff(k) = aR1_Diff(k)
aFQ_Ratio(k) = aR1_Ratio(k)
Next
For x = 1 To nTotR1 - 1
bScambiato = False
For y = 1 To nTotR1 - x
bScambia = False
If aFQ_Val(y) < aFQ_Val(y + 1) Then
bScambia = True
Else
If aFQ_Val(y) = aFQ_Val(y + 1) Then
If aFQ_RA(y) < aFQ_RA(y + 1) Then
bScambia = True
End If
End If
End If
If bScambia Then
tNum = aFQ_Num(y)
aFQ_Num(y) = aFQ_Num(y + 1)
aFQ_Num(y + 1) = tNum
tFQ = aFQ_Val(y)
aFQ_Val(y) = aFQ_Val(y + 1)
aFQ_Val(y + 1) = tFQ
tRA = aFQ_RA(y)
aFQ_RA(y) = aFQ_RA(y + 1)
aFQ_RA(y + 1) = tRA
tRS = aFQ_RS(y)
aFQ_RS(y) = aFQ_RS(y + 1)
aFQ_RS(y + 1) = tRS
tInc = aFQ_IncMax(y)
aFQ_IncMax(y) = aFQ_IncMax(y + 1)
aFQ_IncMax(y + 1) = tInc
tDiff = aFQ_Diff(y)
aFQ_Diff(y) = aFQ_Diff(y + 1)
aFQ_Diff(y + 1) = tDiff
tRatio = aFQ_Ratio(y)
aFQ_Ratio(y) = aFQ_Ratio(y + 1)
aFQ_Ratio(y + 1) = tRatio
bScambiato = True
End If
Next
If Not bScambiato Then
Exit For
End If
Next
For k = 1 To 90
bQFM(k) = False
bQfm_min(k) = False
Next
For k = 1 To nMetaR1
bQFM(aFQ_Num(k)) = True
Next
For k = nMetaR1 + 1 To nTotR1
bQfm_min(aFQ_Num(k)) = True
Next
' 5.2 ORDINAMENTO RITARDO ATTUALE (RA) DECRESCENTE
ReDim aRA_Num(nTotR1)
ReDim aRA_Val(nTotR1)
ReDim aRA_RS(nTotR1)
ReDim aRA_FQ(nTotR1)
ReDim aRA_IncMax(nTotR1)
ReDim aRA_Diff(nTotR1)
ReDim aRA_Ratio(nTotR1)
For k = 1 To nTotR1
aRA_Num(k) = aR1_Num(k)
aRA_Val(k) = aR1_RA(k)
aRA_RS(k) = aR1_RS(k)
aRA_FQ(k) = aR1_FQ(k)
aRA_IncMax(k) = aR1_IncMax(k)
aRA_Diff(k) = aR1_Diff(k)
aRA_Ratio(k) = aR1_Ratio(k)
Next
For x = 1 To nTotR1 - 1
bScambiato = False
For y = 1 To nTotR1 - x
bScambia = False
If aRA_Val(y) < aRA_Val(y + 1) Then
bScambia = True
Else
If aRA_Val(y) = aRA_Val(y + 1) Then
If aRA_FQ(y) < aRA_FQ(y + 1) Then
bScambia = True
End If
End If
End If
If bScambia Then
tNum = aRA_Num(y)
aRA_Num(y) = aRA_Num(y + 1)
aRA_Num(y + 1) = tNum
tRA = aRA_Val(y)
aRA_Val(y) = aRA_Val(y + 1)
aRA_Val(y + 1) = tRA
tRS = aRA_RS(y)
aRA_RS(y) = aRA_RS(y + 1)
aRA_RS(y + 1) = tRS
tFQ = aRA_FQ(y)
aRA_FQ(y) = aRA_FQ(y + 1)
aRA_FQ(y + 1) = tFQ
tInc = aRA_IncMax(y)
aRA_IncMax(y) = aRA_IncMax(y + 1)
aRA_IncMax(y + 1) = tInc
tDiff = aRA_Diff(y)
aRA_Diff(y) = aRA_Diff(y + 1)
aRA_Diff(y + 1) = tDiff
tRatio = aRA_Ratio(y)
aRA_Ratio(y) = aRA_Ratio(y + 1)
aRA_Ratio(y + 1) = tRatio
bScambiato = True
End If
Next
If Not bScambiato Then
Exit For
End If
Next
For k = 1 To 90
bQRM(k) = False
bQrm_min(k) = False
Next
For k = 1 To nMetaR1
bQRM(aRA_Num(k)) = True
Next
For k = nMetaR1 + 1 To nTotR1
bQrm_min(aRA_Num(k)) = True
Next
' 5.3 STAMPE DETTAGLIATE INTEGRALI
Call Scrivi("VEDIAMO DOVE CASCONO I 2 POINTS A COLPO tra prime " & nMetaR1 & " righe... a fq max e prime " &(nTotR1 - nMetaR1) & " righe... a fq min della RISULTANZA RANK 1",True)
Call Scrivi("")
Call Scrivi("Elaborazione con archivio lotto aggiornato al [" & nFine & "] [" & IndiceAnnuale(nFine) & "] " & DataEstrazione(nFine))
Call Scrivi("Gruppo base numerico analizzato " & StringaNumeri(aMiglioreComboDiOggi,"."))
Call Scrivi("La seguente lista mostra le prime Combinazioni In Base al valore di Frequenza")
Call Scrivi("")
For k = 1 To nTotR1
sRatioFormatted = Round(aFQ_Ratio(k),4)
Call Scrivi("formazione: " & aFQ_Num(k) & " - FREQUENZA (FQ) " & aFQ_Val(k) & " - RITARDO ATTUALE (RA) " & aFQ_RA(k) & " - RITARDO STORICO (RS) " & aFQ_RS(k) & " - RITARDO STORICO-RITARDO ATTUALE (DIFF) " & aFQ_Diff(k) & " " & aFQ_Diff(k) & " - INCREMENTO MASSIMO DI RITARDO (INCMAX) " & aFQ_IncMax(k) & " - contatore " & k & " ra/rs " & sRatioFormatted)
If k = nMetaR1 Then
Call Scrivi("-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------")
End If
Next
Call Scrivi("")
Call Scrivi("E VEDIAMO ANCHE DOVE ESCONO i 2 POINTS A COLPO nelle prime " & nMetaR1 & " righe... a ra max e prime " &(nTotR1 - nMetaR1) & " righe... a ra min",True)
Call Scrivi("")
Call Scrivi("Elaborazione con archivio lotto aggiornato al [" & nFine & "] [" & IndiceAnnuale(nFine) & "] " & DataEstrazione(nFine))
Call Scrivi("Gruppo base numerico analizzato " & StringaNumeri(aMiglioreComboDiOggi,"."))
Call Scrivi("La seguente lista mostra le prime Combinazioni In Base al valore di Ritardo")
Call Scrivi("")
For k = 1 To nTotR1
sRatioFormatted = Round(aRA_Ratio(k),4)
Call Scrivi("formazione: " & aRA_Num(k) & " - FREQUENZA (FQ) " & aRA_FQ(k) & " - RITARDO ATTUALE (RA) " & aRA_Val(k) & " - RITARDO STORICO (RS) " & aRA_RS(k) & " - RITARDO STORICO-RITARDO ATTUALE (DIFF) " & aRA_Diff(k) & " " & aRA_Diff(k) & " - INCREMENTO MASSIMO DI RITARDO (INCMAX) " & aRA_IncMax(k) & " - contatore " & k & " ra/rs " & sRatioFormatted)
If k = nMetaR1 Then
Call Scrivi("------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------")
End If
Next
Call Scrivi("")
' 5.4 ESTRAZIONE E ORDINAMENTO DEI 4 QUADRANTI
ReDim aListQFM(nMetaR1)
cQFM = 0
For k = 1 To 90
If bQFM(k) Then
cQFM = cQFM + 1
aListQFM(cQFM) = k
End If
Next
Call OrdinaMatrice(aListQFM,1)
ReDim aListQfm_min(nTotR1 - nMetaR1)
cQfm_min = 0
For k = 1 To 90
If bQfm_min(k) Then
cQfm_min = cQfm_min + 1
aListQfm_min(cQfm_min) = k
End If
Next
Call OrdinaMatrice(aListQfm_min,1)
ReDim aListQRM(nMetaR1)
cQRM = 0
For k = 1 To 90
If bQRM(k) Then
cQRM = cQRM + 1
aListQRM(cQRM) = k
End If
Next
Call OrdinaMatrice(aListQRM,1)
ReDim aListQrm_min(nTotR1 - nMetaR1)
cQrm_min = 0
For k = 1 To 90
If bQrm_min(k) Then
cQrm_min = cQrm_min + 1
aListQrm_min(cQrm_min) = k
End If
Next
Call OrdinaMatrice(aListQrm_min,1)
Call Scrivi("VEDIAMO GLI EVENTUALI CONVERGENTI SECONDO I QUATTRO ""QUADRANTI"" CREATI...",True)
Call Scrivi("")
Call Scrivi("QUADRANTI FREQUENZA")
Call Scrivi("QFM " & StringaNumeri(aListQFM,"-"))
Call Scrivi("---")
Call Scrivi("Qfm " & StringaNumeri(aListQfm_min,"-"))
Call Scrivi("")
Call Scrivi("QUADRANTI RITARDO")
Call Scrivi("QRM " & StringaNumeri(aListQRM,"-"))
Call Scrivi("----")
Call Scrivi("Qrm " & StringaNumeri(aListQrm_min,"-"))
Call Scrivi("")
' 5.5 CONVERGENZE
ReDim aConv1(90)
cConv1 = 0
For k = 1 To 90
If bQFM(k) And bQRM(k) Then
cConv1 = cConv1 + 1
aConv1(cConv1) = k
End If
Next
ReDim Preserve aConv1(cConv1)
Call OrdinaMatrice(aConv1,1)
ReDim aConv2(90)
cConv2 = 0
For k = 1 To 90
If bQFM(k) And bQrm_min(k) Then
cConv2 = cConv2 + 1
aConv2(cConv2) = k
End If
Next
ReDim Preserve aConv2(cConv2)
Call OrdinaMatrice(aConv2,1)
ReDim aConv3(90)
cConv3 = 0
For k = 1 To 90
If bQfm_min(k) And bQRM(k) Then
cConv3 = cConv3 + 1
aConv3(cConv3) = k
End If
Next
ReDim Preserve aConv3(cConv3)
Call OrdinaMatrice(aConv3,1)
ReDim aConv4(90)
cConv4 = 0
For k = 1 To 90
If bQfm_min(k) And bQrm_min(k) Then
cConv4 = cConv4 + 1
aConv4(cConv4) = k
End If
Next
ReDim Preserve aConv4(cConv4)
Call OrdinaMatrice(aConv4,1)
Call Scrivi("CONVERGENTI QFM @ QRM : " & StringaNumeri(aConv1,"-"),True)
Call Scrivi("CONVERGENTI QFM @ Qrm : " & StringaNumeri(aConv2,"-"),True)
Call Scrivi("CONVERGENTI Qfm @ QRM : " & StringaNumeri(aConv3,"-"),True)
Call Scrivi("CONVERGENTI Qfm @ Qrm : " & StringaNumeri(aConv4,"-"),True)
Call Scrivi("")
' 5.6 STRINGHE EXPORT 8 RIGHE
sExp_QFM = StringaNumeri(aListQFM,".")
sExp_Qfm_min = StringaNumeri(aListQfm_min,".")
sExp_QRM = StringaNumeri(aListQRM,".")
sExp_Qrm_min = StringaNumeri(aListQrm_min,".")
sExp_Conv1 = StringaNumeri(aConv1,".")
sExp_Conv2 = StringaNumeri(aConv2,".")
sExp_Conv3 = StringaNumeri(aConv3,".")
sExp_Conv4 = StringaNumeri(aConv4,".")
Call Scrivi("==========================================================================================",True)
Call Scrivi(" BLOCCO EXPORT 8 RIGHE (SOLO NUMERI SEPARATI DA PUNTO - FACILE DA COPIARE)",True)
Call Scrivi("==========================================================================================",True)
Call Scrivi(sExp_QFM)
Call Scrivi(sExp_Qfm_min)
Call Scrivi(sExp_QRM)
Call Scrivi(sExp_Qrm_min)
Call Scrivi(sExp_Conv1)
Call Scrivi(sExp_Conv2)
Call Scrivi(sExp_Conv3)
Call Scrivi(sExp_Conv4)
Call Scrivi("==========================================================================================")
Call Scrivi("")
' ==============================================================
' 5.7 ELEZIONE DEL MIGLIOR QUADRANTE TEORICO ATTUALE (C33)
' ==============================================================
If bEseguiBacktest And nCasiTestatiQ_BT > 0 Then
nSat_FMax = 0
nSat_FMin = 0
nSat_RMax = 0
nSat_RMin = 0
If nMaxNeg_FMax > 0 Then
nSat_FMax = nCurNeg_FMax / nMaxNeg_FMax
End If
If nMaxNeg_FMin > 0 Then
nSat_FMin = nCurNeg_FMin / nMaxNeg_FMin
End If
If nMaxNeg_RMax > 0 Then
nSat_RMax = nCurNeg_RMax / nMaxNeg_RMax
End If
If nMaxNeg_RMin > 0 Then
nSat_RMin = nCurNeg_RMin / nMaxNeg_RMin
End If
sBestQNome = "QFM (Frequenza Max)"
sBestQComboStr = sExp_QFM
nBestQCurNeg = nCurNeg_FMax
nBestQMaxNeg = nMaxNeg_FMax
nBestQWinRate = Round((nWin_FMax_BT / nCasiTestatiQ_BT) * 100,1)
nBestQSaturazione = nSat_FMax
If nSat_FMin > nBestQSaturazione Then
sBestQNome = "Qfm (Frequenza Min)"
sBestQComboStr = sExp_Qfm_min
nBestQCurNeg = nCurNeg_FMin
nBestQMaxNeg = nMaxNeg_FMin
nBestQWinRate = Round((nWin_FMin_BT / nCasiTestatiQ_BT) * 100,1)
nBestQSaturazione = nSat_FMin
End If
If nSat_RMax > nBestQSaturazione Then
sBestQNome = "QRM (Ritardo Max)"
sBestQComboStr = sExp_QRM
nBestQCurNeg = nCurNeg_RMax
nBestQMaxNeg = nMaxNeg_RMax
nBestQWinRate = Round((nWin_RMax_BT / nCasiTestatiQ_BT) * 100,1)
nBestQSaturazione = nSat_RMax
End If
If nSat_RMin > nBestQSaturazione Then
sBestQNome = "Qrm (Ritardo Min)"
sBestQComboStr = sExp_Qrm_min
nBestQCurNeg = nCurNeg_RMin
nBestQMaxNeg = nMaxNeg_RMin
nBestQWinRate = Round((nWin_RMin_BT / nCasiTestatiQ_BT) * 100,1)
nBestQSaturazione = nSat_RMin
End If
nBestQScarto = nBestQMaxNeg - nBestQCurNeg
Call Scrivi("==========================================================================================",True)
Call Scrivi(" MIGLIOR QUADRANTE TEORICO ATTUALE PER AMBO A COLPO SU " & NomeRuota(nRuota),True)
Call Scrivi("==========================================================================================",True)
Call Scrivi(" -> QUADRANTE ELETTO : " & sBestQNome,True)
Call Scrivi(" -> FORMAZIONE (33n) : " & sBestQComboStr,True)
Call Scrivi(" -> WIN-RATE STORICO A COLPO : " & nBestQWinRate & "%")
Call Scrivi(" -> CONSECUTIVITA NEGATIVA ATTUALE : " & nBestQCurNeg & " colpi a vuoto consecutivi")
Call Scrivi(" -> CONSECUTIVITA NEGATIVA MASSIMA : " & nBestQMaxNeg & " colpi a vuoto record storico")
If nBestQScarto <= 0 Then
Call Scrivi(" -> TENSIONE DI SFALDAMENTO: CRITICA / RAGGIUNTO RECORD NEGATIVO (ROTTURA IMMINENTE!)",True)
Else
Call Scrivi(" -> DISTANZA DAL LIMITE STORICO: Solo " & nBestQScarto & " colpi di margine al tetto massimo!",True)
End If
Call Scrivi("==========================================================================================")
Call Scrivi("")
End If
End If
' ==================================================================
' --- FASE 6: RIDUZIONE QUANTISTICA INCMAX III DOC & COLLIMANTI FULL ---
' ==================================================================
If bMiglioreTrovata And nTotR1 = 66 Then
Call Scrivi("==========================================================================================",True)
Call Scrivi(" FASE 6: RIDUZIONE QUANTISTICA INCMAX III DOC & COLLIMANTI FULL (C66 -> C65)",True)
Call Scrivi("==========================================================================================",True)
Call Scrivi("Finestra armonica analizzata: ultime 2400 estrazioni consecutive [" & nInizio2400 & " - " & nFine & "]")
Call Scrivi("Ruota target: " & NomeRuota(nRuota) & " | Sorte di scansione: " & nSorte & " (Ambo)")
Call Scrivi("")
For k = 1 To 90
aPresenzeDOC(k) = 0
Next
nCasiDOC = 0
For skipIdx = 1 To 66
idxFill = 0
For k = 1 To 66
If k <> skipIdx Then
idxFill = idxFill + 1
aColonna65(idxFill) = aMiglioreComboDiOggi(k)
End If
Next
Call StatisticaFormazioneTurbo(aColonna65,aRuote,nSorte,retRit65,retRS65,retInc65,retFreq65,nInizio2400,nFine)
diff65 = retRS65 - retRit65
Call ElencoRitardi(aColonna65,aRuote,nSorte,nInizio2400,nFine,aVetRitardi,aVetIdEstr)
If UBound(aVetRitardi) >= 2 Then
sIncrList = ""
For cvr = 1 To UBound(aVetRitardi) - 1
sIncrList = sIncrList & "." & CStr(aVetRitardi(cvr + 1) - aVetRitardi(cvr))
Next
Call SplitByChar(sIncrList,".",aVetIncr)
nTotIncr = UBound(aVetIncr)
If nTotIncr >= 2 Then
ReDim aVetIncrInt(nTotIncr - 1)
For cvixim = 1 To nTotIncr - 1
aVetIncrInt(cvixim) = CInt(aVetIncr(cvixim))
Next
nIncrAttuale = CInt(aVetIncr(nTotIncr))
nIncrStoricoMax = MassimoV(aVetIncrInt,1,nTotIncr - 1)
diffIncMax = nIncrAttuale - nIncrStoricoMax
If diff65 = 0 And diffIncMax = 0 Then
nCasiDOC = nCasiDOC + 1
For k = 1 To 65
aPresenzeDOC(aColonna65(k)) = aPresenzeDOC(aColonna65(k)) + 1
Next
End If
End If
End If
Next
Call Scrivi("Totale formazioni di classe 65 testate: 66")
Call Scrivi("Totale casi ottimali DOC rilevati (diff=0 e diffIncMax=0): " & nCasiDOC,True)
Call Scrivi("")
If nCasiDOC > 0 Then
For k = 1 To 90
aPresSortNum(k) = k
aPresSortVal(k) = aPresenzeDOC(k)
Next
For px = 1 To 89
For py = px + 1 To 90
If aPresSortVal(py) > aPresSortVal(px) Then
pTempV = aPresSortVal(px)
aPresSortVal(px) = aPresSortVal(py)
aPresSortVal(py) = pTempV
pTempN = aPresSortNum(px)
aPresSortNum(px) = aPresSortNum(py)
aPresSortNum(py) = pTempN
End If
Next
Next
Call Scrivi("CLASSIFICA PRESENZE ELEMENTI NELLE FORMAZIONI DOC:")
For k = 1 To 90
If aPresSortVal(k) > 0 Then
Call Scrivi("Num. " & Format2(aPresSortNum(k)) & " - presenze: " & aPresSortVal(k) & " su " & nCasiDOC)
End If
Next
Call Scrivi("")
cCollimantiFull = 0
ReDim aCollimantiFull(90)
For k = 1 To 90
If aPresenzeDOC(k) = nCasiDOC Then
cCollimantiFull = cCollimantiFull + 1
aCollimantiFull(cCollimantiFull) = k
End If
Next
If cCollimantiFull > 0 Then
ReDim Preserve aCollimantiFull(cCollimantiFull)
Call OrdinaMatrice(aCollimantiFull,1)
sExp_CollimantiFull = StringaNumeri(aCollimantiFull,".")
Call Scrivi("==========================================================================================",True)
Call Scrivi("GRUPPO RISTRETTO COLLIMANTI FULL (PRESENZA 100% IN TUTTE LE FORMAZIONI DOC)",True)
Call Scrivi("==========================================================================================",True)
Call Scrivi(" -> Quantita elementi isolati: " & cCollimantiFull & " numeri (Classe <= 16: RISPETTATA!)",True)
Call Scrivi(" -> Stringa giocabile: " & sExp_CollimantiFull,True)
Call Scrivi("")
Call StatisticaFormazioneTurbo(aCollimantiFull,aRuote,2,retRitCF,retRSCF,retIncCF,retFreqCF,nInizio,nFine)
nColpiRimanentiCF = retRSCF - retRitCF
Call Scrivi("PROFILO STATISTICO COLLIMANTI FULL PER AMBO SU " & NomeRuota(nRuota) & " (Archivio Totale):",True)
Call Scrivi(" - Ritardo Attuale (RA) : " & retRitCF)
Call Scrivi(" - Ritardo Storico (RS) : " & retRSCF)
Call Scrivi(" - Frequenza Totale (FQ) : " & retFreqCF)
Call Scrivi(" - Scarto (RS - RA) : " & nColpiRimanentiCF)
If nColpiRimanentiCF <= 0 Then
Call Scrivi(" -> STATO DI SFALDAMENTO : IPER-FREQUENTE / PRONTO A COLPO! (Scarto <= 0)",True)
Else
Call Scrivi(" -> COLPI TEORICI RIMANENTI: " & nColpiRimanentiCF & " colpi al massimo storico",True)
End If
Call Scrivi("==========================================================================================")
Call Scrivi("")
Else
Call Scrivi("Nessun numero e presente al 100% in tutti i casi DOC.")
End If
Else
Call Scrivi("Nessuna formazione di classe 65 ha soddisfatto la condizione INCMAX III DOC.")
End If
End If
' ==================================================================
' --- FASE 7: ESPORTAZIONE AUTOMATICA DEI 14 FILE TXT SUL DESKTOP ---
' ==================================================================
If bMiglioreTrovata And nTotR1 = 66 Then
Call Scrivi("==========================================================================================",True)
Call Scrivi(" FASE 7: GENERAZIONE E SALVATAGGIO DEI 14 FILE TXT PULITI SUL DESKTOP",True)
Call Scrivi("==========================================================================================",True)
Set WshShell = CreateObject("WScript.Shell")
sPercorsoDesktop = WshShell.SpecialFolders("Desktop") & "\"
Set WshShell = Nothing
Set fso = CreateObject("Scripting.FileSystemObject")
' FILE 1: 8 RIGHE (4 QUADRANTI + 4 CONVERGENTI)
sNomeFile = sPercorsoDesktop & "01_Quadranti_8Righe_" & SiglaRuota(nRuota) & "_Estr_" & nFine & ".txt"
On Error Resume Next
Set fFile = fso.CreateTextFile(sNomeFile,True)
If Err.Number = 0 Then
fFile.WriteLine(sExp_QFM)
fFile.WriteLine(sExp_Qfm_min)
fFile.WriteLine(sExp_QRM)
fFile.WriteLine(sExp_Qrm_min)
fFile.WriteLine(sExp_Conv1)
fFile.WriteLine(sExp_Conv2)
fFile.WriteLine(sExp_Conv3)
fFile.WriteLine(sExp_Conv4)
fFile.Close
Call Scrivi(" -> [01] File 8 Righe salvato: " & sNomeFile,True)
End If
On Error GoTo 0
' MATRICE 22 (13 colonne)
sNomeFile = sPercorsoDesktop & "02_Matrice_C66_22_13colonne_" & SiglaRuota(nRuota) & "_Estr_" & nFine & ".txt"
Call SviluppaMatrice22(aMiglioreComboDiOggi,sNomeFile)
' MATRICE 11 (48 colonne)
sNomeFile = sPercorsoDesktop & "03_Matrice_C66_11_48colonne_" & SiglaRuota(nRuota) & "_Estr_" & nFine & ".txt"
Call SviluppaMatrice11(aMiglioreComboDiOggi,sNomeFile)
' MATRICE 6 (143 colonne)
sNomeFile = sPercorsoDesktop & "04_Matrice_C66_6_143colonne_" & SiglaRuota(nRuota) & "_Estr_" & nFine & ".txt"
Call SviluppaMatrice6(aMiglioreComboDiOggi,sNomeFile)
' MATRICE 3 (726 terzine)
sNomeFile = sPercorsoDesktop & "05_Matrice_C66_3_726terzine_" & SiglaRuota(nRuota) & "_Estr_" & nFine & ".txt"
Call SviluppaMatrice3(aMiglioreComboDiOggi,sNomeFile)
' FILE 6: TUTTI I 4 QUADRANTI INSIEME
sNomeFile = sPercorsoDesktop & "06_Quadranti_Tutti4_" & SiglaRuota(nRuota) & "_Estr_" & nFine & ".txt"
On Error Resume Next
Set fFile = fso.CreateTextFile(sNomeFile,True)
If Err.Number = 0 Then
fFile.WriteLine(sExp_QFM)
fFile.WriteLine(sExp_Qfm_min)
fFile.WriteLine(sExp_QRM)
fFile.WriteLine(sExp_Qrm_min)
fFile.Close
Call Scrivi(" -> [06] File 4 Quadranti Insieme salvato: " & sNomeFile,True)
End If
On Error GoTo 0
' FILE 7: COPPIA QUADRANTI FREQUENZA
sNomeFile = sPercorsoDesktop & "07_Quadranti_Frequenza_QFM_Qfm_" & SiglaRuota(nRuota) & "_Estr_" & nFine & ".txt"
On Error Resume Next
Set fFile = fso.CreateTextFile(sNomeFile,True)
If Err.Number = 0 Then
fFile.WriteLine(sExp_QFM)
fFile.WriteLine(sExp_Qfm_min)
fFile.Close
Call Scrivi(" -> [07] File Quadranti Frequenza salvato: " & sNomeFile,True)
End If
On Error GoTo 0
' FILE 8: COPPIA QUADRANTI RITARDO
sNomeFile = sPercorsoDesktop & "08_Quadranti_Ritardo_QRM_Qrm_" & SiglaRuota(nRuota) & "_Estr_" & nFine & ".txt"
On Error Resume Next
Set fFile = fso.CreateTextFile(sNomeFile,True)
If Err.Number = 0 Then
fFile.WriteLine(sExp_QRM)
fFile.WriteLine(sExp_Qrm_min)
fFile.Close
Call Scrivi(" -> [08] File Quadranti Ritardo salvato: " & sNomeFile,True)
End If
On Error GoTo 0
' FILE 9: QUADRANTE SINGOLO QFM
sNomeFile = sPercorsoDesktop & "09_Quadrante_Singolo_QFM_" & SiglaRuota(nRuota) & "_Estr_" & nFine & ".txt"
On Error Resume Next
Set fFile = fso.CreateTextFile(sNomeFile,True)
If Err.Number = 0 Then
fFile.WriteLine(sExp_QFM)
fFile.Close
Call Scrivi(" -> [09] File Singolo QFM salvato: " & sNomeFile,True)
End If
On Error GoTo 0
' FILE 10: QUADRANTE SINGOLO Qfm
sNomeFile = sPercorsoDesktop & "10_Quadrante_Singolo_Qfm_" & SiglaRuota(nRuota) & "_Estr_" & nFine & ".txt"
On Error Resume Next
Set fFile = fso.CreateTextFile(sNomeFile,True)
If Err.Number = 0 Then
fFile.WriteLine(sExp_Qfm_min)
fFile.Close
Call Scrivi(" -> [10] File Singolo Qfm salvato: " & sNomeFile,True)
End If
On Error GoTo 0
' FILE 11: QUADRANTE SINGOLO QRM
sNomeFile = sPercorsoDesktop & "11_Quadrante_Singolo_QRM_" & SiglaRuota(nRuota) & "_Estr_" & nFine & ".txt"
On Error Resume Next
Set fFile = fso.CreateTextFile(sNomeFile,True)
If Err.Number = 0 Then
fFile.WriteLine(sExp_QRM)
fFile.Close
Call Scrivi(" -> [11] File Singolo QRM salvato: " & sNomeFile,True)
End If
On Error GoTo 0
' FILE 12: QUADRANTE SINGOLO Qrm
sNomeFile = sPercorsoDesktop & "12_Quadrante_Singolo_Qrm_" & SiglaRuota(nRuota) & "_Estr_" & nFine & ".txt"
On Error Resume Next
Set fFile = fso.CreateTextFile(sNomeFile,True)
If Err.Number = 0 Then
fFile.WriteLine(sExp_Qrm_min)
fFile.Close
Call Scrivi(" -> [12] File Singolo Qrm salvato: " & sNomeFile,True)
End If
On Error GoTo 0
' FILE 13: FILE DEDICATO AI COLLIMANTI FULL INCMAX III
If cCollimantiFull > 0 Then
sNomeFile = sPercorsoDesktop & "13_Collimanti_Full_INCMAX3_" & SiglaRuota(nRuota) & "_Estr_" & nFine & ".txt"
On Error Resume Next
Set fFile = fso.CreateTextFile(sNomeFile,True)
If Err.Number = 0 Then
fFile.WriteLine(sExp_CollimantiFull)
fFile.Close
Call Scrivi(" -> [13] File Collimanti FULL INCMAX III salvato: " & sNomeFile,True)
End If
On Error GoTo 0
End If
' FILE 14: MIGLIOR QUADRANTE TEORICO ATTUALE
If bEseguiBacktest And nCasiTestatiQ_BT > 0 Then
sNomeFile = sPercorsoDesktop & "14_Miglior_Quadrante_C33_" & SiglaRuota(nRuota) & "_Estr_" & nFine & ".txt"
On Error Resume Next
Set fFile = fso.CreateTextFile(sNomeFile,True)
If Err.Number = 0 Then
fFile.WriteLine(sBestQComboStr)
fFile.Close
Call Scrivi(" -> [14] File Miglior Quadrante Teorico salvato: " & sNomeFile,True)
End If
On Error GoTo 0
End If
Call Scrivi("")
Call Scrivi("TUTTI I 14 FILE TXT PULITI SONO STATI GENERATI SUL DESKTOP!",True)
Call Scrivi("==========================================================================================",True)
Call Scrivi("")
End If
Call Scrivi("--- ELABORAZIONE TERMINATA ---")
Call Scrivi("Combinazioni totali testate per oggi: " & FormatNumber(i - 1,0))
Call Scrivi("Combinazioni totali idonee oggi: " & FormatNumber(nTrovate,0))
Call Scrivi("Tempo totale trascorso: " & TempoTrascorso)
End Sub
Sub Titolazione()
Call Scrivi("==========================================================================================",True)
Call Scrivi(" ANALIZZATORE COMBINAZIONI, QUADRANTI, GDP2 & MOTORE INCMAX III DOC v3.3",True)
Call Scrivi("==========================================================================================",True)
Call Scrivi("")
End Sub
Function CombinazioniSenzaRipetizione(ByVal n,ByVal k)
Dim i
Dim p
p = 1
If k > n Then
CombinazioniSenzaRipetizione = 0
Exit Function
End If
If k > n / 2 Then
k = n - k
End If
For i = 1 To k
p = p *(n - i + 1) / i
Next
CombinazioniSenzaRipetizione = p
End Function
' ==================================================================
' SUB AUSILIARIE DI GENERAZIONE FILE TXT PULITI (SOLO NUMERI)
' ==================================================================
Sub SostituisciEStampa(sBloccoRighe,aNumeriBase,sTitolo,sFileDestinazione)
Dim aRighe
Dim aIndici
Dim aComboRisultante
Dim rigaIdx
Dim elemIdx
Dim sRigaOut
Dim nIndicePos
Dim fsoSub
Dim fFileSub
Dim bSubFileOk
bSubFileOk = False
On Error Resume Next
Set fsoSub = CreateObject("Scripting.FileSystemObject")
Set fFileSub = fsoSub.CreateTextFile(sFileDestinazione,True)
If Err.Number = 0 Then
bSubFileOk = True
End If
On Error GoTo 0
Call Scrivi("--- " & sTitolo & " ---",True)
aRighe = Split(sBloccoRighe,"|")
For rigaIdx = 0 To UBound(aRighe)
If Trim(aRighe(rigaIdx)) <> "" Then
aIndici = Split(Trim(aRighe(rigaIdx))," ")
ReDim aComboRisultante(UBound(aIndici) + 1)
For elemIdx = 0 To UBound(aIndici)
nIndicePos = CInt(aIndici(elemIdx))
aComboRisultante(elemIdx + 1) = aNumeriBase(nIndicePos)
Next
Call OrdinaMatrice(aComboRisultante,1)
sRigaOut = StringaNumeri(aComboRisultante,".")
Call Scrivi(sRigaOut)
If bSubFileOk Then
fFileSub.WriteLine(sRigaOut)
End If
End If
Next
If bSubFileOk Then
fFileSub.Close
Set fFileSub = Nothing
Set fsoSub = Nothing
Call Scrivi(" -> File salvato: " & sFileDestinazione,True)
End If
Call Scrivi("")
End Sub
Sub SviluppaMatrice22(aNumeriBase,sFileDestinazione)
Dim sM22
sM22 = ""
sM22 = sM22 & "1 2 3 4 10 15 17 18 19 21 32 34 35 36 37 43 48 50 51 52 54 65|"
sM22 = sM22 & "1 4 5 11 12 15 18 20 23 24 33 34 37 38 44 45 48 51 53 56 57 66|"
sM22 = sM22 & "1 4 6 16 18 22 25 26 29 30 31 34 37 39 49 51 55 58 59 62 63 64|"
sM22 = sM22 & "1 4 7 8 9 13 14 18 19 27 28 34 37 40 41 42 46 47 51 52 60 61|"
sM22 = sM22 & "2 3 6 8 10 17 20 21 25 28 30 35 36 39 41 43 50 53 54 58 61 63|"
sM22 = sM22 & "2 5 9 13 14 17 21 24 26 29 33 35 38 42 46 47 50 54 57 59 62 66|"
sM22 = sM22 & "2 7 11 12 16 17 21 22 23 27 31 35 40 44 45 49 50 54 55 56 60 64|"
sM22 = sM22 & "3 5 8 10 16 19 22 24 28 31 33 36 38 41 43 49 52 55 57 61 64 66|"
sM22 = sM22 & "3 7 10 14 19 20 25 26 27 29 30 36 40 43 47 52 53 58 59 60 62 63|"
sM22 = sM22 & "3 9 10 11 12 13 14 15 23 25 30 36 42 43 44 45 46 47 48 56 58 63|"
sM22 = sM22 & "5 6 7 13 15 24 25 27 30 32 33 38 39 40 46 48 57 58 60 63 65 66|"
sM22 = sM22 & "6 8 11 12 15 19 23 26 28 29 32 39 41 44 45 48 52 56 59 61 62 65|"
sM22 = sM22 & "6 9 10 13 14 15 16 20 22 31 32 39 42 43 46 47 48 49 53 55 64 65|"
Call SostituisciEStampa(sM22,aNumeriBase,"SISTEMA GDP2: C(66,22,2) = 13 COMBINAZIONI DA 22 NUMERI",sFileDestinazione)
End Sub
Sub SviluppaMatrice11(aNumeriBase,sFileDestinazione)
Dim sM11
sM11 = ""
sM11 = sM11 & "1 2 13 17 23 35 40 41 47 54 63|"
sM11 = sM11 & "1 3 11 12 30 32 33 34 48 50 54|"
sM11 = sM11 & "1 4 6 22 24 37 45 53 54 57 65|"
sM11 = sM11 & "1 5 14 19 28 33 35 54 59 60 61|"
sM11 = sM11 & "1 7 16 21 27 43 49 54 56 62 66|"
sM11 = sM11 & "1 8 18 20 25 31 36 46 54 59 64|"
sM11 = sM11 & "1 9 10 14 26 38 39 42 52 54 58|"
sM11 = sM11 & "1 15 17 23 29 35 44 51 54 55 62|"
sM11 = sM11 & "2 3 7 14 22 32 37 41 42 49 63|"
sM11 = sM11 & "2 4 11 18 26 41 45 46 50 52 63|"
sM11 = sM11 & "2 5 15 19 28 29 41 44 51 55 63|"
sM11 = sM11 & "2 6 21 25 33 36 41 43 48 53 63|"
sM11 = sM11 & "2 8 9 12 16 27 31 34 39 41 63|"
sM11 = sM11 & "2 10 20 24 38 41 56 63 64 65 66|"
sM11 = sM11 & "2 17 30 41 57 58 59 60 61 62 63|"
sM11 = sM11 & "3 4 16 20 23 27 32 40 45 60 64|"
sM11 = sM11 & "3 5 13 19 24 28 40 45 48 50 62|"
sM11 = sM11 & "3 6 8 31 32 44 53 55 56 58 66|"
sM11 = sM11 & "3 8 13 15 26 31 32 47 51 52 57|"
sM11 = sM11 & "3 9 24 25 29 32 36 39 61 62 65|"
sM11 = sM11 & "3 10 17 18 21 32 35 38 43 46 59|"
sM11 = sM11 & "4 5 11 18 19 26 28 46 47 52 62|"
sM11 = sM11 & "4 7 12 15 29 34 45 49 51 58 59|"
sM11 = sM11 & "4 8 14 21 23 31 40 42 43 45 61|"
sM11 = sM11 & "4 9 17 33 35 39 45 48 56 57 66|"
sM11 = sM11 & "4 10 13 25 30 36 38 44 45 47 55|"
sM11 = sM11 & "5 6 19 27 28 36 42 53 56 58 64|"
sM11 = sM11 & "5 7 12 19 23 28 30 34 37 43 66|"
sM11 = sM11 & "5 8 10 16 19 21 22 28 31 32 57|"
sM11 = sM11 & "5 9 17 19 20 25 28 38 39 49 65|"
sM11 = sM11 & "6 7 9 13 18 39 46 47 49 53 60|"
sM11 = sM11 & "6 10 11 15 16 27 38 50 51 53 61|"
sM11 = sM11 & "6 12 14 17 20 34 35 42 53 62 64|"
sM11 = sM11 & "6 23 26 29 30 40 52 53 56 59 66|"
sM11 = sM11 & "7 8 11 17 24 30 31 35 49 50 65|"
sM11 = sM11 & "7 10 12 23 25 34 36 38 40 49 57|"
sM11 = sM11 & "7 20 26 33 44 48 49 52 55 61 64|"
sM11 = sM11 & "8 10 22 29 31 33 37 38 48 60 62|"
sM11 = sM11 & "9 11 22 23 37 39 40 44 50 55 59|"
sM11 = sM11 & "9 15 20 21 22 30 37 39 43 51 64|"
sM11 = sM11 & "11 13 20 21 29 43 47 50 57 58 64|"
sM11 = sM11 & "11 14 15 25 36 42 50 51 56 60 66|"
sM11 = sM11 & "12 13 18 22 34 37 46 47 56 61 66|"
sM11 = sM11 & "12 21 24 26 34 43 44 52 55 60 65|"
sM11 = sM11 & "13 14 16 24 27 33 42 47 48 59 65|"
sM11 = sM11 & "14 16 18 27 29 30 42 44 46 55 57|"
sM11 = sM11 & "15 18 23 24 33 40 46 48 51 58 65|"
sM11 = sM11 & "16 17 22 25 26 27 35 36 37 52 58|"
Call SostituisciEStampa(sM11,aNumeriBase,"SISTEMA GDP2: C(66,11,2) = 48 COMBINAZIONI DA 11 NUMERI",sFileDestinazione)
End Sub
Sub SviluppaMatrice6(aNumeriBase,sFileDestinazione)
Dim sM6
sM6 = ""
sM6 = sM6 & "1 2 3 4 5 66|1 6 25 26 40 58|1 7 28 39 45 56|1 8 27 34 50 57|1 9 22 44 51 62|1 10 30 32 42 47|"
sM6 = sM6 & "1 11 17 38 49 55|1 12 16 24 37 59|1 13 18 36 54 64|1 14 23 52 60 63|1 15 33 41 46 65|1 19 29 31 43 48|"
sM6 = sM6 & "1 20 21 35 53 61|2 6 14 27 49 56|2 7 26 35 55 57|2 8 15 20 28 58|2 9 25 32 41 48|2 10 13 16 29 38|"
sM6 = sM6 & "2 11 18 37 44 60|2 12 17 36 45 65|2 19 22 53 59 63|2 21 30 50 52 62|2 23 34 40 51 61|2 24 31 42 46 54|"
sM6 = sM6 & "2 33 39 43 47 64|3 6 19 28 57 65|3 7 24 27 58 64|3 8 26 44 54 56|3 9 13 17 34 37|3 10 15 23 53 62|"
sM6 = sM6 & "3 11 16 35 36 50|3 12 18 25 30 38|3 14 20 31 41 47|3 21 39 49 51 63|3 22 29 45 52 61|3 32 40 43 46 59|"
sM6 = sM6 & "3 33 42 48 55 60|4 6 18 23 41 59|4 7 38 44 48 52|4 8 12 29 32 63|4 9 30 40 54 65|4 10 21 31 37 58|"
sM6 = sM6 & "4 11 22 26 34 47|4 13 42 50 53 56|4 14 16 28 33 51|4 15 19 24 45 55|4 17 39 46 57 61|4 20 27 36 43 62|"
sM6 = sM6 & "4 25 35 49 60 64|5 6 20 38 46 51|5 7 17 22 41 50|5 8 11 24 33 62|5 9 14 35 45 59|5 10 18 48 57 63|"
sM6 = sM6 & "5 12 21 28 47 54|5 13 43 52 58 65|5 15 29 40 44 49|5 16 26 32 53 64|5 19 30 34 39 60|5 23 31 36 55 56|"
sM6 = sM6 & "5 25 27 37 42 61|6 7 8 9 10 66|6 11 30 31 45 63|6 12 33 44 50 61|6 13 32 39 55 62|6 15 35 37 47 52|"
sM6 = sM6 & "6 16 22 43 54 60|6 17 21 29 42 64|6 24 34 36 48 53|7 11 19 32 54 61|7 12 31 40 60 62|7 13 20 25 33 63|"
sM6 = sM6 & "7 14 30 37 46 53|7 15 18 21 34 43|7 16 23 42 49 65|7 29 36 47 51 59|8 13 31 49 59 61|8 14 18 22 39 42|"
sM6 = sM6 & "8 16 21 40 41 55|8 17 23 30 35 43|8 19 25 36 46 52|8 37 45 48 51 64|8 38 47 53 60 65|9 11 23 28 46 64|"
sM6 = sM6 & "9 12 43 49 53 57|9 15 26 36 42 63|9 16 27 31 39 52|9 18 47 55 58 61|9 19 21 33 38 56|9 20 24 29 50 60|"
sM6 = sM6 & "10 11 25 43 51 56|10 12 22 27 46 55|10 14 19 40 50 64|10 17 26 33 52 59|10 20 34 45 49 54|10 24 35 39 44 65|"
sM6 = sM6 & "10 28 36 41 60 61|11 12 13 14 15 66|11 20 40 42 52 57|11 21 27 48 59 65|11 29 39 41 53 58|12 19 35 42 51 58|"
sM6 = sM6 & "12 20 23 26 39 48|12 34 41 52 56 64|13 19 23 27 44 47|13 21 26 45 46 60|13 22 28 35 40 48|13 24 30 41 51 57|"
sM6 = sM6 & "14 17 48 54 58 62|14 21 32 36 44 57|14 24 26 38 43 61|14 25 29 34 55 65|15 16 30 48 56 61|15 17 27 32 51 60|"
sM6 = sM6 & "15 22 31 38 57 64|15 25 39 50 54 59|16 17 18 19 20 66|16 25 45 47 57 62|16 34 44 46 58 63|17 24 40 47 56 63|"
sM6 = sM6 & "17 25 28 31 44 53|18 24 28 32 49 52|18 26 31 50 51 65|18 27 33 40 45 53|18 29 35 46 56 62|19 26 37 41 49 62|"
sM6 = sM6 & "20 22 32 37 56 65|20 30 44 55 59 64|21 22 23 24 25 66|22 30 33 36 49 58|23 29 33 37 54 57|23 32 38 45 50 58|"
sM6 = sM6 & "26 27 28 29 30 66|27 35 38 41 54 63|28 34 38 42 59 62|28 37 43 50 55 63|31 32 33 34 35 66|36 37 38 39 40 66|"
sM6 = sM6 & "41 42 43 44 45 66|46 47 48 49 50 66|51 52 53 54 55 66|56 57 58 59 60 66|61 62 63 64 65 66|"
Call SostituisciEStampa(sM6,aNumeriBase,"SISTEMA GDP2: C(66,6,2) = 143 COMBINAZIONI DA 6 NUMERI",sFileDestinazione)
End Sub
Sub SviluppaMatrice3(aNumeriBase,sFileDestinazione)
Dim sM3
sM3 = ""
sM3 = sM3 & "1 2 3|1 4 8|1 5 33|1 6 13|1 7 29|1 9 21|1 10 53|1 11 64|1 12 16|1 14 62|1 15 58|1 17 42|1 18 35|1 19 60|1 20 49|1 22 46|1 23 44|1 24 54|1 25 59|1 26 61|1 27 45|1 28 39|1 30 60|1 31 41|1 32 56|1 34 47|1 36 40|1 37 63|1 38 65|1 43 57|1 48 55|1 50 52|1 51 66|"
sM3 = sM3 & "2 4 46|2 5 12|2 6 7|2 8 27|2 9 15|2 10 11|2 13 43|2 14 39|2 16 41|2 17 24|2 18 57|2 19 48|2 20 28|2 21 42|2 22 56|2 23 59|2 24 38|2 25 63|2 26 33|2 29 62|2 30 31|2 32 53|2 34 37|2 35 60|2 36 44|2 40 61|2 45 66|2 47 58|2 49 52|2 50 51|2 54 65|2 55 64|"
sM3 = sM3 & "3 4 33|3 5 42|3 6 50|3 7 39|3 8 37|3 9 63|3 10 13|3 11 22|3 11 53|3 12 54|3 14 34|3 15 23|3 16 64|3 17 21|3 18 26|3 19 59|3 20 24|3 25 43|3 27 55|3 28 30|3 29 32|3 31 65|3 35 52|3 36 58|3 38 40|3 41 62|3 44 66|3 45 51|3 46 60|3 47 48|3 49 57|3 56 61|"
sM3 = sM3 & "4 5 34|4 6 20|4 7 55|4 9 14|4 10 57|4 11 52|4 12 20|4 13 45|4 15 28|4 16 54|4 17 29|4 18 37|4 19 27|4 21 24|4 22 43|4 23 30|4 25 26|4 31 47|4 32 59|4 35 40|4 36 51|4 38 44|4 39 62|4 41 61|4 42 64|4 48 60|4 49 53|4 50 66|4 56 58|4 63 65|"
sM3 = sM3 & "5 6 46|5 7 41|5 8 47|5 9 43|5 10 51|5 11 29|5 13 53|5 14 44|5 15 21|5 16 26|5 17 30|5 18 62|5 19 35|5 20 61|5 22 52|5 23 39|5 24 40|5 25 48|5 27 36|5 28 38|5 31 50|5 32 58|5 37 60|5 45 57|5 49 64|5 54 55|5 56 65|5 59 63|5 63 66|"
sM3 = sM3 & "6 8 27|6 9 18|6 10 35|6 11 12|6 14 21|6 15 47|6 16 66|6 17 33|6 19 39|6 22 53|6 23 54|6 24 48|6 25 50|6 26 64|6 28 58|6 29 65|6 30 44|6 31 42|6 32 63|6 34 52|6 36 59|6 37 49|6 38 60|6 40 57|6 41 51|6 43 56|6 45 55|6 61 62|"
sM3 = sM3 & "7 8 65|7 9 22|7 10 56|7 11 66|7 12 64|7 13 50|7 14 38|7 15 33|7 16 25|7 17 45|7 18 54|7 19 24|7 20 44|7 21 43|7 23 40|7 26 32|7 27 47|7 28 31|7 30 62|7 34 36|7 35 48|7 35 49|7 37 52|7 42 59|7 46 63|7 51 60|7 53 58|7 57 61|"
sM3 = sM3 & "8 9 36|8 10 54|8 11 14|8 12 57|8 13 28|8 15 42|8 16 46|8 17 51|8 18 43|8 19 66|8 20 31|8 21 56|8 22 60|8 23 25|8 24 30|8 26 35|8 29 53|8 32 34|8 33 58|8 38 55|8 39 40|8 41 44|8 45 63|8 48 61|8 49 62|8 50 64|8 52 59|"
sM3 = sM3 & "9 10 16|9 11 31|9 12 33|9 13 19|9 13 39|9 17 53|9 20 60|9 23 32|9 24 50|9 25 57|9 26 42|9 27 41|9 28 49|9 29 37|9 30 46|9 34 35|9 38 59|9 40 44|9 45 61|9 47 66|9 48 58|9 51 56|9 52 54|9 55 62|9 64 65|"
sM3 = sM3 & "10 12 17|10 14 63|10 15 49|10 18 22|10 19 62|10 20 39|10 21 58|10 23 37|10 23 41|10 24 45|10 25 42|10 26 31|10 27 44|10 28 40|10 29 30|10 32 55|10 33 50|10 34 46|10 36 47|10 38 52|10 43 48|10 59 60|10 61 64|10 65 66|"
sM3 = sM3 & "11 13 55|11 15 59|11 16 24|11 17 43|11 18 38|11 19 41|11 20 63|11 21 26|11 23 56|11 25 30|11 27 62|11 28 54|11 32 44|11 33 45|11 34 42|11 35 37|11 36 50|11 39 65|11 40 47|11 46 61|11 48 51|11 49 58|11 57 60|"
sM3 = sM3 & "12 13 48|12 14 53|12 15 56|12 18 25|12 19 21|12 22 38|12 23 50|12 24 28|12 26 43|12 27 59|12 29 66|12 30 49|12 31 32|12 32 41|12 34 45|12 35 39|12 36 60|12 37 65|12 40 42|12 44 46|12 47 62|12 51 63|12 52 55|12 58 61|"
sM3 = sM3 & "13 14 51|13 15 61|13 16 63|13 17 62|13 18 41|13 20 57|13 21 59|13 22 40|13 23 49|13 24 66|13 25 34|13 26 60|13 27 33|13 29 58|13 30 52|13 31 35|13 32 65|13 36 38|13 37 64|13 42 54|13 44 56|13 46 47|"
sM3 = sM3 & "14 15 37|14 16 58|14 17 29|14 18 47|14 19 64|14 20 25|14 22 45|14 22 61|14 23 33|14 24 36|14 26 66|14 27 30|14 28 43|14 31 59|14 32 52|14 35 41|14 40 48|14 42 46|14 49 54|14 50 55|14 56 57|14 60 65|"
sM3 = sM3 & "15 16 27|15 17 26|15 18 51|15 19 29|15 20 43|15 22 44|15 24 31|15 25 35|15 30 40|15 31 63|15 32 62|15 34 55|15 36 46|15 38 66|15 39 53|15 41 57|15 45 48|15 50 54|15 52 65|15 60 64|"
sM3 = sM3 & "16 17 60|16 18 31|16 19 38|16 20 34|16 21 62|16 22 23|16 28 29|16 30 51|16 32 39|16 33 57|16 35 55|16 36 61|16 37 40|16 42 65|16 43 52|16 44 47|16 45 50|16 48 62|16 49 56|16 53 59|"
sM3 = sM3 & "17 18 32|17 19 47|17 20 59|17 22 58|17 23 48|17 25 27|17 28 34|17 31 54|17 35 56|17 36 55|17 37 57|17 38 63|17 39 49|17 40 66|17 41 52|17 44 65|17 46 64|17 50 61|"
sM3 = sM3 & "18 19 50|18 20 48|18 21 52|18 23 27|18 24 46|18 28 61|18 29 45|18 30 34|18 33 42|18 36 56|18 39 61|18 40 60|18 44 59|18 49 66|18 53 64|18 55 63|18 58 65|"
sM3 = sM3 & "19 20 54|19 22 49|19 23 58|19 25 28|19 26 36|19 30 46|19 31 52|19 32 43|19 33 59|19 34 65|19 37 61|19 40 53|19 42 57|19 44 63|19 45 56|19 51 55|"
sM3 = sM3 & "20 21 50|20 22 65|20 23 66|20 26 45|20 27 37|20 29 40|20 30 38|20 32 35|20 33 46|20 36 62|20 41 58|20 42 47|20 51 52|20 53 55|20 56 64|"
sM3 = sM3 & "21 22 57|21 23 36|21 25 29|21 26 53|21 27 65|21 28 47|21 30 63|21 31 45|21 32 46|21 33 55|21 34 38|21 35 51|21 37 39|21 40 49|21 41 64|21 44 60|21 48 66|21 54 61|"
sM3 = sM3 & "22 24 29|22 25 55|22 26 30|22 27 31|22 28 62|22 32 37|22 33 48|22 34 66|22 35 63|22 36 42|22 39 51|22 41 54|22 47 64|22 50 59|"
sM3 = sM3 & "23 24 43|23 26 62|23 28 55|23 29 42|23 31 60|23 34 64|23 35 46|23 38 47|23 45 52|23 51 61|23 53 65|23 57 63|"
sM3 = sM3 & "24 25 64|24 26 41|24 27 53|24 32 49|24 33 51|24 34 56|24 35 57|24 37 42|24 39 52|24 44 55|24 47 59|24 58 60|24 61 63|24 62 65|"
sM3 = sM3 & "25 31 49|25 32 47|25 33 39|25 36 52|25 37 44|25 38 62|25 40 65|25 41 66|25 45 58|25 46 53|25 51 54|25 55 61|25 56 60|"
sM3 = sM3 & "26 27 46|26 28 65|26 29 52|26 34 54|26 37 48|26 38 58|26 39 44|26 40 63|26 47 55|26 49 59|26 50 57|26 51 56|"
sM3 = sM3 & "27 28 56|27 29 63|27 32 60|27 34 57|27 35 38|27 39 64|27 40 54|27 42 48|27 43 66|27 49 50|27 51 58|27 52 61|"
sM3 = sM3 & "28 32 45|28 33 41|28 35 66|28 36 63|28 37 66|28 42 44|28 46 51|28 48 53|28 50 60|28 52 57|28 59 64|"
sM3 = sM3 & "29 31 56|29 33 60|29 34 41|29 35 47|29 36 38|29 39 50|29 43 61|29 44 48|29 46 55|29 49 54|29 51 64|29 57 59|"
sM3 = sM3 & "30 32 61|30 33 35|30 36 53|30 37 45|30 39 42|30 41 48|30 43 65|30 47 57|30 50 56|30 54 59|30 55 66|30 58 64|"
sM3 = sM3 & "31 33 34|31 36 64|31 37 55|31 38 57|31 39 48|31 40 46|31 43 51|31 44 61|31 53 62|31 58 66|"
sM3 = sM3 & "32 33 54|32 36 66|32 38 64|32 40 50|32 42 51|32 48 57|"
sM3 = sM3 & "33 36 49|33 37 38|33 40 52|33 43 44|33 47 56|33 53 63|33 53 66|33 61 65|33 62 64|"
sM3 = sM3 & "34 39 60|34 40 58|34 43 58|34 44 51|34 48 49|34 50 63|34 53 61|34 59 62|"
sM3 = sM3 & "35 36 43|35 42 58|35 44 53|35 45 64|35 50 65|35 54 62|35 59 61|"
sM3 = sM3 & "36 37 41|36 39 45|36 48 54|36 57 65|"
sM3 = sM3 & "37 43 62|37 46 57|37 47 50|37 51 59|37 53 56|37 54 58|"
sM3 = sM3 & "38 39 46|38 41 56|38 42 61|38 43 54|38 45 53|38 48 50|38 49 51|"
sM3 = sM3 & "39 40 56|39 41 47|39 43 55|39 54 57|39 58 63|39 59 66|"
sM3 = sM3 & "40 41 55|40 43 64|40 45 59|40 51 62|"
sM3 = sM3 & "41 42 60|41 43 59|41 45 65|41 46 49|41 48 63|41 50 53|"
sM3 = sM3 & "42 43 53|42 45 47|42 49 63|42 50 62|42 52 66|42 55 56|"
sM3 = sM3 & "43 45 49|43 46 50|43 47 60|43 63 64|"
sM3 = sM3 & "44 45 52|44 49 65|44 50 58|44 54 64|44 57 62|"
sM3 = sM3 & "45 46 54|45 60 62|"
sM3 = sM3 & "46 48 65|46 52 56|46 58 59|46 62 66|"
sM3 = sM3 & "47 49 61|47 51 65|47 52 63|47 53 54|"
sM3 = sM3 & "48 52 64|48 56 59|"
sM3 = sM3 & "49 55 60|"
sM3 = sM3 & "51 53 57|"
sM3 = sM3 & "52 53 60|52 58 62|"
sM3 = sM3 & "54 56 66|54 60 63|"
sM3 = sM3 & "55 57 58|55 59 65|"
sM3 = sM3 & "56 62 63|"
sM3 = sM3 & "57 64 66|"
sM3 = sM3 & "60 61 66|"
Call SostituisciEStampa(sM3,aNumeriBase,"SISTEMA GDP2: C(66,3,2) = 726 COMBINAZIONI DA 3 NUMERI (TERZINE)",sFileDestinazione)
End Sub