Les séries chronologiques se réfèrent aux séries de données obtenues dans un intervalle continu de temps égal. Dans l'investissement quantitatif, ces données se reflètent principalement dans le prix et le mouvement des points de données de l'objet d'investissement suivi. Par exemple, pour les cours des actions, les données de séries chronologiques enregistrées régulièrement dans une période de temps spécifiée peuvent se référer au graphique suivant, qui donnera aux lecteurs une compréhension plus claire:
Comme vous pouvez le voir, la date est sur l'axe x et le prix est affiché sur l'axe y. Dans ce cas,
Cependant, lorsque vous utilisez des données de séries temporelles, vous verrez souvent plus que ce type de données qui ne contient que deux colonnes: date et prix. Dans la plupart des cas, vous utiliserez cinq colonnes de données: période de données, prix d'ouverture, prix le plus élevé, prix le plus bas et prix de clôture. Cela signifie que si votre période de données est définie sur le niveau quotidien, les changements de prix élevés, ouverts, bas et fermés de la journée seront reflétés dans les données de cette série temporelle.
Les données Tick sont la structure de données commerciales la plus détaillée de l'échange. Il s'agit également d'une forme étendue des données de séries chronologiques mentionnées ci-dessus, y compris: prix d'ouverture, prix le plus élevé, prix le plus bas, dernier prix, quantité de négociation et chiffre d'affaires. Si les données de transaction sont comparées à une rivière, les données Tick sont les données de la rivière à une certaine section transversale.
Chaque action des bourses étrangères sera poussée vers le marché en temps réel, tandis que le change national vérifie deux fois par seconde. S'il y a des actions dans cette période, un instantané sera généré et poussé. En comparaison, la poussée de données ne peut être considérée que comme OnTime au mieux, pas OnTick.
Tous les codes et l'acquisition de données de séries temporelles dans ce tutoriel seront complétés sur la plateforme FMZ Quant.
Bien que les données Tick domestiques ne soient pas un vrai Tick, elles peuvent être infiniment proches et restaurer la réalité au moins en utilisant ces données pour le backtesting. Chaque tick affiche les principaux paramètres du produit sur le marché à ce moment-là, et notre code dans le vrai bot est calculé selon le Tick théorique de deux fois par seconde.
Non seulement cela, sur le FMZ Quant, même si les données avec une période de 1 heure sont chargées, la granularité des données peut encore être ajustée, comme ajuster la granularité des données à 1 minute. À ce moment-là, la ligne K de 1 heure est composée de données de 1 minute. Bien sûr, plus la granularité est petite, plus la précision est élevée. Ce qui est plus puissant, c'est que si vous passez les données à un vrai bot Tick, vous pouvez restaurer l'environnement du vrai bot de manière transparente. C'est-à-dire les données réelles du Tick Exchange de deux fois par seconde.
Maintenant que vous avez appris les concepts de base que vous devez comprendre pour compléter ce tutoriel. ces concepts reviendront bientôt, et vous en apprendrez plus sur eux plus tard dans ce tutoriel.
Les meilleurs outils font du bon travail. Nous devons d'abord déployer un docker sur la plate-forme FMZ Quant. En ce qui concerne le concept d'un docker, les lecteurs ayant une expérience en programmation peuvent l'imaginer comme un système Docker officiellement emballé, qui a encapsulé les interfaces API publiques de divers échanges traditionnels et les détails techniques de la rédaction de stratégies et du backtesting. L'intention initiale de l'établissement de ce système est de faire en sorte que les traders quantitatifs se concentrent sur la rédaction et la conception de stratégies lors de l'utilisation de la plate-forme FMZ Quant. Ces détails techniques sont présentés aux rédacteurs de stratégies dans une formule encapsulée pour leur faire économiser beaucoup de temps et d'efforts.
Méthode A: Les utilisateurs peuvent louer ou acheter eux-mêmes des serveurs et les déployer sur diverses plateformes de cloud computing, telles que AWS, Alibaba Cloud, Digital Ocean et Google Cloud. L'avantage est que la sécurité de la stratégie et la sécurité du système sont toutes deux garanties. Pour la plateforme FMZ Quant, les utilisateurs sont encouragés à utiliser cette méthode. Le déploiement distribué élimine le danger caché des attaques de serveurs (que ce soit le client ou la plate-forme elle-même).
Méthode B: Utilisez le serveur public de la plateforme FMZ Quant pour le déploiement, la plateforme fournit quatre emplacements pour le déploiement à Hong Kong, Singapour, Japon et dans l'Est des États-Unis. Les utilisateurs peuvent déployer en fonction de l'emplacement de l'échange qu'ils souhaitent échanger et du principe de proximité. L'avantage de cet aspect est qu'il est simple et facile à compléter en un clic, ce qui est particulièrement approprié pour les utilisateurs débutants. Il n'a pas besoin de savoir beaucoup de choses sur l'achat de serveurs Linux, et il économise également du temps et de l'énergie pour apprendre les commandes Linux. Le prix est relativement bon marché. Pour les utilisateurs ayant de petits fonds, la plateforme recommande d'utiliser cette méthode de déploiement.
Pour les débutants, cet article adoptera la méthode B.
Les opérations spécifiques sont les suivantes:FMZ.COM, cliquez sur Dashboard, Docker, et cliquez sur One-click Rent a docker VPS pour louer le docker.
Entrez le mot de passe, comme indiqué ci-dessous après déploiement réussi:
La création d'un robot est très simple. Après avoir déployé le docker, cliquez sur la colonne Bot à gauche, cliquez sur Ajouter bot, remplissez un nom dans le nom de la balise et sélectionnez le docker qui vient d'être déployé.
Jusqu'à présent, notre environnement de travail a été construit. On peut voir qu'il est très simple et efficace, et chaque fonction remplit ses propres fonctions. Ensuite, nous allons commencer à écrire une stratégie quantitative.
Nous avons mentionné les concepts de données de séries chronologiques et de données Tick ci-dessus.
L'EMA de la période lente, comme l'EMA de 7 jours, et l'EMA de la période rapide, comme l'EMA de 3 jours. Ils sont appliqués au même graphique de ligne K. Lorsque l'EMA de la période rapide traverse l'EMA de la période lente, nous l'appelons Golden Cross; Lorsque l'EMA de la période lente descend à travers l'EMA de la période rapide, nous l'appelons Bearish Crossover.
La base pour ouvrir une position est d'ouvrir des positions longues avec une croix d'or, et d'ouvrir des positions courtes avec un croisement baissier.
On ouvre.FMZ.COM, connectez-vous au compte, tableau de bord, bibliothèque de stratégie, et créez une nouvelle stratégie. Sélectionnez Python dans le langage d'écriture de stratégie dans le coin supérieur gauche. Voici le code de cette stratégie. Chaque ligne contient des commentaires détaillés. Veuillez prendre votre temps pour comprendre. Cette stratégie n'est pas une véritable stratégie de bot. Ne faites pas d'expérience avec de l'argent réel. Le but principal est de vous donner une idée générale de la rédaction de stratégie et un modèle pour apprendre.
import types # Import the Types module library, which is designed to handle the various data types that will be used in the code.
def main(): # The main function, where the strategy logic begins.
STATE_IDLE = -1 # Mark position status variables
state = STATE_IDLE # Mark the current position status
initAccount = ext.GetAccount() # The spot digital currency trading class library (python version) is used here. Remember to check it when writing the strategy to obtain the initial account information.
while True: # Enter the loop
if state == STATE_IDLE : # Here begins the logic of opening positions.
n = ext.Cross(FastPeriod,SlowPeriod) # The indicator crossover function is used here, for details please see: https://www.fmz.com/strategy/21104.
if abs(n) >= EnterPeriod : # If n is greater than or equal to the market entry observation period, the market entry observation period here is to prevent positions from being opened indiscriminately as soon as the market opens.
opAmount = _N(initAccount.Stocks * PositionRatio,3) # Opening position quantity, for the usage of _N, please check the official API documentation.
Dict = ext.Buy(opAmount) if n > 0 else ext.Sell(opAmount) # Create a variable to store the open position status and execute the open position operation.
if Dict : # Check the dict variable and prepare for the following log output.
opAmount = Dict['amount']
state = PD_LONG if n > 0 else PD_SHORT # Both PD_LONG and PD_SHORT are global constants used to represent long and short positions, respectively.
Log("Details of opening positions",Dict,"Cross-period",n) # Log information
else: # Here begins the logic of closing positions.
n = ext.Cross(ExitFastPeriod,ExitSlowPeriod) # The indicator crossover function.
if abs(n) >= ExitPeriod and ((state == PD_LONG and n < 0) or (state == PD_SHORT and n > 0)) : # If the market exit observation period has passed and the current account status is in the position status, then you can determine the Golden Cross or Bearish Crossover.
nowAccount = ext.GetAccount() # Refresh and get account information again.
Dict2 = ext.Sell(nowAccount.Stocks - initAccount.Stocks) if state == PD_LONG else ext.Buy(initAccount.Stocks - nowAccount.Stocks) # The logic of closing a position is to close the long position if it is a long position and close the short position if it is a short position.
state = STATE_IDLE # Mark the position status after closing positions.
nowAccount = ext.GetAccount() # Refresh and get account information again.
LogProfit(nowAccount.Balance - initAccount.Balance,'money:',nowAccount.Balance,'currency:',nowAccount.Stocks,'The details of closing positions',Dict2,'Cross-over period:',n) # Log information
Sleep(Interval * 1000) # Pause the loop for one second to prevent the account from being restricted due to too fast API access frequency.
Cliquez sur le backtest, vous pouvez voir qu'il existe de nombreux paramètres réglables, qui peuvent être modifiés directement. Pour l'avenir, la stratégie est de plus en plus complexe et les paramètres sont de plus en plus nombreux. Cette méthode de modification peut aider les utilisateurs à éviter le problème de modifier le code un par un, ce qui est pratique, rapide et clair.
Les options d'optimisation suivantes permettent d'optimiser les paramètres définis automatiquement. Le système tentera divers paramètres optimaux pour aider les développeurs de stratégie à trouver le choix optimal.
D'après les exemples ci-dessus, nous pouvons voir que la base du trading quantitatif est l'analyse des données de séries temporelles et l'interaction de backtesting des données de tick. Quelle que soit la complexité de la logique, elle ne peut pas être séparée de ces deux éléments de base. La différence est simplement la différence de dimension. Par exemple, les transactions à haute fréquence nécessitent des aspects de données plus détaillés et plus de données de séries temporelles. Un autre exemple est le trading d'arbitrage, qui nécessite beaucoup de données de l'échantillon de backtest. Il peut nécessiter des données approfondies continues de deux objets de trading pendant plus de dix ans pour connaître les résultats statistiques de leur expansion et réduction de marge d'intérêt. Dans les articles futurs, j'introduirai les stratégies de trading à haute fréquence et de trading d'arbitrage l'une après l'autre. S'il vous plaît, attendez-vous à cela.