diff --git a/.gitignore b/.gitignore index b512c09d..e79903b0 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ -node_modules \ No newline at end of file +node_modules +theme diff --git a/README.md b/README.md index c34e8340..49f965dc 100644 --- a/README.md +++ b/README.md @@ -42,3 +42,25 @@ Nous organisons régulièrement des ateliers pour enseigner les bases du trading ## Projets en IA Nous travaillons également sur des projets qui utilisent l'intelligence artificielle pour améliorer les algorithmes de trading et pour analyser le marché financier. + +## Contribuer + +Pour ajouter +une page de blog, simplement rédiger un nouveau fichier markdown sous le repertoire source/blog avec les frontmatters suivant : + +```md +--- +title: Votre titre +page-name: "Le nom de votre page" +background-image-url: "images/blog/lien/vers/image.jpg" +facebook-link : +twitter-link : +linkedin-link : +tags : [ "tag1", "tag2", "tag3"] +author : Nom autheur +author-title : Capitaine +author-role : Rôle +author-img : images/team/team-X.png +date : 1 janvier 2024 +--- +``` diff --git a/gulpfile.js b/gulpfile.js index d3276d2e..b6d8e7a9 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -7,15 +7,21 @@ const fileinclude = require("gulp-file-include"); const autoprefixer = require("gulp-autoprefixer"); const bs = require("browser-sync").create(); const rimraf = require("rimraf"); -const comments = require("gulp-header-comment"); const plumber = require('gulp-plumber'); +const fs = require('fs'); +const tap = require('gulp-tap'); const through = require('through2'); +const frontMatter = require('gulp-front-matter'); +async function getMarkdown() { + const markdown = await import('gulp-markdown'); + return markdown.default; +} var path = { src: { html: "source/*.html", - blog: "source/blog/*.html", + blog: "source/blog/*.md", others: "source/*.+(php|ico|png)", htminc: "source/partials/**/*.htm", incdir: "source/partials/", @@ -30,25 +36,67 @@ var path = { }, }; -// HTML -gulp.task("html:build", function () { - return gulp - .src(path.src.html) - .pipe(plumber({ - errorHandler: function (err) { - console.error('Error in plugin "' + err.plugin + '": ' + err.message); - this.emit('end'); - } - })) +let blogItemsIncludes = ''; +// Blog +gulp.task("blog:build", async function () { + const markdown = await getMarkdown(); + return gulp.src(path.src.blog) + .pipe(plumber()) + .pipe(frontMatter()) + .pipe(markdown()) .pipe(through.obj(function (file, enc, cb) { this.push(file); cb(); }, function (cb) { if (this._transformState.writechunk) { - console.log('Processing file:', this._transformState.writechunk.relative); + console.log('Processing Markdown file:', this._transformState.writechunk.relative); } cb(); })) + .pipe(tap(function (file) { + // Read the template + const template = fs.readFileSync('source/blog/blog_template.html', 'utf8'); + + const frontMatterData = file.frontMatter; + const title = frontMatterData.title || 'Default Title'; + const pageName = frontMatterData['page-name'] || 'Default Page Name'; + const bgImageUrl = frontMatterData['background-image-url'] || 'default-image.jpg'; + const author = frontMatterData['author'] || 'AlgoÉTS'; + const authorTitle = frontMatterData['author-title'] || 'Club'; + const authorRole = frontMatterData['author-role'] || '.'; + const authorImg = frontMatterData['author-img'] || 'default-image.jpg'; + const facebookLink = frontMatterData['facebook-link'] || 'https://www.facebook.com/'; + const twitterLink = frontMatterData['twitter-link'] || 'https://twitter.com/'; + const linkedinLink = frontMatterData['linkedin-link'] || 'https://www.linkedin.com/'; + const date = frontMatterData['date']; + const tagsHtml = frontMatterData['tags'].map(tag => + `
Dans ce rapport, nous présentons une expérimentation des indicateurs techniques à - l'aide du projet BatchBacktesting disponible sur GitHub à l'adresse suivante :
- -
-
-!pip install numpy httpx rich
-
-import pandas as pd
-import numpy as np
-from datetime import datetime
-import sys
-import os
-import httpx
-
-import concurrent.futures
-from datetime import datetime
-import glob
-import warnings
-from rich.progress import track
-warnings.filterwarnings("ignore")
-
-
-
-
- N'oubliez pas de remplacer les espaces réservés FMP_API_KEY et BINANCE_API_KEY par - vos véritables clés API pour pouvoir accéder aux données des services respectifs. -
- -
-
-BASE_URL_FMP = "https://financialmodelingprep.com/api/v3"
-BASE_URL_BINANCE = "https://fapi.binance.com/fapi/v1/"
-FMP_API_KEY = ""
-BINANCE_API_KEY = ""
-
-
-
- Plusieurs fonctions pour effectuer des requêtes API et fournit une liste de - cryptomonnaies prises en charge.
- -Ce script propose des fonctions pour :
- -
-
-def make_api_request(api_endpoint, params):
- with httpx.Client() as client:
- # Make the GET request to the API
- response = client.get(api_endpoint, params=params)
- if response.status_code == 200:
- return response.json()
- print("Error: Failed to retrieve data from API")
- return None
-
-
-
- - La fonction make_api_request() effectue une requête GET vers l'API et renvoie les - données au format JSON si la requête est réussie. Sinon, elle renvoie None. -
- -
-
-def get_historical_price_full_crypto(symbol):
- api_endpoint = f"{BASE_URL_FMP}/historical-price-full/crypto/{symbol}"
- params = {"apikey": FMP_API_KEY}
- return make_api_request(api_endpoint, params)
-
-
-def get_historical_price_full_stock(symbol):
- api_endpoint = f"{BASE_URL_FMP}/historical-price-full/{symbol}"
- params = {"apikey": FMP_API_KEY}
-
- return make_api_request(api_endpoint, params)
-
-def get_SP500():
- api_endpoint = "https://en.wikipedia.org/wiki/List_of_S%26P_500_companies"
- data = pd.read_html(api_endpoint)
- return list(data[0]['Symbol'])
-
-
-def get_all_crypto():
- """
- All possible crypto symbols
- """
- return [
- "BTCUSD",
- "ETHUSD",
- "LTCUSD",
- "BCHUSD",
- "XRPUSD",
- "EOSUSD",
- "XLMUSD",
- "TRXUSD",
- "ETCUSD",
- "DASHUSD",
- "ZECUSD",
- "XTZUSD",
- "XMRUSD",
- "ADAUSD",
- "NEOUSD",
- "XEMUSD",
- "VETUSD",
- "DOGEUSD",
- "OMGUSD",
- "ZRXUSD",
- "BATUSD"
- "USDTUSD",
- "LINKUSD",
- "BTTUSD",
- "BNBUSD",
- "ONTUSD",
- "QTUMUSD",
- "ALGOUSD",
- "ZILUSD",
- "ICXUSD",
- "KNCUSD",
- "ZENUSD",
- "THETAUSD",
- "IOSTUSD",
- "ATOMUSD",
- "MKRUSD",
- "COMPUSD",
- "YFIUSD",
- "SUSHIUSD",
- "SNXUSD",
- "UMAUSD",
- "BALUSD",
- "AAVEUSD",
- "UNIUSD",
- "RENBTCUSD",
- "RENUSD",
- "CRVUSD",
- "SXPUSD",
- "KSMUSD",
- "OXTUSD",
- "DGBUSD",
- "LRCUSD",
- "WAVESUSD",
- "NMRUSD",
- "STORJUSD",
- "KAVAUSD",
- "RLCUSD",
- "BANDUSD",
- "SCUSD",
- "ENJUSD",
- ]
-
-def get_financial_statements_lists():
- api_endpoint = f"{BASE_URL_FMP}/financial-statement-symbol-lists"
- params = {"apikey": FMP_API_KEY}
- return make_api_request(api_endpoint, params)
-
-def get_Vanguard_Canada():
- """
- Get Vanguard Canada companies
-
- Returns:
- dict: Dictionary containing the data
- """
- # VCN: Vanguard FTSE Canada All Cap Index ETF
- # VFV: Vanguard S&P 500 Index ETF
- # VUN: Vanguard US Total Market Index ETF
- # VEE: Vanguard FTSE Emerging Markets All Cap Index ETF
- # VAB: Vanguard Canadian Aggregate Bond Index ETF
- # VSB: Vanguard Canadian Short-Term Bond Index ETF
- # VXC: Vanguard FTSE Global All Cap ex Canada Index ETF
- # VIU: Vanguard FTSE Developed All Cap ex North America Index ETF
- # VGG: Vanguard US Dividend Appreciation Index ETF
- return ['VCN', 'VFV', 'VUN', 'VEE', 'VAB', 'VSB', 'VXC', 'VIU', 'VGG']
-
-
-
- - La fonction get_historical_price_full_crypto() effectue une requête API vers - l'API FMP pour obtenir les données historiques de prix pour une cryptomonnaie - spécifique. La fonction get_historical_price_full_stock() effectue une requête - API vers l'API FMP pour obtenir les données historiques de prix pour une action - spécifique. La fonction get_SP500() effectue une requête API vers Wikipedia pour - obtenir la liste des actions du S&P 500. La fonction get_all_crypto() renvoie la - liste de toutes les cryptomonnaies prises en charge. La fonction - get_financial_statements_lists() effectue une requête API vers l'API FMP pour - obtenir la liste des états financiers. La fonction get_Vanguard_Canada() renvoie - la liste des actions de Vanguard Canada. -
- -- Pour utiliser ce script dans votre projet, copiez simplement assurez-vous d'avoir - installé les bibliothèques requises mentionnées dans la section "Exigences" de la - documentation BatchBacktesting. Ensuite, vous pouvez importer les fonctions de ce - script dans votre script principal ou votre Jupyter Notebook pour accéder et - manipuler les données comme vous le souhaitez. -
- -- Une fois que vous avez les données, vous pouvez utiliser la bibliothèque - BatchBacktesting pour tester diverses stratégies sur les actions ou les - cryptomonnaies, analyser les résultats et visualiser les performances. À titre - d'exemple, nous avons utilisé la stratégie EMA (Exponential Moving Average) pour - effectuer des tests de performance sur les actions du S&P 500 et les cryptomonnaies - prises en charge. -
- -L'EMA est un indicateur technique qui est utilisé pour lisser l'action des prix en - filtrant le "bruit" des fluctuations de prix aléatoires à court terme. Il est - calculé en prenant le prix moyen d'un titre sur un nombre spécifique de périodes de - temps. L'EMA est un type de moyenne mobile qui accorde un poids et une signification - plus importants aux points de données les plus récents. La moyenne mobile - exponentielle est également appelée moyenne mobile pondérée exponentiellement. -
- -
-
-class EMA(Strategy):
- n1 = 20
- n2 = 80
- n3 = 150
-
- def init(self):
- close = self.data.Close
- self.ema20 = self.I(taPanda.ema, close.s, self.n1)
- self.ema80 = self.I(taPanda.ema, close.s, self.n2)
- self.ema150 = self.I(taPanda.ema, close.s, self.n3)
-
- def next(self):
- price = self.data.Close
- if crossover(self.ema20, self.ema80):
- self.position.close()
- self.buy(sl=0.90 * price, tp=1.25 * price)
-
- elif crossover(self.ema80, self.ema20):
- self.position.close()
- self.sell(sl=1.10 * price, tp=0.75 * price)
-
-
-
-
-
- - La stratégie EMA est implémentée dans la classe EMA. La stratégie EMA est une - stratégie de suivi de tendance qui utilise trois moyennes mobiles exponentielles - (EMA) avec des périodes de 20, 80 et 150. Lorsque la moyenne mobile exponentielle - à court terme (20) croise la moyenne mobile exponentielle à long terme (80) par - le haut, cela signifie que la tendance est à la hausse et que nous devrions - acheter. Lorsque la moyenne mobile exponentielle à court terme (20) croise la - moyenne mobile exponentielle à long terme (80) par le bas, cela signifie que la - tendance est à la baisse et que nous devrions vendre. -
- -
-
-def run_backtests_strategies(instruments, strategies):
- """
- Run backtests for a list of instruments using a specified strategy.
-
- Args:
- instruments (list): List of instruments to run backtests for
- strategies (list): List of strategies to run backtests for
-
- Returns:
- List of outputs from run_backtests()
-
- """
-
- # find strategies in the STRATEGIES
- strategies = [x for x in STRATEGIES if x.__name__ in strategies]
- outputs = []
- with concurrent.futures.ThreadPoolExecutor() as executor:
- futures = []
- for strategy in strategies:
- future = executor.submit(run_backtests, instruments, strategy, 4)
- futures.append(future)
-
- for future in concurrent.futures.as_completed(futures):
- outputs.extend(future.result())
-
- return outputs
-
-def check_crypto(instrument):
- """
- Check if the instrument is crypto or not
- """
- return instrument in get_all_crypto()
-
-def check_stock(instrument):
- """
- Check if the instrument is crypto or not
- """
- return instrument not in get_financial_statements_lists()
-
-
-def process_instrument(instrument, strategy):
- """
- Process a single instrument for a backtest using a specified strategy.
- Returns a Pandas dataframe of the backtest results.
- """
- try:
-
- if check_crypto(instrument):
- data = get_historical_price_full_crypto(instrument)
- else:
- data = get_historical_price_full_stock(instrument)
-
- if data is None or "historical" not in data:
- print(f"Error processing {instrument}: No data")
- return None
-
- data = clean_data(data)
-
- bt = Backtest(
- data, strategy=strategy, cash=100000, commission=0.002, exclusive_orders=True
- )
- output = bt.run()
- output = process_output(output, instrument, strategy)
- return output, bt
- except Exception as e:
- print(f"Error processing {instrument}: {str(e)}")
- return None
-
-def clean_data(data):
- """
- Clean historical price data for use in a backtest.
- Returns a Pandas dataframe of the cleaned data.
- """
- data = data["historical"]
- data = pd.DataFrame(data)
- data.columns = [x.title() for x in data.columns]
- data = data.drop(
- [
- "Adjclose",
- "Unadjustedvolume",
- "Change",
- "Changepercent",
- "Vwap",
- "Label",
- "Changeovertime",
- ],
- axis=1,
- )
- data["Date"] = pd.to_datetime(data["Date"])
- data.set_index("Date", inplace=True)
- data = data.iloc[::-1]
- return data
-
-
-def process_output(output, instrument, strategy, in_row=True):
- """
- Process backtest output data to include instrument name, strategy name,
- and parameters.
- Returns a Pandas dataframe of the processed output.
- """
- if in_row:
- output = pd.DataFrame(output).T
- output["Instrument"] = instrument
- output["Strategy"] = strategy.__name__
- output.pop("_strategy")
- return output
-
-
-def save_output(output, output_dir, instrument, start, end):
- """
- Save backtest output to file and generate chart if specified.
- """
- print(f"Saving output for {instrument}")
- fileNameOutput = f"{output_dir}/{instrument}-{start}-{end}.csv"
- output.to_csv(fileNameOutput)
-
-
-def plot_results(bt, output_dir, instrument, start, end):
- print(f"Saving chart for {instrument}")
- fileNameChart = f"{output_dir}/{instrument}-{start}-{end}.html"
- bt.plot(filename=fileNameChart, open_browser=False)
-
-def run_backtests(instruments, strategy, num_threads=4, generate_plots=False):
- """
- Run backtests for a list of instruments using a specified strategy.
- Returns a list of Pandas dataframes of the backtest results.
-
- Args:
- instruments (list): List of instruments to run backtests for
-
- Returns:
- List of Pandas dataframes of the backtest results
- """
- outputs = []
- output_dir = f"output/raw/{strategy.__name__}"
- output_dir_charts = f"output/charts/{strategy.__name__}"
- if not os.path.exists(output_dir):
- os.makedirs(output_dir)
- if not os.path.exists(output_dir_charts):
- os.makedirs(output_dir_charts)
- with concurrent.futures.ThreadPoolExecutor(max_workers=num_threads) as executor:
- future_to_instrument = {
- executor.submit(process_instrument, instrument, strategy): instrument
- for instrument in instruments
- }
- for future in concurrent.futures.as_completed(future_to_instrument):
- instrument = future_to_instrument[future]
- output = future.result()
- if output is not None:
- outputs.append(output[0])
- save_output(output[0], output_dir, instrument, output[0]["Start"].to_string().strip().split()[1], output[0]["End"].to_string().strip().split()[1])
- if generate_plots:
- plot_results(output[1], output_dir_charts, instrument, output[0]["Start"].to_string().strip().split()[1], output[0]["End"].to_string().strip().split()[1])
- data_frame = pd.concat(outputs)
- start = data_frame["Start"].to_string().strip().split()[1]
- end = data_frame["End"].to_string().strip().split()[1]
- fileNameOutput = f"output/{strategy.__name__}-{start}-{end}.csv"
- data_frame.to_csv(fileNameOutput)
-
-
- return data_frame
-
-
-
- - La fonction run_backtests_strategies() exécute des backtests pour une liste - d'instruments en utilisant une stratégie spécifique. La fonction - check_crypto() vérifie si l'instrument est une cryptomonnaie ou non. La fonction - check_stock() vérifie si l'instrument est une action ou non. La fonction - process_instrument() traite un seul instrument pour un backtest en utilisant une - stratégie spécifique. La fonction clean_data() nettoie les données historiques - des prix pour les utiliser dans un backtest. La fonction process_output() - traite les données de sortie du backtest pour inclure le nom de l'instrument, le - nom de la stratégie et les paramètres. La fonction save_output() enregistre la - sortie du backtest dans un fichier et génère un graphique si spécifié. La - fonction plot_results() enregistre la sortie du backtest dans un fichier et - génère un graphique si spécifié. La fonction run_backtests() exécute des - backtests pour une liste d'instruments en utilisant une stratégie spécifique. -
- -- Le script génère des graphiques pour chaque instrument testé, qui peuvent être - visualisés pour analyser les performances des stratégies appliquées. Les résultats - sont sauvegardés dans le répertoire output du projet BatchBacktesting. -
- -
-
-tickers = get_SP500()
-run_backtests(tickers, strategy=EMA, num_threads=12, generate_plots=True)
-ticker = get_all_crypto()
-run_backtests(ticker, strategy=EMA, num_threads=12, generate_plots=True)
-
-
-
- - Nous avons utilisé la stratégie EMA pour effectuer des tests de performance sur les - actions du S&P 500 et les cryptomonnaies prises en charge. Les résultats sont - sauvegardés dans le répertoire output du projet BatchBacktesting. -
- -- Le lien que vous avez partagé correspond au répertoire output du projet - BatchBacktesting sur GitHub : - https://github.com/AlgoETS/BatchBacktesting/tree/main/output. Cependant, il semble - que ce répertoire ne contient pas de résultats pré-calculés. En effet, il est - probable que les auteurs du projet aient choisi de ne pas inclure les résultats des - tests dans le dépôt GitHub afin d'éviter d'encombrer le dépôt avec des données - spécifiques à chaque utilisateur. -
- -- Pour obtenir des valeurs calculées pour vos propres tests, vous devrez exécuter le - script en local sur votre machine avec les paramètres et les stratégies de votre - choix. Après avoir exécuté le script, les résultats seront sauvegardés dans le - répertoire output de votre projet local. - - https://algoets.github.io/BatchBacktesting/output/charts/EMA/AAPL-2018-04-04-2023-04-03.html -
- -Top 5 des instruments avec le meilleur rendement :
- -Top 5 des instruments avec le plus faible rendement :
- -- En conclusion, le projet BatchBacktesting offre une approche flexible et puissante - pour tester et analyser les performances des indicateurs techniques sur les marchés - boursiers et les cryptomonnaies. Les fonctions fournies permettent une intégration - facile avec les API de services financiers et une manipulation aisée des données. - Les résultats des expérimentations peuvent être utilisés pour développer et affiner - des stratégies de trading algorithmique en fonction des performances observées -
- -Original -
Substack - -
Découvrez les tendances de la criminalité liée aux vols de voitures - à Montréal à travers les années. Cette étude examine les quartiers les plus touchés, - les variations saisonnières, et bien plus encore.
- -Un article dans le journal a particulièrement attiré mon attention de manière - inattendue, révélant une réalité alarmante : le taux de vols de voitures à Montréal - atteignait des sommets déconcertants. Cette révélation m’a laissé perplexe et - intrigué à la fois. Mon esprit curieux a été instantanément piqué, et j’ai ressenti - le besoin impérieux d’explorer ce phénomène de plus près, de le décortiquer et de - comprendre ses origines.
- -Dans cet article, je vais vous emmener avec moi dans cette aventure intrigante, alors - que nous plongeons dans l’univers des vols de voitures à Montréal. Nous allons - dévoiler les données, analyser les statistiques et tenter de démystifier cette - réalité complexe. Attachez-vous bien, car nous partons à la découverte de l’envers - du décor de la criminalité automobile à Montréal.
- -J’ai entrepris la collecte de données en récupérant un fichier CSV exhaustif - contenant toutes les infractions criminelles à Montréal, mis à disposition par la - ville. Mon objectif était de cibler spécifiquement les infractions de type “Vol de - véhicule à moteur”. À ma grande surprise, j’ai trouvé pas moins de 53 964 cas - enregistrés depuis l’année 2018.
- - - - Données des vols de véhicules à moteur à Montréal - -L’un des constats les plus préoccupants réside dans la tendance constante à la hausse - du vol de véhicules, qui semble résolument insensible à tout ralentissement, comme - en témoigne ce graphique éloquent :
- - - Graphique vols de véhicules à moteur par année --
Années | -Vols de véhicules | -
---|---|
2015 | -4418 | -
2016 | -4352 | -
2017 | -4732 | -
2018 | -4237 | -
2019 | -4170 | -
2020 | -4706 | -
2021 | -6440 | -
2022 | -9377 | -
2023 | -11262 | -
Ces chiffres révèlent une progression alarmante, suscitant des inquiétudes - croissantes.
- -De manière paradoxale, il s’avère que la majorité des vols de véhicules se produisent - en plein jour. En effet, 51% de ces vols ont lieu pendant la journée, lorsque tout - semble plus visible et évident. De plus, parmi les jours de la semaine, c’est le - mercredi qui détient le triste record du jour où les vols sont les plus fréquents : -
- -Journée | -Occurence | -
---|---|
Wednesday | -8519 | -
Monday | -8493 | -
Thursday | -8334 | -
Tuesday | -8303 | -
Friday | -7819 | -
Saturday | -6160 | -
Sunday | -6066 | -
Cette donnée surprenante met en évidence une réalité intrigante, où les vols de - véhicules semblent prospérer en plein jour, défiant ainsi les attentes - conventionnelles en matière de criminalité.
- -Voici une carte thermique (heatmap) des cinq endroits les plus fréquemment ciblés par - les voleurs à Montréal. Il est intéressant de noter que les hôtels et les centres - commerciaux sont devenus des cibles privilégiées.
- - - Carte thermique des vols de véhicules à Montréal -Loin sont les jours où un simple trousseau de clés métalliques ou une vitre brisée - suffisaient pour voler une voiture. Aujourd’hui, les voleurs ont évolué, devenant - plus rusés et équipés de technologies avancées.
- -Ils utilisent un dispositif sophistiqué pour amplifier le signal, pratiquant ce que - l’on appelle l’attaque par relais.
- -Dans ce type de vol, l’objectif des malfaiteurs est de tromper la voiture en lui - faisant croire que la clé se trouve à proximité immédiate du véhicule, même si en - réalité, la clé se trouve à plusieurs centaines de mètres de distance. Ils utilisent - un amplificateur de signal pour induire en erreur la voiture, lui faisant croire que - la clé est à l’intérieur du véhicule.
- -Voici une vidéo capturant un vol qui ne dure que quelques secondes.
- - - - Vol Voiture Technique du relai - -Le Port OBD est le port « On-Board Diagnostics » se trouvant généralement au-dessus - de la pédale. C’est une interface de communication pour les systèmes de surveillance - et de contrôle des véhicules. Il est également utilisé par les garages pour - identifier et résoudre les défauts. Problème : Malheureusement, toute personne ayant - accès à celui-ci (par exemple, un garage malveillant, un valet ou des employés de - lave-auto) peut abuser du Port OBD pour créer une copie du porte-clés électronique - de votre voiture ! Parfois, les voleurs utilisent la méthode du Port OBD en y - injectant un code malicieux permettant de changer des configurations pour arrêter le - système d’alarme et faire un clonage de la clé.
- - - - Port OBD - -L’explosion du nombre de vols de voitures a des conséquences directes sur les - propriétaires de véhicules, notamment une augmentation significative du coût de - l’assurance automobile. Certaines marques et modèles sont malheureusement devenus - les cibles privilégiées des voleurs. Voici le palmarès de 2022 :
- -Nº | -Marque/Modèle | -Année Modèle Volée le Plus Souvent | -Nombre de Véhicules Assurés | -Nombre de Vols | -Fréquence de Vol (%) | -Type | -
---|---|---|---|---|---|---|
1 | -Honda CR-V | -2020 | -115,895 | -2,689 | -2.3% | -SUV | -
2 | -Acura RDX | -2020 | -15,895 | -653 | -4.1% | -SUV | -
3 | -Honda Civic | -2019 | -224,688 | -506 | -0.2% | -Sedan | -
4 | -Dodge RAM 1500 Series | -2020 | -79,019 | -504 | -0.6% | -Truck | -
5 | -Jeep Wrangler | -2021 | -28,048 | -433 | -1.5% | -SUV | -
6 | -Toyota RAV 4 | -2019 | -124,357 | -425 | -0.3% | -SUV | -
7 | -Jeep Grand Cherokee | -2021 | -22,808 | -420 | -1.8% | -SUV | -
8 | -Toyota Highlander | -2021 | -17,386 | -344 | -2.0% | -SUV | -
9 | -Ford F150 Series | -2019 | -91,166 | -256 | -0.3% | -Truck | -
10 | -Hyundai Tucson | -2021 | -63,450 | -242 | -0.4% | -SUV | -
Il est important de noter qu’aucune méthode n’est infaillible, mais l’objectif - principal est de rendre la tâche des voleurs aussi difficile que possible, les - décourageant ainsi de s’attaquer à votre véhicule.
- -La première étape essentielle pour vous protéger consiste à verrouiller les portes de - votre véhicule et à fermer complètement les fenêtres. Ce geste simple peut - considérablement ralentir un voleur.
- -Pour protéger votre clé électronique (key FOB) contre les attaques par relais, vous - pouvez utiliser une boîte de Faraday. Cette boîte bloque le signal de la clé, - empêchant ainsi les voleurs d’amplifier son signal. Cette méthode constitue une - défense efficace contre les tentatives d’attaque par relais et est disponible à un - prix abordable, généralement autour de 25 $.
- -Amazon: $25 Boite de farraday
- -Les véhicules équipés de systèmes de démarrage sans clé (“push start”) ou d’entrée - sans clé (“keyless entry”) ne disposent pas de clé mécanique pour démarrer le - moteur. Ils utilisent des clés électroniques qui s’authentifient avec la voiture via - un échange de données (par des signaux radio pour les systèmes sans clé ou par - insertion dans le tableau de bord).
- -Ces véhicules conservent une copie numérique des clés dans l’unité de contrôle du - moteur du véhicule (ECU). Le problème réside dans le fait que ces clés numériques - peuvent être téléchargées par quiconque a accès au “PORT OBD” du véhicule, puis - utilisées pour programmer une clé vierge en moins de 60 secondes.
- -Cette clé duplicata est identique à l’originale, ce qui donne au voleur un accès - total pour OUVRIR, DÉMARRER et EMPORTER le véhicule à sa convenance, souvent des - jours, voire des semaines plus tard.
- -Pour vous protéger contre ce type d’attaque, vous pouvez envisager de bloquer, - modifier ou cacher votre port OBD. Il ne faut que quelques minutes pour rendre ces - véhicules inviolables.
- - - - Port OBD Lock -Cette technologie implique de placer plusieurs dispositifs sans fil dans des endroits - difficiles d’accès du véhicule. Chaque dispositif est autonome et émet un signal - avec un code d’identification unique qui peut être lu à distance par un récepteur. -
- -Prix: 400$
- -Une barre antivol simple mais efficace peut ralentir un voleur et le décourager, - agissant comme un moyen dissuasif.
- -Amazon: $69 Barre Antivol
- -L’Apple tag est un relayeur de position, le tag émet des signaux anonymes et toute - personnes possédant Un apapreil Apple passant proche du tag envoit un signal au - serveur de Apple vous permettant ainsi d’avoir une position geographique du dernier - repérage. Il suffit de bien le cacher dans son auto.
- -Toutefois, il est recommandé de désactiver le haut-parleur à l’intérieur de l’Apple - Tag pour éviter que le voleur ne le découvre et ne le désactive. En effet, Apple a - mis en place ce système pour prévenir le suivi indésirable des autres utilisateurs. - Imaginez la situation où quelqu’un aurait discrètement placé un Apple Tag sur vous, - vous permettant ainsi d’être suivi partout sans votre consentement.
- -Dans le contexte des véhicules volés, une fois que le voleur a pris possession de - votre voiture et qu’il détecte la présence d’un Apple Tag non associé à son compte - Apple, il recevra une notification indiquant que cet Apple Tag le suit. En réaction, - il pourrait ouvrir l’application “Find My iPhone” pour tenter de localiser l’Apple - Tag.
- -Pour plus de détails: https://youtu.be/hiivC_4li8Q?t=62
- -Amazon: $34 Apple Tag
- -AlgoÉTS vise à former une communauté de traders algorithmiques et data scientists, en développant des algorithmes de trading profitables. Nous démarrons par le trading sur papier, avec un focus sur l'analyse de données et l'apprentissage automatique, et offrons des ateliers pour habiliter nos membres.
-Notre objectif est de révolutionner la gestion des investissements via des robots de trading pour cryptomonnaies, rendant les marchés financiers plus accessibles et visant des profits constants. Nous souhaitons créer une plateforme éducative pour simplifier la finance et enrichir notre communauté.
-Nous adoptons une approche d'apprentissage par l'expérience, combinant développement itératif et amélioration continue. Nos plateformes et ateliers visent à comprendre le trading automatisé et à fournir des compétences en finance et gestion des risques.
-Project
-Membre Active
-Stratégie en cours
-Compétition Participé
-- Rejoindre AlgoÉTS a - été une expérience formidable pour moi. En tant que co-capitaine infrastructure, j'ai eu - l'opportunité unique d'allier mes compétences de sys-admin à l'élaboration d'algorithmes - financiers. Cette synergie m'a permis non seulement de développer de nouvelles compétences - techniques, mais aussi de forger des amitiés durables au sein du club. Travailler avec des - personnes partageant les mêmes idées m'a ouvert à de nouvelles perspectives, surtout en matière - de finance personnelle et d'investissement en bourse. Grâce au club, j'ai pu prendre des - décisions financières plus éclairées et mieux comprendre les dynamiques du marché. AlgoÉTS n'est - pas seulement un club, c'est une communauté où l'apprentissage et le partage des connaissances - vont de pair avec le développement personnel et professionnel. -
- -Dans ce rapport, nous présentons une expérimentation des indicateurs techniques à - l'aide du projet BatchBacktesting disponible sur GitHub à l'adresse suivante :
- -
-
-!pip install numpy httpx rich
-
-import pandas as pd
-import numpy as np
-from datetime import datetime
-import sys
-import os
-import httpx
-
-import concurrent.futures
-from datetime import datetime
-import glob
-import warnings
-from rich.progress import track
-warnings.filterwarnings("ignore")
-
-
-
-
- N'oubliez pas de remplacer les espaces réservés FMP_API_KEY et BINANCE_API_KEY par - vos véritables clés API pour pouvoir accéder aux données des services respectifs. -
- -
-
-BASE_URL_FMP = "https://financialmodelingprep.com/api/v3"
-BASE_URL_BINANCE = "https://fapi.binance.com/fapi/v1/"
-FMP_API_KEY = ""
-BINANCE_API_KEY = ""
-
-
-
- Plusieurs fonctions pour effectuer des requêtes API et fournit une liste de - cryptomonnaies prises en charge.
- -Ce script propose des fonctions pour :
- -
-
-def make_api_request(api_endpoint, params):
- with httpx.Client() as client:
- # Make the GET request to the API
- response = client.get(api_endpoint, params=params)
- if response.status_code == 200:
- return response.json()
- print("Error: Failed to retrieve data from API")
- return None
-
-
-
- - La fonction make_api_request() effectue une requête GET vers l'API et renvoie les - données au format JSON si la requête est réussie. Sinon, elle renvoie None. -
- -
-
-def get_historical_price_full_crypto(symbol):
- api_endpoint = f"{BASE_URL_FMP}/historical-price-full/crypto/{symbol}"
- params = {"apikey": FMP_API_KEY}
- return make_api_request(api_endpoint, params)
-
-
-def get_historical_price_full_stock(symbol):
- api_endpoint = f"{BASE_URL_FMP}/historical-price-full/{symbol}"
- params = {"apikey": FMP_API_KEY}
-
- return make_api_request(api_endpoint, params)
-
-def get_SP500():
- api_endpoint = "https://en.wikipedia.org/wiki/List_of_S%26P_500_companies"
- data = pd.read_html(api_endpoint)
- return list(data[0]['Symbol'])
-
-
-def get_all_crypto():
- """
- All possible crypto symbols
- """
- return [
- "BTCUSD",
- "ETHUSD",
- "LTCUSD",
- "BCHUSD",
- "XRPUSD",
- "EOSUSD",
- "XLMUSD",
- "TRXUSD",
- "ETCUSD",
- "DASHUSD",
- "ZECUSD",
- "XTZUSD",
- "XMRUSD",
- "ADAUSD",
- "NEOUSD",
- "XEMUSD",
- "VETUSD",
- "DOGEUSD",
- "OMGUSD",
- "ZRXUSD",
- "BATUSD"
- "USDTUSD",
- "LINKUSD",
- "BTTUSD",
- "BNBUSD",
- "ONTUSD",
- "QTUMUSD",
- "ALGOUSD",
- "ZILUSD",
- "ICXUSD",
- "KNCUSD",
- "ZENUSD",
- "THETAUSD",
- "IOSTUSD",
- "ATOMUSD",
- "MKRUSD",
- "COMPUSD",
- "YFIUSD",
- "SUSHIUSD",
- "SNXUSD",
- "UMAUSD",
- "BALUSD",
- "AAVEUSD",
- "UNIUSD",
- "RENBTCUSD",
- "RENUSD",
- "CRVUSD",
- "SXPUSD",
- "KSMUSD",
- "OXTUSD",
- "DGBUSD",
- "LRCUSD",
- "WAVESUSD",
- "NMRUSD",
- "STORJUSD",
- "KAVAUSD",
- "RLCUSD",
- "BANDUSD",
- "SCUSD",
- "ENJUSD",
- ]
-
-def get_financial_statements_lists():
- api_endpoint = f"{BASE_URL_FMP}/financial-statement-symbol-lists"
- params = {"apikey": FMP_API_KEY}
- return make_api_request(api_endpoint, params)
-
-def get_Vanguard_Canada():
- """
- Get Vanguard Canada companies
-
- Returns:
- dict: Dictionary containing the data
- """
- # VCN: Vanguard FTSE Canada All Cap Index ETF
- # VFV: Vanguard S&P 500 Index ETF
- # VUN: Vanguard US Total Market Index ETF
- # VEE: Vanguard FTSE Emerging Markets All Cap Index ETF
- # VAB: Vanguard Canadian Aggregate Bond Index ETF
- # VSB: Vanguard Canadian Short-Term Bond Index ETF
- # VXC: Vanguard FTSE Global All Cap ex Canada Index ETF
- # VIU: Vanguard FTSE Developed All Cap ex North America Index ETF
- # VGG: Vanguard US Dividend Appreciation Index ETF
- return ['VCN', 'VFV', 'VUN', 'VEE', 'VAB', 'VSB', 'VXC', 'VIU', 'VGG']
-
-
-
- - La fonction get_historical_price_full_crypto() effectue une requête API vers - l'API FMP pour obtenir les données historiques de prix pour une cryptomonnaie - spécifique. La fonction get_historical_price_full_stock() effectue une requête - API vers l'API FMP pour obtenir les données historiques de prix pour une action - spécifique. La fonction get_SP500() effectue une requête API vers Wikipedia pour - obtenir la liste des actions du S&P 500. La fonction get_all_crypto() renvoie la - liste de toutes les cryptomonnaies prises en charge. La fonction - get_financial_statements_lists() effectue une requête API vers l'API FMP pour - obtenir la liste des états financiers. La fonction get_Vanguard_Canada() renvoie - la liste des actions de Vanguard Canada. -
- -- Pour utiliser ce script dans votre projet, copiez simplement assurez-vous d'avoir - installé les bibliothèques requises mentionnées dans la section "Exigences" de la - documentation BatchBacktesting. Ensuite, vous pouvez importer les fonctions de ce - script dans votre script principal ou votre Jupyter Notebook pour accéder et - manipuler les données comme vous le souhaitez. -
- -- Une fois que vous avez les données, vous pouvez utiliser la bibliothèque - BatchBacktesting pour tester diverses stratégies sur les actions ou les - cryptomonnaies, analyser les résultats et visualiser les performances. À titre - d'exemple, nous avons utilisé la stratégie EMA (Exponential Moving Average) pour - effectuer des tests de performance sur les actions du S&P 500 et les cryptomonnaies - prises en charge. -
- -L'EMA est un indicateur technique qui est utilisé pour lisser l'action des prix en - filtrant le "bruit" des fluctuations de prix aléatoires à court terme. Il est - calculé en prenant le prix moyen d'un titre sur un nombre spécifique de périodes de - temps. L'EMA est un type de moyenne mobile qui accorde un poids et une signification - plus importants aux points de données les plus récents. La moyenne mobile - exponentielle est également appelée moyenne mobile pondérée exponentiellement. -
- -
-
-class EMA(Strategy):
- n1 = 20
- n2 = 80
- n3 = 150
-
- def init(self):
- close = self.data.Close
- self.ema20 = self.I(taPanda.ema, close.s, self.n1)
- self.ema80 = self.I(taPanda.ema, close.s, self.n2)
- self.ema150 = self.I(taPanda.ema, close.s, self.n3)
-
- def next(self):
- price = self.data.Close
- if crossover(self.ema20, self.ema80):
- self.position.close()
- self.buy(sl=0.90 * price, tp=1.25 * price)
-
- elif crossover(self.ema80, self.ema20):
- self.position.close()
- self.sell(sl=1.10 * price, tp=0.75 * price)
-
-
-
-
-
- - La stratégie EMA est implémentée dans la classe EMA. La stratégie EMA est une - stratégie de suivi de tendance qui utilise trois moyennes mobiles exponentielles - (EMA) avec des périodes de 20, 80 et 150. Lorsque la moyenne mobile exponentielle - à court terme (20) croise la moyenne mobile exponentielle à long terme (80) par - le haut, cela signifie que la tendance est à la hausse et que nous devrions - acheter. Lorsque la moyenne mobile exponentielle à court terme (20) croise la - moyenne mobile exponentielle à long terme (80) par le bas, cela signifie que la - tendance est à la baisse et que nous devrions vendre. -
- -
-
-def run_backtests_strategies(instruments, strategies):
- """
- Run backtests for a list of instruments using a specified strategy.
-
- Args:
- instruments (list): List of instruments to run backtests for
- strategies (list): List of strategies to run backtests for
-
- Returns:
- List of outputs from run_backtests()
-
- """
-
- # find strategies in the STRATEGIES
- strategies = [x for x in STRATEGIES if x.__name__ in strategies]
- outputs = []
- with concurrent.futures.ThreadPoolExecutor() as executor:
- futures = []
- for strategy in strategies:
- future = executor.submit(run_backtests, instruments, strategy, 4)
- futures.append(future)
-
- for future in concurrent.futures.as_completed(futures):
- outputs.extend(future.result())
-
- return outputs
-
-def check_crypto(instrument):
- """
- Check if the instrument is crypto or not
- """
- return instrument in get_all_crypto()
-
-def check_stock(instrument):
- """
- Check if the instrument is crypto or not
- """
- return instrument not in get_financial_statements_lists()
-
-
-def process_instrument(instrument, strategy):
- """
- Process a single instrument for a backtest using a specified strategy.
- Returns a Pandas dataframe of the backtest results.
- """
- try:
-
- if check_crypto(instrument):
- data = get_historical_price_full_crypto(instrument)
- else:
- data = get_historical_price_full_stock(instrument)
-
- if data is None or "historical" not in data:
- print(f"Error processing {instrument}: No data")
- return None
-
- data = clean_data(data)
-
- bt = Backtest(
- data, strategy=strategy, cash=100000, commission=0.002, exclusive_orders=True
- )
- output = bt.run()
- output = process_output(output, instrument, strategy)
- return output, bt
- except Exception as e:
- print(f"Error processing {instrument}: {str(e)}")
- return None
-
-def clean_data(data):
- """
- Clean historical price data for use in a backtest.
- Returns a Pandas dataframe of the cleaned data.
- """
- data = data["historical"]
- data = pd.DataFrame(data)
- data.columns = [x.title() for x in data.columns]
- data = data.drop(
- [
- "Adjclose",
- "Unadjustedvolume",
- "Change",
- "Changepercent",
- "Vwap",
- "Label",
- "Changeovertime",
- ],
- axis=1,
- )
- data["Date"] = pd.to_datetime(data["Date"])
- data.set_index("Date", inplace=True)
- data = data.iloc[::-1]
- return data
-
-
-def process_output(output, instrument, strategy, in_row=True):
- """
- Process backtest output data to include instrument name, strategy name,
- and parameters.
- Returns a Pandas dataframe of the processed output.
- """
- if in_row:
- output = pd.DataFrame(output).T
- output["Instrument"] = instrument
- output["Strategy"] = strategy.__name__
- output.pop("_strategy")
- return output
-
-
-def save_output(output, output_dir, instrument, start, end):
- """
- Save backtest output to file and generate chart if specified.
- """
- print(f"Saving output for {instrument}")
- fileNameOutput = f"{output_dir}/{instrument}-{start}-{end}.csv"
- output.to_csv(fileNameOutput)
-
-
-def plot_results(bt, output_dir, instrument, start, end):
- print(f"Saving chart for {instrument}")
- fileNameChart = f"{output_dir}/{instrument}-{start}-{end}.html"
- bt.plot(filename=fileNameChart, open_browser=False)
-
-def run_backtests(instruments, strategy, num_threads=4, generate_plots=False):
- """
- Run backtests for a list of instruments using a specified strategy.
- Returns a list of Pandas dataframes of the backtest results.
-
- Args:
- instruments (list): List of instruments to run backtests for
-
- Returns:
- List of Pandas dataframes of the backtest results
- """
- outputs = []
- output_dir = f"output/raw/{strategy.__name__}"
- output_dir_charts = f"output/charts/{strategy.__name__}"
- if not os.path.exists(output_dir):
- os.makedirs(output_dir)
- if not os.path.exists(output_dir_charts):
- os.makedirs(output_dir_charts)
- with concurrent.futures.ThreadPoolExecutor(max_workers=num_threads) as executor:
- future_to_instrument = {
- executor.submit(process_instrument, instrument, strategy): instrument
- for instrument in instruments
- }
- for future in concurrent.futures.as_completed(future_to_instrument):
- instrument = future_to_instrument[future]
- output = future.result()
- if output is not None:
- outputs.append(output[0])
- save_output(output[0], output_dir, instrument, output[0]["Start"].to_string().strip().split()[1], output[0]["End"].to_string().strip().split()[1])
- if generate_plots:
- plot_results(output[1], output_dir_charts, instrument, output[0]["Start"].to_string().strip().split()[1], output[0]["End"].to_string().strip().split()[1])
- data_frame = pd.concat(outputs)
- start = data_frame["Start"].to_string().strip().split()[1]
- end = data_frame["End"].to_string().strip().split()[1]
- fileNameOutput = f"output/{strategy.__name__}-{start}-{end}.csv"
- data_frame.to_csv(fileNameOutput)
-
-
- return data_frame
-
-
-
- - La fonction run_backtests_strategies() exécute des backtests pour une liste - d'instruments en utilisant une stratégie spécifique. La fonction - check_crypto() vérifie si l'instrument est une cryptomonnaie ou non. La fonction - check_stock() vérifie si l'instrument est une action ou non. La fonction - process_instrument() traite un seul instrument pour un backtest en utilisant une - stratégie spécifique. La fonction clean_data() nettoie les données historiques - des prix pour les utiliser dans un backtest. La fonction process_output() - traite les données de sortie du backtest pour inclure le nom de l'instrument, le - nom de la stratégie et les paramètres. La fonction save_output() enregistre la - sortie du backtest dans un fichier et génère un graphique si spécifié. La - fonction plot_results() enregistre la sortie du backtest dans un fichier et - génère un graphique si spécifié. La fonction run_backtests() exécute des - backtests pour une liste d'instruments en utilisant une stratégie spécifique. -
- -- Le script génère des graphiques pour chaque instrument testé, qui peuvent être - visualisés pour analyser les performances des stratégies appliquées. Les résultats - sont sauvegardés dans le répertoire output du projet BatchBacktesting. -
- -
-
-tickers = get_SP500()
-run_backtests(tickers, strategy=EMA, num_threads=12, generate_plots=True)
-ticker = get_all_crypto()
-run_backtests(ticker, strategy=EMA, num_threads=12, generate_plots=True)
-
-
-
- - Nous avons utilisé la stratégie EMA pour effectuer des tests de performance sur les - actions du S&P 500 et les cryptomonnaies prises en charge. Les résultats sont - sauvegardés dans le répertoire output du projet BatchBacktesting. -
- -- Le lien que vous avez partagé correspond au répertoire output du projet - BatchBacktesting sur GitHub : - https://github.com/AlgoETS/BatchBacktesting/tree/main/output. Cependant, il semble - que ce répertoire ne contient pas de résultats pré-calculés. En effet, il est - probable que les auteurs du projet aient choisi de ne pas inclure les résultats des - tests dans le dépôt GitHub afin d'éviter d'encombrer le dépôt avec des données - spécifiques à chaque utilisateur. -
- -- Pour obtenir des valeurs calculées pour vos propres tests, vous devrez exécuter le - script en local sur votre machine avec les paramètres et les stratégies de votre - choix. Après avoir exécuté le script, les résultats seront sauvegardés dans le - répertoire output de votre projet local. - - https://algoets.github.io/BatchBacktesting/output/charts/EMA/AAPL-2018-04-04-2023-04-03.html -
- -Top 5 des instruments avec le meilleur rendement :
- -Top 5 des instruments avec le plus faible rendement :
- -- En conclusion, le projet BatchBacktesting offre une approche flexible et puissante - pour tester et analyser les performances des indicateurs techniques sur les marchés - boursiers et les cryptomonnaies. Les fonctions fournies permettent une intégration - facile avec les API de services financiers et une manipulation aisée des données. - Les résultats des expérimentations peuvent être utilisés pour développer et affiner - des stratégies de trading algorithmique en fonction des performances observées -
- -Élaborer et tester des algorithmes de trading pour analyser leur performance dans le passé
-Promouvoir l’investissement responsable et analytique grâce aux sciences de données
-Représenter l’ÉTS, une université spécialisée en génie appliqué, aux compétitions de finances et - d’investissements
-Développer nos propres outils pour développer des stratégies plus efficacement.
-Organiser des ateliers pour apprendre aux étudiants comment développer des stratégies de - trading algorithmique.
-Écrire des articles de blog pour partager nos connaissances et nos expériences.
-La majorité des investisseur perdent de l’argent sur la bourse parce qu'il ne - connait pas les règle du marché. En analysant les données financière et les indicateurs technique ont - peut créer des stratégie pour aider les investisseur à faire des meilleurs investissements. -
- - Lire sur les stratégie -Stratégie Backtest
-Membre active
-Project
-Stratégie en cours
-- En plus de développer des stratégies de trading algorithmique, nous développons des outils pour - les tester et les améliorer. Nous développons également des outils. -
-Robot d’investissement intelligent qui - analyse les nouvelles et les réseaux sociaux pour prédire les mouvements de prix des - cryptomonnaies.
-Plusieurs backtest en même temps pour trouver la meilleur stratégie selon des indicateur technique
-Copier les transactions des plus grands investisseurs de la bourse et crypto en temps réel
-Stratégie de trading pour les plateformes de trading existante
-Apprend comment creer la stratégie avec des données financière et indicateur technique
-ComETS est un projet de développement d’un robot d’investissement intelligent sur binance
-Nous développons notre propre librairie pour tester des algorithmes de trading sur des données - historiques.
-Nous sommes des étudiants de l’École de technologie supérieure. Nous sommes - passionnés par les sciences de données, les finances et le développement informatique. Nous - avons créé ce club pour combler un vide dans l’offre de clubs de l’ÉTS.
-${projectData.description}
-Un gros merci à nos partenaires
-Bombardier - description.
-Desjardins - description.
-Ferique, un partenaire clé dans le soutien de nos projets d'innovation.
-sherweb, contribuant activement au développement de nos initiatives étudiantes.
-ETS, contribuant activement au développement de nos initiatives étudiantes.
-Offre | -Contribution | -Avantages | -
---|---|---|
Bronze | -≥1500$ | -
-
|
-
Argent | -≥3000$ | -
-
|
-
Or | -≥5000$ | -
-
|
-
Voulez-vous aider à supporter le club? Donnez un coup d’œil à notre plan de partenariat.
- VOIR LE PLAN DE PARTENARIAT -Développez et testez des stratégies de trading avec nos outils internes.
-Analysez les marchés financiers et les actualités avec notre analytique propulsée par l'IA.
-Apprenez le trading algorithmique, la finance et la programmation avec des experts.
-Contribuez à nos projets GitHub et acquérez une expérience pratique.
-Connectez-vous avec des professionnels de l'industrie et des anciens lors de nos événements.
-Recevez des conseils de carrière et des opportunités de stages en finance et technologie.
-L'équipe administrative gère la stratégie globale, les opérations, et la direction du club. Ils sont responsables de :
-Co-Capitaine Stategie
2021-2024
Co-Capitaine Stategie
2022-2024
Capitaine Infrastructure
2023-2024
Trésorier, vice-président stratégie et co-fondateur
2021-2022
Vice-présidente marketing
2021-2022
Co-fondateur
2021-2022
L'équipe d'infrastructure assure le bon fonctionnement technique et la sécurité des systèmes. Leurs rôles comprennent :
-Vice-président infrastructure
2021-2022
Assistant vice-président infrastructure
2021-2022
Développeur infrastructure
2021-2022
L'équipe de stratégie développe et teste des modèles algorithmiques de trading. Leurs principales tâches incluent :
-Membre Stategie
2022-2024
Développeur stratégie
2023-2024
Membre Stategie
2022-2023
Membre Stategie
2022-2024
Membre Stategie
2022-2024
Développeur stratégie
2021-2024
Développeur stratégie
2021-2022
Développeur stratégie
2021-2022
Développeur stratégie
2021-2022
Développeur stratégie
2021-2022
Développeur stratégie
2023-2024
Original -
Substack - -
Découvrez les tendances de la criminalité liée aux vols de voitures - à Montréal à travers les années. Cette étude examine les quartiers les plus touchés, - les variations saisonnières, et bien plus encore.
- -Un article dans le journal a particulièrement attiré mon attention de manière - inattendue, révélant une réalité alarmante : le taux de vols de voitures à Montréal - atteignait des sommets déconcertants. Cette révélation m’a laissé perplexe et - intrigué à la fois. Mon esprit curieux a été instantanément piqué, et j’ai ressenti - le besoin impérieux d’explorer ce phénomène de plus près, de le décortiquer et de - comprendre ses origines.
- -Dans cet article, je vais vous emmener avec moi dans cette aventure intrigante, alors - que nous plongeons dans l’univers des vols de voitures à Montréal. Nous allons - dévoiler les données, analyser les statistiques et tenter de démystifier cette - réalité complexe. Attachez-vous bien, car nous partons à la découverte de l’envers - du décor de la criminalité automobile à Montréal.
- -J’ai entrepris la collecte de données en récupérant un fichier CSV exhaustif - contenant toutes les infractions criminelles à Montréal, mis à disposition par la - ville. Mon objectif était de cibler spécifiquement les infractions de type “Vol de - véhicule à moteur”. À ma grande surprise, j’ai trouvé pas moins de 53 964 cas - enregistrés depuis l’année 2018.
- - - - Données des vols de véhicules à moteur à Montréal - -L’un des constats les plus préoccupants réside dans la tendance constante à la hausse - du vol de véhicules, qui semble résolument insensible à tout ralentissement, comme - en témoigne ce graphique éloquent :
- - - Graphique vols de véhicules à moteur par année --
Années | -Vols de véhicules | -
---|---|
2015 | -4418 | -
2016 | -4352 | -
2017 | -4732 | -
2018 | -4237 | -
2019 | -4170 | -
2020 | -4706 | -
2021 | -6440 | -
2022 | -9377 | -
2023 | -11262 | -
Ces chiffres révèlent une progression alarmante, suscitant des inquiétudes - croissantes.
- -De manière paradoxale, il s’avère que la majorité des vols de véhicules se produisent - en plein jour. En effet, 51% de ces vols ont lieu pendant la journée, lorsque tout - semble plus visible et évident. De plus, parmi les jours de la semaine, c’est le - mercredi qui détient le triste record du jour où les vols sont les plus fréquents : -
- -Journée | -Occurence | -
---|---|
Wednesday | -8519 | -
Monday | -8493 | -
Thursday | -8334 | -
Tuesday | -8303 | -
Friday | -7819 | -
Saturday | -6160 | -
Sunday | -6066 | -
Cette donnée surprenante met en évidence une réalité intrigante, où les vols de - véhicules semblent prospérer en plein jour, défiant ainsi les attentes - conventionnelles en matière de criminalité.
- -Voici une carte thermique (heatmap) des cinq endroits les plus fréquemment ciblés par - les voleurs à Montréal. Il est intéressant de noter que les hôtels et les centres - commerciaux sont devenus des cibles privilégiées.
- - - Carte thermique des vols de véhicules à Montréal -Loin sont les jours où un simple trousseau de clés métalliques ou une vitre brisée - suffisaient pour voler une voiture. Aujourd’hui, les voleurs ont évolué, devenant - plus rusés et équipés de technologies avancées.
- -Ils utilisent un dispositif sophistiqué pour amplifier le signal, pratiquant ce que - l’on appelle l’attaque par relais.
- -Dans ce type de vol, l’objectif des malfaiteurs est de tromper la voiture en lui - faisant croire que la clé se trouve à proximité immédiate du véhicule, même si en - réalité, la clé se trouve à plusieurs centaines de mètres de distance. Ils utilisent - un amplificateur de signal pour induire en erreur la voiture, lui faisant croire que - la clé est à l’intérieur du véhicule.
- -Voici une vidéo capturant un vol qui ne dure que quelques secondes.
- - - - Vol Voiture Technique du relai - -Le Port OBD est le port « On-Board Diagnostics » se trouvant généralement au-dessus - de la pédale. C’est une interface de communication pour les systèmes de surveillance - et de contrôle des véhicules. Il est également utilisé par les garages pour - identifier et résoudre les défauts. Problème : Malheureusement, toute personne ayant - accès à celui-ci (par exemple, un garage malveillant, un valet ou des employés de - lave-auto) peut abuser du Port OBD pour créer une copie du porte-clés électronique - de votre voiture ! Parfois, les voleurs utilisent la méthode du Port OBD en y - injectant un code malicieux permettant de changer des configurations pour arrêter le - système d’alarme et faire un clonage de la clé.
- - - - Port OBD - -L’explosion du nombre de vols de voitures a des conséquences directes sur les - propriétaires de véhicules, notamment une augmentation significative du coût de - l’assurance automobile. Certaines marques et modèles sont malheureusement devenus - les cibles privilégiées des voleurs. Voici le palmarès de 2022 :
- -Nº | -Marque/Modèle | -Année Modèle Volée le Plus Souvent | -Nombre de Véhicules Assurés | -Nombre de Vols | -Fréquence de Vol (%) | -Type | -
---|---|---|---|---|---|---|
1 | -Honda CR-V | -2020 | -115,895 | -2,689 | -2.3% | -SUV | -
2 | -Acura RDX | -2020 | -15,895 | -653 | -4.1% | -SUV | -
3 | -Honda Civic | -2019 | -224,688 | -506 | -0.2% | -Sedan | -
4 | -Dodge RAM 1500 Series | -2020 | -79,019 | -504 | -0.6% | -Truck | -
5 | -Jeep Wrangler | -2021 | -28,048 | -433 | -1.5% | -SUV | -
6 | -Toyota RAV 4 | -2019 | -124,357 | -425 | -0.3% | -SUV | -
7 | -Jeep Grand Cherokee | -2021 | -22,808 | -420 | -1.8% | -SUV | -
8 | -Toyota Highlander | -2021 | -17,386 | -344 | -2.0% | -SUV | -
9 | -Ford F150 Series | -2019 | -91,166 | -256 | -0.3% | -Truck | -
10 | -Hyundai Tucson | -2021 | -63,450 | -242 | -0.4% | -SUV | -
Il est important de noter qu’aucune méthode n’est infaillible, mais l’objectif - principal est de rendre la tâche des voleurs aussi difficile que possible, les - décourageant ainsi de s’attaquer à votre véhicule.
- -La première étape essentielle pour vous protéger consiste à verrouiller les portes de - votre véhicule et à fermer complètement les fenêtres. Ce geste simple peut - considérablement ralentir un voleur.
- -Pour protéger votre clé électronique (key FOB) contre les attaques par relais, vous - pouvez utiliser une boîte de Faraday. Cette boîte bloque le signal de la clé, - empêchant ainsi les voleurs d’amplifier son signal. Cette méthode constitue une - défense efficace contre les tentatives d’attaque par relais et est disponible à un - prix abordable, généralement autour de 25 $.
- -Amazon: $25 Boite de farraday
- -Les véhicules équipés de systèmes de démarrage sans clé (“push start”) ou d’entrée - sans clé (“keyless entry”) ne disposent pas de clé mécanique pour démarrer le - moteur. Ils utilisent des clés électroniques qui s’authentifient avec la voiture via - un échange de données (par des signaux radio pour les systèmes sans clé ou par - insertion dans le tableau de bord).
- -Ces véhicules conservent une copie numérique des clés dans l’unité de contrôle du - moteur du véhicule (ECU). Le problème réside dans le fait que ces clés numériques - peuvent être téléchargées par quiconque a accès au “PORT OBD” du véhicule, puis - utilisées pour programmer une clé vierge en moins de 60 secondes.
- -Cette clé duplicata est identique à l’originale, ce qui donne au voleur un accès - total pour OUVRIR, DÉMARRER et EMPORTER le véhicule à sa convenance, souvent des - jours, voire des semaines plus tard.
- -Pour vous protéger contre ce type d’attaque, vous pouvez envisager de bloquer, - modifier ou cacher votre port OBD. Il ne faut que quelques minutes pour rendre ces - véhicules inviolables.
- - - - Port OBD Lock -Cette technologie implique de placer plusieurs dispositifs sans fil dans des endroits - difficiles d’accès du véhicule. Chaque dispositif est autonome et émet un signal - avec un code d’identification unique qui peut être lu à distance par un récepteur. -
- -Prix: 400$
- -Une barre antivol simple mais efficace peut ralentir un voleur et le décourager, - agissant comme un moyen dissuasif.
- -Amazon: $69 Barre Antivol
- -L’Apple tag est un relayeur de position, le tag émet des signaux anonymes et toute - personnes possédant Un apapreil Apple passant proche du tag envoit un signal au - serveur de Apple vous permettant ainsi d’avoir une position geographique du dernier - repérage. Il suffit de bien le cacher dans son auto.
- -Toutefois, il est recommandé de désactiver le haut-parleur à l’intérieur de l’Apple - Tag pour éviter que le voleur ne le découvre et ne le désactive. En effet, Apple a - mis en place ce système pour prévenir le suivi indésirable des autres utilisateurs. - Imaginez la situation où quelqu’un aurait discrètement placé un Apple Tag sur vous, - vous permettant ainsi d’être suivi partout sans votre consentement.
- -Dans le contexte des véhicules volés, une fois que le voleur a pris possession de - votre voiture et qu’il détecte la présence d’un Apple Tag non associé à son compte - Apple, il recevra une notification indiquant que cet Apple Tag le suit. En réaction, - il pourrait ouvrir l’application “Find My iPhone” pour tenter de localiser l’Apple - Tag.
- -Pour plus de détails: https://youtu.be/hiivC_4li8Q?t=62
- -Amazon: $34 Apple Tag
- -