Insider 3000 - Forums
Insider 3000 - Forums
Home | Profile | Active Topics | Members | Search | FAQ
Username:
Password:
Save Password
Forgot your Password?

 All Forums
 Community
 Scambio Indicatori, Trading System ecc..
 Polinomiale di grado 2
 New Topic  Reply to Topic
 Printer Friendly
Author Previous Topic Topic Next Topic  

SupportoTecnico
Forum Admin

1261 Posts

Posted - 27 November 2013 :  14:23:24  Show Profile  Reply with Quote
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

VpV
Utente Medio

155 Posts

Posted - 27 November 2013 :  15:36:59  Show Profile  Reply with Quote
Grazie, la provo. ;)
Go to Top of Page

SupportoTecnico
Forum Admin

1261 Posts

Posted - 27 November 2013 :  15:45:17  Show Profile  Reply with Quote
Al momento la curva è costruita su tutta la serie storica visualizzata in un certo istante. Una iniziale evoluzione potrebbe essere quella di poter decidere il periodo di inizio e di fine calcolo.
Go to Top of Page
  Previous Topic Topic Next Topic  
 New Topic  Reply to Topic
 Printer Friendly
Jump To:
Insider 3000 - Forums © Copyright 2003-2016 Tradersoft s.r.l. Go To Top Of Page
Powered By: Snitz Forums 2000 Version 3.4.07