Eccovi un piccolo esempio di polinomiale di secondo grado costruita con il linguaggio di programmazione di Insider. Vediamo se riusciamo a farla evolvere con la collaborazione di tutti.
dim somma_X as Numeric = 0
dim somma_Y as Numeric = 0
dim sommaQuadrati_X as Numeric = 0
dim sommaCubo_X as Numeric = 0
dim sommaQuarta_X as Numeric = 0
dim somma_XY as Numeric = 0
dim somma_QuadratoX_Y as Numeric = 0
dim elementi as Numeric
dim determinante_A as Numeric
dim determinante_A1 as Numeric
dim determinante_A2 as Numeric
dim determinante_A3 as Numeric
dim costante_A as Numeric
dim costante_B as Numeric
dim costante_C as Numeric
dim vReal_Coefficiente_A as Numeric
dim vReal_Coefficiente_B as Numeric
dim vReal_Coefficiente_C as Numeric
dim ElementoMatrice_1_1 as Numeric
dim ElementoMatrice_1_2 as Numeric
dim ElementoMatrice_1_3 as Numeric
dim ElementoMatrice_2_1 as Numeric
dim ElementoMatrice_2_2 as Numeric
dim ElementoMatrice_2_3 as Numeric
dim ElementoMatrice_3_1 as Numeric
dim ElementoMatrice_3_2 as Numeric
dim ElementoMatrice_3_3 as Numeric
dim LastClose as Numeric = 0
Function Main()
dim x as Numeric
dim dMyValue as Numeric
if (elementi <> TotBar) or (LastClose <> (Close(TotBar - CurrentBar))) then
elementi = TotBar
LastClose = Close(TotBar - CurrentBar)
somma_X = 0
somma_Y = 0
sommaQuadrati_X = 0
sommaCubo_X = 0
sommaQuarta_X = 0
somma_XY = 0
somma_QuadratoX_Y = 0
For x = 1 to CurrentBar
dMyValue = Close( - CurrentBar + x)
somma_X = somma_X + X
somma_Y = somma_Y + dMyValue
sommaQuadrati_X = sommaQuadrati_X + (X ^ 2)
sommaCubo_X = sommaCubo_X + (X ^ 3)
sommaQuarta_X = sommaQuarta_X + (X ^ 4)
somma_XY = somma_XY + X * dMyValue
somma_QuadratoX_Y = somma_QuadratoX_Y + ((X ^ 2) * dMyValue)
Next x
For x = CurrentBar + 1 to elementi
dMyValue = Close(x - CurrentBar)
somma_X = somma_X + X
somma_Y = somma_Y + dMyValue
sommaQuadrati_X = sommaQuadrati_X + (X ^ 2)
sommaCubo_X = sommaCubo_X + (X ^ 3)
sommaQuarta_X = sommaQuarta_X + (X ^ 4)
somma_XY = somma_XY + X * dMyValue
somma_QuadratoX_Y = somma_QuadratoX_Y + ((X ^ 2) * dMyValue)
Next x
' soluzione con il metodo di Cramer
' descrizione del sistema
' S_Quarta_X*a + S_Cubo_X*b + S_Quadrati_X*c = S_QuadratoX_Y
' S_Cubo_X*a + S_Quadrati_X*b + S_X*c = ?__XY
' S_Quadrati_X*a + S__X*b + $elementi*c = ?__Y
' ==== MATRICE DEI COEFFICIENTI
' Tabella mnemorica della matrice
' {1}{1} {1}{2} {1}{3}
' {2}{1} {2}{2} {2}{3}
' {3}{1} {3}{2} {3}{3}
ElementoMatrice_1_1 = sommaQuarta_X
ElementoMatrice_1_2 = sommaCubo_X
ElementoMatrice_1_3 = sommaQuadrati_X
ElementoMatrice_2_1 = sommaCubo_X
ElementoMatrice_2_2 = sommaQuadrati_X
ElementoMatrice_2_3 = somma_X
ElementoMatrice_3_1 = sommaQuadrati_X
ElementoMatrice_3_2 = somma_X
ElementoMatrice_3_3 = elementi
'CALCOLO DETERMINANTE DI A (non uso un loop per maggiore leggibilità)
'diagonali discendenti
determinante_A = ElementoMatrice_1_1 * ElementoMatrice_2_2 * ElementoMatrice_3_3
determinante_A = determinante_A + (ElementoMatrice_1_2 * ElementoMatrice_2_3 * ElementoMatrice_3_1)
determinante_A = determinante_A + (ElementoMatrice_1_3 * ElementoMatrice_2_1 * ElementoMatrice_3_2)
'diagonali ascendenti
determinante_A = determinante_A - (ElementoMatrice_3_1 * ElementoMatrice_2_2 * ElementoMatrice_1_3)
determinante_A = determinante_A - (ElementoMatrice_3_2 * ElementoMatrice_2_3 * ElementoMatrice_1_1)
determinante_A = determinante_A - (ElementoMatrice_3_3 * ElementoMatrice_2_1 * ElementoMatrice_1_2)
If (determinante_A <> 0) then 'altrimenti il sistema è incompatibile o non determinato
'Sostituzione della colonna 1 con i termini noti dell'equazione
ElementoMatrice_1_1 = somma_QuadratoX_Y
ElementoMatrice_2_1 = somma_XY
ElementoMatrice_3_1 = somma_Y
'CALCOLO DETERMINANTE DI A1
'diagonali discendenti
determinante_A1 = ElementoMatrice_1_1 * ElementoMatrice_2_2 * ElementoMatrice_3_3
determinante_A1 = determinante_A1 + (ElementoMatrice_1_2 * ElementoMatrice_2_3 * ElementoMatrice_3_1)
determinante_A1 = determinante_A1 + (ElementoMatrice_1_3 * ElementoMatrice_2_1 * ElementoMatrice_3_2)
'diagonali ascendenti
determinante_A1 = determinante_A1 - (ElementoMatrice_3_1 * ElementoMatrice_2_2 * ElementoMatrice_1_3)
determinante_A1 = determinante_A1 - (ElementoMatrice_3_2 * ElementoMatrice_2_3 * ElementoMatrice_1_1)
determinante_A1 = determinante_A1 - (ElementoMatrice_3_3 * ElementoMatrice_2_1 * ElementoMatrice_1_2)
'Sostituzione della colonna 2 con i termini noti dell'equazione
'(previo ripristino della colonna 1 ai valori della Matrice A)
ElementoMatrice_1_1 = sommaQuarta_X
ElementoMatrice_2_1 = sommaCubo_X
ElementoMatrice_3_1 = sommaQuadrati_X
ElementoMatrice_1_2 = somma_QuadratoX_Y
ElementoMatrice_2_2 = somma_XY
ElementoMatrice_3_2 = somma_Y
'CALCOLO DETERMINANTE DI A2
'diagonali discendenti
determinante_A2 = ElementoMatrice_1_1 * ElementoMatrice_2_2 * ElementoMatrice_3_3
determinante_A2 = determinante_A2 + (ElementoMatrice_1_2 * ElementoMatrice_2_3 * ElementoMatrice_3_1)
determinante_A2 = determinante_A2 + (ElementoMatrice_1_3 * ElementoMatrice_2_1 * ElementoMatrice_3_2)
'diagonali ascendenti
determinante_A2 = determinante_A2 - (ElementoMatrice_3_1 * ElementoMatrice_2_2 * ElementoMatrice_1_3)
determinante_A2 = determinante_A2 - (ElementoMatrice_3_2 * ElementoMatrice_2_3 * ElementoMatrice_1_1)
determinante_A2 = determinante_A2 - (ElementoMatrice_3_3 * ElementoMatrice_2_1 * ElementoMatrice_1_2)
'Sostituzione della colonna 3 con i termini noti dell'equazione
'(previo ripristino della colonna 2 ai valori della Matrice A)
ElementoMatrice_1_2 = sommaCubo_X
ElementoMatrice_2_2 = sommaQuadrati_X
ElementoMatrice_3_2 = somma_X
ElementoMatrice_1_3 = somma_QuadratoX_Y
ElementoMatrice_2_3 = somma_XY
ElementoMatrice_3_3 = somma_Y
'CALCOLO DETERMINANTE DI A3
'diagonali discendenti
determinante_A3 = ElementoMatrice_1_1 * ElementoMatrice_2_2 * ElementoMatrice_3_3
determinante_A3 = determinante_A3 + (ElementoMatrice_1_2 * ElementoMatrice_2_3 * ElementoMatrice_3_1)
determinante_A3 = determinante_A3 + (ElementoMatrice_1_3 * ElementoMatrice_2_1 * ElementoMatrice_3_2)
'diagonali ascendenti
determinante_A3 = determinante_A3 - (ElementoMatrice_3_1 * ElementoMatrice_2_2 * ElementoMatrice_1_3)
determinante_A3 = determinante_A3 - (ElementoMatrice_3_2 * ElementoMatrice_2_3 * ElementoMatrice_1_1)
determinante_A3 = determinante_A3 - (ElementoMatrice_3_3 * ElementoMatrice_2_1 * ElementoMatrice_1_2)
'terna soluzione
vReal_Coefficiente_A = determinante_A1 / determinante_A
vReal_Coefficiente_B = determinante_A2 / determinante_A
vReal_Coefficiente_C = determinante_A3 / determinante_A
else
vReal_Coefficiente_A = 0
vReal_Coefficiente_B = 0
vReal_Coefficiente_C = 0
endif
Endif
If ((vReal_Coefficiente_A + vReal_Coefficiente_B + vReal_Coefficiente_C) <> 0) then
return (vReal_Coefficiente_A * (currentbar ^ 2)) + (vReal_Coefficiente_B * currentbar) + vReal_Coefficiente_C
else
return 0
endif
Endfunction