Skip to content
Nouveautés
  • Bourse & Prévisions #2: Description de la Stratégie [TUTO]
  • Bourse & Prévisions #1: Introduction [TUTO]
  • Bourse & Matlab #14: La Corrélation de A à Z – Partie 1/2
  • Bourse & Matlab #13: Comprendre le Prix – Modèle Simplifié – Partie 2/2
  • Bourse & Matlab #12: Comprendre le Prix – Modèle Simplifié – Partie 1/2
Ingénierie & Bourse

La Bourse en Équation & Trading Algorithmique

  • DÉBUTER EN BOURSE
    • Cours | PDF
    • BOURSE & MATLAB
    • PRÉVISIONS BOURSE
    • TRADING ALGORITHMIQUE
  • BOUTIQUE
    • ALGORITHMES
    • OUTILS DE TRADING
    • INDICATEURS BOURSIERS
  • Mon Compte
    • Connexion
    • Déconnexion
    • S’inscrire
  • Calendrier éco
  • TRACKING RECORD
  • Nos Missions
  • fr Français▼
    X
    am አማርኛar العربيةhy Հայերենaz Azərbaycan dilieu Euskarabe Беларуская моваbn বাংলাbs Bosanskibg Българскиca Catalàzh-CN 简体中文zh-TW 繁體中文co Corsucs Čeština‎da Dansknl Nederlandsen Englisheo Esperantotl Filipinofi Suomifr Françaisfy Fryskka ქართულიde Deutschel Ελληνικάgu ગુજરાતીha Harshen Hausahaw Ōlelo Hawaiʻiiw עִבְרִיתhmn Hmonghu Magyaris Íslenskaid Bahasa Indonesiait Italianoja 日本語jw Basa Jawakn ಕನ್ನಡkk Қазақ тіліkm ភាសាខ្មែរko 한국어ku كوردی‎ky Кыргызчаlo ພາສາລາວlv Latviešu valodalt Lietuvių kalbamk Македонски јазикmg Malagasyms Bahasa Melayuml മലയാളംmi Te Reo Māorimr मराठीmn Монголmy ဗမာစာne नेपालीfa فارسیpt Portuguêspa ਪੰਜਾਬੀro Românăru Русскийsm Samoangd Gàidhligsn Shonasd سنڌيsi සිංහලsk Slovenčinasl Slovenščinaso Afsoomaalies Españolsu Basa Sundasw Kiswahilisv Svenskatg Тоҷикӣta தமிழ்te తెలుగుtr Türkçeuk Українськаur اردوuz O‘zbekchavi Tiếng Việtyi יידישyo Yorùbázu Zulu
Ingénierie & Bourse

La Bourse en Équation & Trading Algorithmique

  • DÉBUTER EN BOURSE
    • Cours | PDF
    • BOURSE & MATLAB
    • PRÉVISIONS BOURSE
    • TRADING ALGORITHMIQUE
  • BOUTIQUE
    • ALGORITHMES
    • OUTILS DE TRADING
    • INDICATEURS BOURSIERS
  • Mon Compte
    • Connexion
    • Déconnexion
    • S’inscrire
  • Calendrier éco
  • TRACKING RECORD
  • Nos Missions
  • fr Français▼
    X
    am አማርኛar العربيةhy Հայերենaz Azərbaycan dilieu Euskarabe Беларуская моваbn বাংলাbs Bosanskibg Българскиca Catalàzh-CN 简体中文zh-TW 繁體中文co Corsucs Čeština‎da Dansknl Nederlandsen Englisheo Esperantotl Filipinofi Suomifr Françaisfy Fryskka ქართულიde Deutschel Ελληνικάgu ગુજરાતીha Harshen Hausahaw Ōlelo Hawaiʻiiw עִבְרִיתhmn Hmonghu Magyaris Íslenskaid Bahasa Indonesiait Italianoja 日本語jw Basa Jawakn ಕನ್ನಡkk Қазақ тіліkm ភាសាខ្មែរko 한국어ku كوردی‎ky Кыргызчаlo ພາສາລາວlv Latviešu valodalt Lietuvių kalbamk Македонски јазикmg Malagasyms Bahasa Melayuml മലയാളംmi Te Reo Māorimr मराठीmn Монголmy ဗမာစာne नेपालीfa فارسیpt Portuguêspa ਪੰਜਾਬੀro Românăru Русскийsm Samoangd Gàidhligsn Shonasd سنڌيsi සිංහලsk Slovenčinasl Slovenščinaso Afsoomaalies Españolsu Basa Sundasw Kiswahilisv Svenskatg Тоҷикӣta தமிழ்te తెలుగుtr Türkçeuk Українськаur اردوuz O‘zbekchavi Tiếng Việtyi יידישyo Yorùbázu Zulu
Ingénierie & Bourse

La Bourse en Équation & Trading Algorithmique

Ingénierie et matlab - Introduction

Bourse & Matlab #1: Introduction

  • IngB
  • 5 septembre 2021
  • Un commentaire sur Bourse & Matlab #1: Introduction
N'hésitez pas de consulter notre chaîne youtube "INGÉNIERIE et BOURSE" pour profiter des cours et tutos gratuis!

Objectifs du tutoriel

  • Savoir l’importance de Matlab
  • Savoir récupérer les données des marchés financiers manuellement
  • Savoir automatiser l’importation des données avec Matlab
  • Savoir corriger les données corrompues avec Matlab
  • Etc.

Pourquoi Matlab ?

  • Matlab est un outil de développement basé sur un langage interprété contrairement aux langages C/C++, etc. Il est optimisé pour effectuer des traitements sur les tableaux et les matrices facilement. D’où sont utilisation car les données financiers sont se forent d’une multitude des tableaux (ou séries temporelles).
  • Facilité d’utilisation et disponibilités du code open source
  • Temps de développement réduit : Il est primordial de savoir tester sa stratégie, développer un nouveau indicateur, analyser le marché, etc. rapidement avant d’engager dans une démarche réelle dans une plateforme réelle. En effet, la plupart des formes sont compatibles avec le C/C++. Des langages qui nécessitent un temps de développement important sans garantie de résultats.

On utilisera dans la suite Matlab pour  l’analyse déférée des marchés ou pour développer une stratégie long terme, ainsi pour tester rapidement les stratégies court termes comme le trading. Matlab est un bon outil d’analyse, mais n’est pas optimisé pour les stratégies temps réel.

Comment récupérer les données des marchés avec Matlab ?

La première étape pour son analyse consiste à récupérer un échantillon représentatif des donnés du marché à analyser (action, indice, devise, crypto-monnaie, matière premier, etc.). Un historique de plusieurs années ou une dizaine d’années peut être suffisant. La bonne nouvelle, Matlab dispose d’un API qui permet de se connecter à la base de données (BD) Yahoo pour en extraire les données du titre cible. Il faut juste  spécifier le symbole du titre (le nom du titre dans la DB Yahoo), la plage d’extraction (date de début et de fin), ainsi la  le time-frame (période de stockage des échantillons dans la BD) des données. La mauvaise nouvelle, la période est limitée à une journée ! Autrement dit, on ne peut pas détecter le comportement du marché au-delà d’une journée (voir le tuto pour plus de détails).  Ci-dessous un extrait du code pour spécifier les paramètres de l’extraction.

Définition des paramètres

Titre='DAX';            % Symbole du Titre
Start='Jan-03-2005';    % Date de début
Stop=datestr(now,1);    % Date de fin (Actuelle) ou bien "Mois-Jour-Année"
[nn, mm] = month(Stop);
Stop=strcat(mm,'-',num2str(day(Stop)),'-',num2str(year(Stop)));

Exemple

% Start='Jan-01-2012';
% Stop='Jun-01-2021';
% Titre='KO';

Lecture des données

La function getData() permet de récupérer les données de la VB Yahoo. Elle prend en entrée le symbole du titre (string), la date de début (string) et la date de fin (string). Elle retourne une variable Data  au format double de taille Nx5 (5 tableaux de taille N). N étant le nombre d’échantillons. Ci-dessous la signification des tableaux :

  • Data( :,1) :  Prix d’ouverture de la journée
  • Data( :,2)  :  Prix le plus haut de la journée
  • Data( :,3)  :  Prix le plus faible de la journée
  • Data( :,4)  :  Prix de fermeture
  • Data( :,5)  :  Prix de fermeture ajustée

Définition de la fonction getData()

function Data = getData(Titre,Start,Stop)


% Date      = dataArray{:, 1};
% DateTime  = datetime(Date, 'InputFormat', 'yyyy-MM-dd');
% Open      = dataArray{:, 2};
% High      = dataArray{:, 3};
% Low       = dataArray{:, 4};
% Close     = dataArray{:, 5};
% AdjClose  = dataArray{:, 6};

yahooLink='https://query1.finance.yahoo.com/v7/finance/download/';

% Veuillez spécifier le lien de téléchargement!
fileFolder= 'C:\Users\a-replacer\Downloads';
filename = [fileFolder,'\',Titre,'.csv'];

while 1
    if ~(exist(filename, 'file') == 2)
        getYahoo(yahooLink, Start,  Stop, Titre);
        pause(10); % Attendre le téléchargement du fichier (Quelques secondes)
    end
    if ~(exist(filename, 'file') == 2)
        continue;
    else
        break;
    end
end;
Data = getDataYahoo(filename);
Data=Data(:,2:6);


end

La fonction getYahoo()

La fonction getYahoo() est appelé par la fonction getData(). Elle permet de lancer un lien et récupérer un fichier CSV de la BD Yahoo. La fonction nécessite le Navigator Microsoft Egde pour fonctionner correctement. Ci-dessous la définition de la fonction.

function getYahoo( yahooLink, Start,  Stop, Titre)


% Start='Jan-01-2012';
% Stop='Jun-01-2021';
% Titre='KO';


start_datenum = (datenum(Start) - datenum('Jan-01-1970')) * 86400;
startDateStr = num2str(start_datenum);

end_datenum = (datenum(Stop) - datenum('Jan-01-1970')) * 86400; % 86400=60*60*24 (1 journée)
endDateStr = num2str (end_datenum);


link=[yahooLink,Titre...
    ,'?period1=',startDateStr,'&period2=',endDateStr,'&interval=1d&events=history&includeAdjustedClose=true'];
web(link,'-browser');


end

La fonction getDataYahoo()

Son rôle de la fonction est limitée à la lecture d’un fichier CSV est l’extraction des données. La fonction prend en entrée le nom du fichier, puis elle retourne 5  tableaux  au format double de taille Nx5.  La fonction est compatible uniquement avec les données Yahoo. La fonction est appelé par getYahoo().

function Data = getDataYahoo( filename )

%% Initialize variables.
delimiter = ',';
startRow = 2;

%% Read columns of data as strings:
% For more information, see the TEXTSCAN documentation.
formatSpec = '%s%s%s%s%s%s%s%[^\n\r]';

%% Open the text file.
fileID = fopen(filename,'r');

%% Read columns of data according to format string.
% This call is based on the structure of the file used to generate this
% code. If an error occurs for a different file, try regenerating the code
% from the Import Tool.
dataArray = textscan(fileID, formatSpec, 'Delimiter', delimiter, 'HeaderLines' ,startRow-1, 'ReturnOnError', false);

%% Close the text file.
fclose(fileID);

%% Convert the contents of columns containing numeric strings to numbers.
% Replace non-numeric strings with NaN.
raw = repmat({''},length(dataArray{1}),length(dataArray)-1);
for col=1:length(dataArray)-1
    raw(1:length(dataArray{col}),col) = dataArray{col};
end
numericData = NaN(size(dataArray{1},1),size(dataArray,2));

for col=[1,2,3,4,5,6,7]
    % Converts strings in the input cell array to numbers. Replaced non-numeric
    % strings with NaN.
    rawData = dataArray{col};
    for row=1:size(rawData, 1);
        % Create a regular expression to detect and remove non-numeric prefixes and
        % suffixes.
        regexstr = '(?<prefix>.*?)(?<numbers>([-]*(\d+[\,]*)+[\.]{0,1}\d*[eEdD]{0,1}[-+]*\d*[i]{0,1})|([-]*(\d+[\,]*)*[\.]{1,1}\d+[eEdD]{0,1}[-+]*\d*[i]{0,1}))(?<suffix>.*)';
        try
            result = regexp(rawData{row}, regexstr, 'names');
            numbers = result.numbers;
            
            % Detected commas in non-thousand locations.
            invalidThousandsSeparator = false;
            if any(numbers==',');
                thousandsRegExp = '^\d+?(\,\d{3})*\.{0,1}\d*$';
                if isempty(regexp(thousandsRegExp, ',', 'once'));
                    numbers = NaN;
                    invalidThousandsSeparator = true;
                end
            end
            % Convert numeric strings to numbers.
            if ~invalidThousandsSeparator;
                numbers = textscan(strrep(numbers, ',', ''), '%f');
                numericData(row, col) = numbers{1};
                raw{row, col} = numbers{1};
            end
        catch me
        end
    end
end


%% Replace non-numeric cells with NaN
R = cellfun(@(x) ~isnumeric(x) && ~islogical(x),raw); % Find non-numeric cells
raw(R) = {NaN}; % Replace non-numeric cells

%% Create output variable
KO4 = cell2mat(raw);
Data=double(KO4);
Data=Data(:,2:6);

%% Clear temporary variables
clearvars filename delimiter startRow formatSpec fileID dataArray ans raw col numericData rawData row regexstr result numbers invalidThousandsSeparator thousandsRegExp me R;

end

Comment corriger les données corrompues avec Matlab ?

Il se peut au moment de l’importation des données dans la BD Yahoo d’avoir des cases endommagée.  Ces dernières génèrent des erreurs au moment du traitement et analyses des données. Une étape de correction est nécessaire avant toute opération. L’idée consiste à dupliquer le contenu de la case précédente corrigée dans la case actuelle corrompue. Ci-dessous un extrait du code de correction.

[m,n]=size(Data);
for j=1:n
    if isnan(Data(1,j))
        Data(1,j)=0;
    end;
    for i=2:m
        if isnan(Data(i,j))
            Data(i,j)=Data(i-1,j);
        end;
    end;
end;

Exemple d’importation et affichage des données du CAC 40

Assurez-vous bien d’avoir déplacé les fonctions getData.m, getDataYahoo.m et getYahoo.m dans le dossier racine du script de test !

clc; close all; clear all;


%% Ingénierie & Bourse
%% https://ingenierie-bourse.fr


%% Titre à Analyser
Titre='^FCHI';          % Symbole du Titre (CAC 40)
Start='Jan-03-2005';    % Date de début
Stop=datestr(now,1);    % Date de fin (Actuelle) ou bien "Mois-Jour-Année"
[nn, mm] = month(Stop);
Stop=strcat(mm,'-',num2str(day(Stop)),'-',num2str(year(Stop)));

%% Lecture des données
Data = getData(Titre,Start,Stop);
t=linspace(year(Start),year(Stop),length(Data));

%% Correction des données
[m,n]=size(Data);
for j=1:n
    if isnan(Data(1,j))
        Data(1,j)=0;
    end;
    for i=2:m
        if isnan(Data(i,j))
            Data(i,j)=Data(i-1,j);
        end;
    end;
end;

%% Affichage
figure(1);
plot(t,Data, 'linewidth',3);grid on;xlim([t(1) t(end)]);
legend({'Open','High','Low','Close','AdjClose'},'fontsize',13,2); axis off;
title('CAC 40 entre Jan-03-2005 et Sep-5-2021','fontsize',15);

Données CAC 40

Navigation de l’article

Next Article

Bourse & Matlab #1: Introduction1 thought on “”

  • Ping : BOURSE & MATLAB #1: INTRODUCTION – Cours | Projets Divers

Laisser un commentaire Annuler la réponse

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

3 + 4 =

cours divers
COURS DIVERS
Stratégie de Prévisions en Bourse Introduction
BOURSE & PRÉVISIONS
Ingénierie et matlab - Introduction
BOURSE & MATLAB
  • Bourse & Prévisions #2: Description de la Stratégie [TUTO]
  • Bourse & Prévisions #1: Introduction [TUTO]
  • Bourse & Matlab #14: La Corrélation de A à Z – Partie 1/2
  • Bourse & Matlab #13: Comprendre le Prix – Modèle Simplifié – Partie 2/2
  • Bourse & Matlab #12: Comprendre le Prix – Modèle Simplifié – Partie 1/2

fr Français▼
X
am አማርኛar العربيةhy Հայերենaz Azərbaycan dilieu Euskarabe Беларуская моваbn বাংলাbs Bosanskibg Българскиca Catalàzh-CN 简体中文zh-TW 繁體中文co Corsucs Čeština‎da Dansknl Nederlandsen Englisheo Esperantotl Filipinofi Suomifr Françaisfy Fryskka ქართულიde Deutschel Ελληνικάgu ગુજરાતીha Harshen Hausahaw Ōlelo Hawaiʻiiw עִבְרִיתhmn Hmonghu Magyaris Íslenskaid Bahasa Indonesiait Italianoja 日本語jw Basa Jawakn ಕನ್ನಡkk Қазақ тіліkm ភាសាខ្មែរko 한국어ku كوردی‎ky Кыргызчаlo ພາສາລາວlv Latviešu valodalt Lietuvių kalbamk Македонски јазикmg Malagasyms Bahasa Melayuml മലയാളംmi Te Reo Māorimr मराठीmn Монголmy ဗမာစာne नेपालीfa فارسیpt Portuguêspa ਪੰਜਾਬੀro Românăru Русскийsm Samoangd Gàidhligsn Shonasd سنڌيsi සිංහලsk Slovenčinasl Slovenščinaso Afsoomaalies Españolsu Basa Sundasw Kiswahilisv Svenskatg Тоҷикӣta தமிழ்te తెలుగుtr Türkçeuk Українськаur اردوuz O‘zbekchavi Tiếng Việtyi יידישyo Yorùbázu Zulu

Nous contacter

Ingénierie & Bourse - La Bourse en Équation & Trading Algorithmique.