Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

VBA moyenne mobile

kennedyisback

XLDnaute Nouveau
Bonjour,
j'ai actuellement un probléme vba à révolutionner,
Je dois réaliser un histogramme de fréquence puis tester la normalité des titres a l'aide de la méthode qq-plot (droite d'henry)
puisJe dois calculer des moyennes mobiles 20 et 50 des titres pour ensuite afficher les signaux d'achats et de ventes en fonctions du croisement à la hausse et à la baisse de ceux-ci.
Absolument novice en VBA je ne sais comment faire. Pourriez vous m'aidez svp ?
 

Staple1600

XLDnaute Barbatruc
Re

Ci-dessous une autre syntaxe
(PS: Je n'ai pas cherché à savoir le bien-fondé mathématique de la chose )
Il s'agit juste d'une autre écriture du code VBA
VB:
Sub MoyenneM_Bis()
Dim dernier&
dernier = Cells(Rows.Count, 2).End(xlUp).Row
With Range("I1:J1")
    .Font.Color = 255: .Interior.Color = 55
    .Value = Array("MM20", "MM50")
End With
With Cells(21, "I").Resize(dernier - 20)
    .FormulaR1C1 = "=AVERAGE(R[-19]C[-7]:RC[-7])"
    .Value = .Value
End With
With Cells(51, "J").Resize(dernier - 50)
    .FormulaR1C1 = "=AVERAGE(R[-49]C[-8]:RC[-8])"
    .Value = .Value
End With
End Sub
Est-ce que les résultats sont les mêmes qu'avec ton code original?

PS: Donc la macro Calcule_Rentas_Bis fonctionne bien chez toi désormais ?
 

kennedyisback

XLDnaute Nouveau
Re @Staple1600

Un grand merci pour votre aide, j'ai finalement réussi à coder tout cela.
Je me permet d'abuser de votre aide, en effet une derniere étape consiste à coder l'OBPI, j'ai effectué toute la macro, mais celle ci ne veut pas fonctionner ("Sub ou fonction non définie") sauriez vous m'aider à voir ce qui pose probléme à tout hasard ? merci d'avance !!
Code:
Option Base 1

Sub OBPI()
 
Dim rf As Double, S0 As Double, Mu As Double, Sigma As Double, Plancher As Double
Dim Strike As Double, dT As Double, Nb_Points As Double, Simulations As Double
Dim Position_Actions As Double, Position_sansrisque as double, Valorisation_Position As Double, beta As Double, Echeance as double
 
    S0 = 100
    Mu = 0.08
    Sigma = 0.3
 
    rf = 0.03
 
    Plancher = 80
    Strike = Deter_Strike(S0, Plancher, rf, Sigma, 1, Plancher / 100)
 
    Nb_Points = 252
    dT = 1 / Nb_Points
    Simulations = 1000
 
    ReDim Performance(Simulations, 2) As Double
 
    For i = 1 To Simulations
 
        Spot = S0
        Echeance = 1
        beta = Proportion_Actions(Spot, Strike, rf, Sigma, Echeance)
 
        Position_Actions = beta * S0
        Position_sansrisque = (1 - beta) * S0
 
        For j = 1 To Nb_Points
 
            Taux_Rentabilite = Taux_Rentabilite_Action(Mu, Sigma, dT)
            Spot = Spot * Exp(Taux_Rentabilite)
            Valorisation_Position = Position_Actions * Exp(Taux_Rentabilite) + Position_sansrisque * Exp(rf * dT)
            Echeance = WorksheetFunction.Max(Echeance - dT, 1E-08)
            beta = Proportion_Actions(Spot, Strike, rf, Sigma, Echeance)
            Position_Actions = beta * Valorisation_Position
            Position_sansrisque = (1 - beta) * Valorisation_Position
 
        Next j
 
 
        Performance(i, 2) = Valorisation_Position 
        Performance(i, 1) = Spot         
Next i
    Range("A1:B1000").Value = Performance
End Sub
Function Deter_Strike(S, K, R, Sigma, T, proportion_garde)
    epsilon = 1E-15
    Do
        d1 = (Log(S / K) + (R + 0.5 * Sigma ^ 2) * T) / (Sigma * Sqr(T))
        d2 = d1 - Sigma * Sqr(T)
        K = (-proportion_garde * (S + BS_STD("Put", S, K, R, Sigma, T)) + K * proportion_garde * Exp(-R * T) * Nd(-d2)) / _
        (proportion_garde * Exp(-R * T) * Nd(-d2) - 1)
        erreur = proportion_garde * (S + BS_STD("Put", S, K, R, Sigma, T)) - K
    Loop Until Abs(erreur) < epsilon
    Deter_Strike = K
End Function
Function Taux_Rentabilite_Action(Mu, Sigma, dT)
    epsilon = WorksheetFunction.NormSInv(Rnd)
    Taux_Rentabilite_Action = (Mu - Sigma ^ 2 / 2) * dT + Sigma * epsilon * Sqr(dT)
End Function
Function Proportion_Actions(Spot, Strike, rf, Sigma, Echeance)
    d1 = (Log(Spot / Strike) + (rf + Sigma ^ 2 / 2) * Echeance) / (Sigma * Sqr(Echeance))
    d2 = d1 - Sigma * Sqr(Echeance)
    Proportion_Actions = Spot * Nd(d1) / (Spot * Nd(d1) + Strike * Exp(-rf * Echeance) * Nd(-d2))
End Function
Function BS_STD(TypeOption, S, K, R, Sigma, T)
    d1 = (Log(S / K) + (R + 0.5 * Sigma ^ 2) * T) / _
    (Sigma * Sqr(T))
    d2 = d1 - Sigma * Sqr(T)
    Z = Switch(TypeOption)
    BS_STD = Z * (S * Nd(Z * d1) - K * Exp(-R * T) * Nd(Z * d2))
End Function
Function Nd(d)
    Nd = WorksheetFunction.NormSDist(d)
End Function
Function Switch(TypeOption)
    TypeOption = UCase(TypeOption)
    If TypeOption = "C" Or TypeOption = "CALL" Then
        Switch = 1
    Else
        Switch = -1
    End If
End Function
 

kennedyisback

XLDnaute Nouveau
Bonjour,
Veuillez m'excuser, je ne savais pas qu'il existait quelconque "régle" sur la chose, ni même que cela comportait un nom. Je vous avoue etre tellement "désespérée" par ce projet VBA pour lequel je suis totalement perdue et pour lequel je ressens le besoin, plus que de l'effectuer, d'en comprendre le fonctionnement que j'ai publié ce message dans une autre discussion étant donné que le sujet n'était maintenant plus les moyennes mobiles mais bel et bien la stratégie d'assurance ..
Je comprend cependant votre point de vue, et vous remercie encore une fois pour l'aide que vous avez pu m'apporter precedement !
 

Staple1600

XLDnaute Barbatruc
Bonsoir le fil, le forum

=>JFK
Petite précision
En général, en cas de multipostage, il est apprécié de celui-ci soit signalé par un lien
Pourquoi?
Imaginons une question est postée sur un forum A
Quelques réponses sont i sont alors apportées.
Puis la même question est repostée sur un forum B
(sans que l'on sache qu'elle est déjà sur un forum A)
Les membres du forum B commencent à cogiter sur la question (alors que peut-être que sur le forum A, la question a déjà été solutionnée)
Donc savoir que la question est multi-postée permet:
1) d'éviter de perdre du temps à résoudre une question déjà résolue.
2) de poster une réponse quasi-similaire (en l'ignorant) sur les forums A et B
3) aux membres du forum B de découvrir le forum A (et vice versa)
 

kennedyisback

XLDnaute Nouveau
Il est vrai que je n'avais absolument pas réfléchie a cela, je suis maintenant au courant de la chose et ferrais donc à l'avenir attention . Merci beaucoup ! (au passage, sauriez vous ce que signifie le " la méthode resize de l'objet range a échoué" dans un code que vous m'aviez proposé qui était le suivant "
DL = Cells(Rows.Count, 1).End(xlUp).Row
Columns(7).Delete '<- ligne à supprimer aprés le test
With Range("G1")
.Value = "Taux de rentabilité": .Interior.Color = 55: .Font.Bold = -1: .Font.Color = 255
End With
'formule
Range("G2").Resize(DL - 1) = "=ln((R[1]C2+RC3)/RC2)" "
Je vous remercie (promis, cette question ne sera posé que sur cette conversation .. ahahaha)
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…