Saturday, 11 February 2017

Déménagement Moyen Code Vba

Je veux calculer une moyenne mobile des derniers, disons 20, nombres d'une colonne. Un problème est que certaines des cellules de la colonne peuvent être vides, ils doivent être ignorés. Exemple: Une moyenne mobile des trois derniers serait (155167201) 3. Ive a essayé de mettre en œuvre ceci en utilisant la moyenne, décalage, index, mais je ne sais pas comment. Im un peu familier avec les macros, donc une telle solution fonctionnerait bien: MovingAverage (A13) Merci pour tous les conseils ou solutions demandées Mar 12 11 à 15:36 Entrez ceci avec controlshiftenter pour en faire une formule de tableau. Cela va trouver les trois dernières valeurs. Si vous voulez plus ou moins, modifiez les deux instances de 3 dans la formule à ce que vous voulez. Cette partie renvoie le 4e rang le plus élevé de toutes les cellules ayant une valeur ou 5 dans votre exemple car les rangées 6, 8 et 9 sont la 1ère à la 3ème lignes les plus élevées avec une valeur. Cette partie renvoie 9 TRUEs ou FALSEs selon que le numéro de ligne est plus grand que le 4ème plus grand. Cela multiplie les valeurs dans A1: A9 par ces 9 TRUE ou FALSE. TRUEs sont convertis en 1 et FALSEs en zéro. Cela laisse une fonction SUM comme ceci Parce que toutes les valeurs au-dessus de 155 ne satisfont pas le critère de numéro de ligne, le get multiplié par zéro. J'ai écrit un petit script dans VBA. Hopefull il fait ce que vous voulez. Ici vous êtes: 1) J'ai mis la limite à 360 cellules. Cela signifie que le script ne recherchera pas plus de 360 ​​cellules. Si vous souhaitez le modifier, modifiez la valeur initiale du compteur. 2) Le script ne retourne pas la moyenne arrondi. Modifiez la dernière ligne sur MovingAverage Round (CDbl (tmp i), 2) 3) L'utilisation est comme vous le vouliez, alors tapez simplement MovingAverage (a13) dans la cellule. Tous les commentaires sont les bienvenus. Voici un code qui devrait être utile pour ceux qui utilisent l'analyse technique dans le commerce et que vous souhaitez tester des stratégies dans Excel. Il calcule la moyenne mobile simple, linéairement pondérée et exponentielle. En outre, je vais présenter et expliquer les étapes pour créer le formulaire et le code VBA. Insérer un UserForm 8211 Nom: MAForm Ajouter quatre étiquettes à partir des contrôles de boîte à outils 8211 Légendes selon l'écran d'impression ci-dessus Ajoutez une zone de liste déroulante pour la sélection du type de moyenne mobile. Il a été nommé comboTypeMA Ajoutez deux contrôles RefEdit pour la plage d'entrée et la plage de sortie. Ajouter une zone de texte pour sélectionner la période de la moyenne mobile Ajoutez deux boutons: Nom: boutonSoumettre, Légende: Envoyer et Nom: boutonCancel, Légende: Annuler Pour générer la liste déroulante pour la sélection du type MA et charger le formulaire utilisateur, un nouveau module Sera inséré avec le code ci-dessous. Les éléments ComboBox doivent être remplis par des types de moyennes mobiles et le formulaire utilisateur sera chargé. Option Explicit Sub loadMAForm () Avec MAFormboTypeMA. RowSource. AddItem Simple. AddItem Pondéré. AddItem Exponential End avec MAForm. Show End Sub Ci-dessous se trouve le code attribué au bouton Submit. Private Sub buttonSubmitClick () Dim inputRange, outputRange As Range L'inputRange contiendra la série de prix utilisée pour calculer les MAs et le outputRange sera rempli avec les valeurs des moyennes mobiles. Dim inputPeriod As Integer La période de moyenne mobile est déclarée. Dim inputAddress, outputAddress As String Les plages d'entrée et de sortie sont déclarées comme chaîne. Si comboTypeMA. Value ltgt Exponential Et comboTypeMA. Value ltgt Simple et comboTypeMA. Value ltgt Pondéré True Then MsgBox Veuillez sélectionner un type de moyenne mobile dans la liste. RefInputRange. SetFocus Exit Sub Cette partie de la procédure applique les premières restrictions concernant les données soumises. Si le type de moyenne mobile n'est pas contenu dans la liste déroulante, la procédure ne passera pas à l'étape suivante et l'utilisateur sera invité à le sélectionner à nouveau. ElseIf RefInputRange. ValueThen MsgBox Veuillez sélectionner la plage d'entrée. RefInputRange. SetFocus Exit Sub ElseIf RefOutputRange. ValueThen MsgBox Veuillez sélectionner la plage de sortie. RefOutputRange. SetFocus Exit Sub ElseIf RefInputPeriod. ValueThen MsgBox Veuillez sélectionner la période de la moyenne mobile. RefInputPeriod. SetFocus Exit Sub ElseIf Not IsNumeric (RefInputPeriod. Value) Then MsgBox La période moyenne mobile doit être un nombre. RefInputPeriod. SetFocus Exit Sub End Si d'autres restrictions sont créées. La plage d'entrée, la plage de sortie et la période d'entrée ne doivent pas être vides. En outre, la période moyenne mobile doit être un nombre. InputAddress RefInputRange. Value Définit inputRange Range (inputAddress) outputAddress RefOutputRange. Value Définit outputRange Range (outputAddress) inputPeriod RefInputPeriod. Value Les arguments pour inputRange et outputRange seront inputAddress et outputAddress comme chaînes. Si inputRange. Columns. Count ltgt 1 Puis MsgBox La plage d'entrée ne peut avoir qu'une seule colonne. RefInputRange. SetFocus Exit Sub L'entrée input doit contenir une seule colonne. ElseIf inputRange. Rows. Count ltgt outputRange. Rows. Count Then MsgBox La plage de sortie a un nombre de lignes différent de celui de la plage d'entrée. RefInputRange. SetFocus Exit Sub End If L'entréeRange et outputRange doivent avoir un nombre égal de lignes. Dim RowCount As Entier RowCount inputRange. Rows. Count Dim cRow As Entier ReDim inputarray (1 To RowCount) Pour cRow 1 Pour RowCount inputarray (cRow) inputRange. Cells (cRow, 1).Value Suivant cRow inputarray est déclaré comme un tableau et it8217s éléments Correspondent aux valeurs de chaque ligne de la plage d'entrée. Si inputPeriod gt RowCount Then MsgBox Nombre d'observations sélectionnées est amp amp RowCount et la période est amp amp inputPeriod. La plage d'entrée doit avoir une quantité d'éléments supérieure ou égale à la période sélectionnée. RefInputRange. SetFocus Exit Sub End If Une autre restriction est ajoutée 8211 La plage d'entrée doit avoir une quantité d'éléments supérieure ou égale à la période. Si inputPeriod lt 0 Then MsgBox La période moyenne mobile doit être supérieure à 0. RefInputPeriod. SetFocus Exit Sub End If La période de la moyenne mobile doit être supérieure à zéro. ReDim outputarray (inputPeriod To RowCount) As Variant Aussi les dimensions du tableau de outputarray sont déterminées. La limite inférieure du tableau est la valeur inputPeriod et la limite supérieure est la valeur de RowCount (le nombre d'éléments dans l'inputRange). Au-dessous de la partie de la procédure a calculé la moyenne mobile simple, si la sélection pour comboTypeMA est simple. SMA ----------------------------------------- Si comboTypeMA. Value Simple Then Dim i , J As Integer Dim temp As Double Pour i inputPeriod To RowCount temp 0 Pour j (i - (inputPeriod - 1)) To i temp temp inputarray (j) Suivant j outputarray (i) temp inputPeriod outputRange. Cells (i, 1).Value outputarray (i) Suivant i outputRange. Cells (0, 1).Value SMA (amp inputPeriod amp) En principe, la procédure calcule la moyenne mobile des derniers x numéros (x égale à la valeur inputPeriod), en commençant par l'élément de Le paramètre inputarray est égal à inputPeriod. Voici un exemple simplifié, qui montre chaque étape de la procédure. Dans cet exemple, il y a quatre nombres (no01, no02, no03 et no04) de la rangée 1 à la ligne 4 et la moyenne mobile est 3. Après chaque nouvelle moyenne mobile, chaque cellule de la sortieRange prend la valeur de la valeur Outputarray. Et après toutes les moyennes mobiles sont calculées, dans la cellule au-dessus de outputRange un titre sera inséré contenant le type de moyenne mobile et la période. Cette partie suivante calculera la moyenne mobile exponentielle. EMA ------------------------------------------ ElseIf comboTypeMA. Value Exponential Then Dim Alpha As Double alpha 2 (inputPeriod 1) Pour j 1 Pour inputPeriod temp temp inputarray (j) Suivant j outputarray (inputPeriod) temp inputPeriod La valeur de alpha est d'abord déterminée. Parce que dans le calcul, la valeur de l'EMA est basée sur l'EMA précédente, la première sera la moyenne mobile simple. Pour i inputPeriod 1 Pour RowCount outputarray (i) outputarray (i - 1) alpha (inputarray (i) - outputarray (i - 1)) Suivant i À partir de la seconde moyenne mobile, ils seront calculés en fonction de la formule ci - EMA précédente plus alpha multiplié par la différence entre le nombre courant de l'arête d'entrée et la valeur EMA précédente. Pour i inputPeriod Pour RowCount outputRange. Cells (i, 1).Value outputarray (i) Suivant i outputRange. Cells (0, 1).Value EMA (amp inputPeriod amp) Tout comme le code pour SMA, le tableau de sortie sera rempli et La cellule au-dessus du tableau de sortie représente le type et la période de la moyenne mobile. Ci-dessous est le code pour calculer la moyenne mobile pondérée. WMA ------------------------------------------ ElseIf comboTypeMA. Value pondéré puis Dim Temp2 As Entier Pour i inputPeriod Pour RowCount temp 0 temp2 0 Pour j (i - (inputPeriod - 1)) Pour i temp temp inputarray (j) (j - i entréePeriod) temp2 temp2 (j - i inputPeriod) Suivant j outputarray ) (1, 1).Value WMA (amp inputPeriod amp) End If Le tableau ci-dessous contient les étapes pour calculer chaque variable utilisée pour le paramètre WMA. Tout comme dans l'exemple précédent, dans celui-ci il ya pour les nombres dans l'inputRange. Et la période d'entrée est 3. Ci-dessous est le code final de la procédure, qui décharge le formulaire utilisateur. Décharger MAForm End Sub La procédure ci-dessous est pour le bouton Annuler. Il sera ajouté dans le même module. Private Sub buttonCancelClick () Décharger MAForm End Sub, where2 (1 n) L'indice t est utilisé pour désigner le temps, par exemple. T-1 se réfère à la période avant t et n, à préciser par l'utilisateur, se réfère à la période moyenne de l'EMA. Par exemple, l'équivalent EMA d'une moyenne mobile simple de 3 périodes a n de 3. Plus grande est la valeur de n, plus petite devient. Il en résulte un plus grand (1) et le plus de EMA t-1 est retenu dans EMA t. La première valeur de l'EMA dans une série chronologique peut être supposée être une simple moyenne mobile de n jours de prix. Certains utilisateurs peuvent également préférer commencer la toute première valeur de l'EMA à partir de la deuxième période où EMA sur la période 2x Période 2 Prix (1 8211) x Période 1 Prix. Les utilisateurs doivent comprendre que la moyenne mobile exponentielle est en fait une expansion en série infinie où les prix antérieurs ont un poids de plus en plus faible sur EMA t. Considérez ce qui suit: Cela se traduit par l'EMA étant plus sensible et moins volatile que son équivalent moyen mobile simple. Une discussion plus détaillée de ceci peut être trouvée dans mon article sur les filtres dans la finance et l'analyse technique. La méthode A utilise des fonctions, alors que la méthode B utilise des sous-procédures pour calculer le CMF. La méthode B est plus rapide et plus souple. Collez ce code dans votre fenêtre de code ThisWorkBook dans VBA. Cliquez avec le bouton droit sur ce classeur dans l'Explorateur de projets et cliquez sur Afficher le code. Private Sub WorkbookOpen () Le reste appartient à n'importe quel module Indique à Excel de les inclure dans la liste des fonctions, d'y ajouter des descriptions et de créer une nouvelle catégorie appelée Indicateurs techniques. Macro Application. MacroOptions: EMA, Description: Renvoie la moyenne mobile exponentielle. Amp Chr (10) amp Chr (10) amp Sélectionnez les dernières périodes EMA ou le prix des dernières périodes si la période courante est la première. Amp Chr (10) amp Chr (10) amp Suivi par prix courant et n. Le facteur de décroissance de la moyenne mobile exponentielle est calculé comme étant alpha2 (n1), fonction publique EMA (EMAYestdayday, price, n) EMA alpha prix (1 - alpha) EMAYesterday Une fois que vous avez terminé avec ce qui précède, vous pouvez calculer exponentielle moyenne mobile en tapant dans n'importe quelle cellule EMA (Last Period EMA, Current Price, n). Entrez le prix de la dernière période comme EMA de la dernière période si vous calculez la première EMA de votre jeu de données. Pour exécuter la méthode B, vous devez copier le sous Runthis de la page sur la ligne AccumulationDistribution dans votre module. Vous devez également exécuter EMA à partir du sous Runthis. Ajoutez la ligne suivante au sous Runthis Placez-le juste avant End Sub Et désactivez toutes les autres macros que Runthis appellera Ce sous va commencer à calculer EMA à partir de t2 en avant Sub EMA (close1 As Range, output As Plage, n As Long) close0 close1 1, 1). Adresse (Faux, Faux) close1a close1 (2, 1).Address (False, False) output1 output (1, 1).Address (False, False) (1 ampère n amp) amp 1 amp (1 ampère n) amp 1 (1 ampère n amp)) amp 1 sortie (2, 1).Value 2 Close0 Comme ce que vous venez de lire Digg ou Tipd it. L'objectif de Finance4Traders est d'aider les commerçants à se lancer en leur apportant des recherches et des idées impartiales. Depuis la fin de 2005, j'ai développé des stratégies de négociation sur une base personnelle. Pas tous ces modèles sont adaptés pour moi, mais d'autres investisseurs ou les commerçants pourraient les trouver utiles. Après tout, les gens ont des objectifs et des habitudes d'investissement différents. Ainsi, Finance4Traders devient une plate-forme pratique pour diffuser mon travail. (En savoir plus sur Finance4Traders) Veuillez utiliser ce site Web de manière appropriée et attentionnée. Cela signifie que vous devriez citer Finance4Traders en fournissant au moins un lien vers ce site si vous utilisez n'importe lequel de nos contenus. En outre, vous n'êtes pas autorisé à utiliser notre contenu de manière illégale. Vous devriez également comprendre que notre contenu est fourni sans garantie et que vous devez vérifier indépendamment notre contenu avant de s'en remettre à eux. Se référer à la politique de contenu du site et la politique de confidentialité lors de la visite de ce site. Une stratégie commerciale est très similaire à une stratégie d'entreprise. L'étude critique de vos ressources vous aidera à prendre des décisions plus efficaces. (Lire la suite) 8226 Comprendre les indicateurs techniques Les indicateurs techniques sont plus que des équations. Les indicateurs bien développés, lorsqu'ils sont appliqués scientifiquement, sont en fait des outils pour aider les traders à extraire des informations essentielles à partir de données financières. (Lire la suite) 8226 Pourquoi je préfère utiliser Excel Excel présente les données visuellement. Cela vous permet de mieux comprendre votre travail et de gagner du temps. (Continuer à lire)


No comments:

Post a Comment