
Introduction à la stratégie
Adresse de partage de stratégie :
https://www.fmz.com/strategy/1088
Cette stratégie est ma stratégie principale depuis que j’ai commencé à trader des devises virtuelles. Elle est devenue beaucoup plus compliquée après des améliorations et des modifications continues, mais l’idée principale n’a pas changé. La version que je partage est la version initiale sans bugs évidents. C’est la plus simple et la version la plus claire sans gestion de position. Chaque transaction se fait avec une position complète, sans aucun gel ou redémarrage, etc., mais cela suffit à illustrer le problème.
La stratégie a été mise en œuvre d’août 2014 jusqu’à ce que la bourse commence à facturer des frais plus tôt cette année. La période s’est plutôt bien déroulée, avec très peu de pertes. Les fonds sont passés de 200 yuans initiaux à 80 bitcoins. Le processus spécifique peut être vuLe blog de Xiaocao sur Sinaà l’intérieurLa voie vers le trading automatisé de crypto-monnaiesSérie d’articles.
La figure suivante est la courbe de profit de la plateforme OKcoin que j’ai spécifiquement comptée. Le capital initial est de 1 000 yuans. Vous pouvez voir que l’argent initial a augmenté régulièrement. La ligne droite au milieu est le moment où ma stratégie s’est arrêtée. Plus tard, parce que le La stratégie a été modifiée pour devenir une stratégie de gain de pièces, le bénéfice étant libellé en RMB. Les rendements fluctuent considérablement. Le processus spécifique est le suivantBilan des échanges stratégiques sur deux ansIl y a une description dans l’article.
La figure suivante est la courbe des actifs totaux convertis en monnaie :

Pourquoi partager cette stratégie ?
Principes de la stratégie
Le principe de cette stratégie est extrêmement simple et peut être compris comme une stratégie de création de marché quasi-haute fréquence. Après avoir lu ceci, vous voudrez peut-être frapper quelqu’un, car cela peut rapporter de l’argent et presque n’importe qui aurait pu l’écrire à ce moment-là temps. Je ne m’attendais pas à ce que ce soit si efficace au début. Cela montre que si vous avez une idée en tête, il faut la mettre en pratique rapidement, et vous risquez d’avoir des surprises inattendues. En 2014, lorsque les robots Bitcoin sont apparus pour la première fois, il était trop facile d’écrire des stratégies rentables.
Comme toutes les stratégies à haute fréquence, cette stratégie est également basée sur le carnet d’ordres. La figure suivante montre la distribution des ordres d’une bourse Bitcoin typique.
Vous pouvez voir qu’à gauche se trouvent les ordres d’achat, indiquant le nombre d’ordres en attente à différents prix, et à droite se trouvent les ordres de vente. Il est concevable que si une personne souhaite acheter du Bitcoin, si elle ne veut pas passer une commande et attendre, elle ne peut que choisir de prendre la commande. S’il a beaucoup de commandes, cela entraînera un grand nombre d’ordres de vente être exécuté, ce qui entraîne un impact sur le prix, mais cet impact ne durera généralement pas éternellement. Si cela continue et qu’il y a encore des gens qui veulent prendre l’ordre et vendre, le prix se rétablira probablement dans un très court laps de temps. Inversement , c’est pareil si quelqu’un veut vendre la monnaie.
Prenons comme exemple l’ordre en attente dans la figure. Si vous souhaitez acheter directement 5 pièces, le prix atteindra 10377. À ce moment-là, si quelqu’un souhaite vendre directement 5 pièces, le prix atteindra 10348. Cet espace est le profit espace. La stratégie consistera à passer une commande à un prix légèrement inférieur à 10377, par exemple 10376,99, et à acheter à un prix légèrement supérieur à 10348, par exemple 10348,01. Si la situation se produit actuellement, vous gagnerez évidemment la différence. Même si ce n’est pas toujours parfait, en raison de l’effet de probabilité, les chances de gagner de l’argent sont en fait étonnamment élevées.
Expliquons les opérations spécifiques avec les paramètres de la stratégie actuelle. Bien entendu, ce paramètre ne peut plus être utilisé, ce n’est qu’une explication. Il recherchera le prix avec un ordre de vente cumulé de 8 pièces, soit 10377 ici. Le prix de vente à ce moment est ce prix moins 0,01 (le montant moins peut être aléatoire). De même, il recherchera le prix avec un ordre d’achat cumulé de 8 pièces, ici 10348, alors le prix de vente à ce moment est de 10348,01, et la différence entre les prix d’achat et de vente est de 10376,99-10348,01=28,98, ce qui est supérieur à la différence de 1,5 prédéfinie par la stratégie. Ensuite, passez une commande à ces deux prix et attendez la transaction. Si la différence de prix est inférieure à 1,5, nous trouverons également un prix pour passer une commande, comme le prix du marché plus ou moins 10, en attendant une fuite (il serait plus approprié de continuer à chercher plus de profondeur).
Notez également que cette stratégie ne concerne que la profondeur actuelle des ordres en attente et ne tient pas compte des conditions historiques du marché ni de ses propres transactions historiques. La stratégie n’a pas non plus le concept de perte unique. En fait, le taux de gain unique est très élevé.
Explications complémentaires
Explication du code
Pour le code complet, vous pouvez voir mon partage de stratégie sur www.fmz.com. Ici, je n’expliquerai que les fonctions logiques de base. Sans aucun changement, le disque de simulation fourni avec les botvs fonctionne en fait tout à fait normalement. C’est une stratégie qui date de plus de 3 ans, et la plateforme la prend toujours en charge jusqu’à présent. C’est tellement touchant. Tout d’abord, nous devons utiliser GetPrice() pour obtenir le prix acheteur et vendeur. Nous devons obtenir les informations sur la profondeur de l’ordre. Notez que les longueurs des informations sur la profondeur de l’ordre des différentes plateformes sont différentes, et même si tous les ordres sont parcourus, il y a toujours aucune quantité requise (à un stade ultérieur, de nombreuses commandes de grille de 0,01 conduiront à cette situation), l’appel est GetPrice(‘Buy’) pour obtenir le prix d’achat.
function GetPrice(Type) {
//_C()是平台的容错函数
var depth=_C(exchange.GetDepth);
var amountBids=0;
var amountAsks=0;
//计算买价,获取累计深度达到预设的价格
if(Type=="Buy"){
for(var i=0;i<20;i++){
amountBids+=depth.Bids[i].Amount;
//参数floatamountbuy是预设的累计深度
if (amountBids>floatamountbuy){
//稍微加0.01,使得订单排在前面
return depth.Bids[i].Price+0.01;}
}
}
//同理计算卖价
if(Type=="Sell"){
for(var j=0; j<20; j++){
amountAsks+=depth.Asks[j].Amount;
if (amountAsks>floatamountsell){
return depth.Asks[j].Price-0.01;}
}
}
//遍历了全部深度仍未满足需求,就返回一个价格,以免出现bug
return depth.Asks[0].Price
}
La fonction principale de chaque boucle est onTick(). Le temps de boucle est fixé à 3,5 s. Chaque boucle annulera la commande d’origine et en placera une nouvelle. Plus elle est simple, moins il y a de risques de rencontrer des bugs.
function onTick() {
var buyPrice = GetPrice("Buy");
var sellPrice= GetPrice("Sell");
//diffprice是预设差价,买卖价差如果小于预设差价,就会挂一个相对更深的价格
if ((sellPrice - buyPrice) <= diffprice){
buyPrice-=10;
sellPrice+=10;}
//把原有的单子全部撤销,实际上经常出现新的价格和已挂单价格相同的情况,此时不需要撤销
CancelPendingOrders()
//获取账户信息,确定目前账户存在多少钱和多少币
var account=_C(exchange.GetAccount);
//可买的比特币量,_N()是平台的精度函数
var amountBuy = _N((account.Balance / buyPrice-0.1),2);
//可卖的比特币量,注意到没有仓位的限制,有多少就买卖多少,因为我当时的钱很少
var amountSell = _N((account.Stocks),2);
if (amountSell > 0.02) {
exchange.Sell(sellPrice,amountSell);}
if (amountBuy > 0.02) {
exchange.Buy(buyPrice, amountBuy);}
//休眠,进入下一轮循环
Sleep(sleeptime);
}
Queue
L’ensemble du programme ne fait qu’environ 40 lignes et semble très simple, mais il m’a fallu plus d’une semaine pour le terminer, et c’était sur la plateforme botvs. Le plus grand avantage est que j’ai commencé tôt. En 2014, le marché était dominé par l’arbitrage, et il n’y avait pas beaucoup de grilles à haute fréquence et de positions de capture, ce qui faisait de la stratégie un canard dans l’eau. Plus tard, la concurrence est devenue inévitablement plus forte et Il y a de plus en plus de défis à venir et nous devons faire des changements majeurs de temps en temps pour y faire face, mais dans l’ensemble, tout se passe bien. Lorsque la plateforme de trading ne facture pas de frais de traitement, c’est un paradis pour le trading programmatique. Les investisseurs particuliers sont enclins à opérer car ils ne facturent pas de frais de traitement, ce qui laisse de la place à la haute fréquence et à l’arbitrage. Tout cela est essentiellement réalisé avec le 0,1 -0,2% Les frais de transaction bidirectionnels ont pris fin. Il ne s’agit pas seulement d’une question de frais, mais aussi d’une baisse de l’activité globale du marché. Il existe néanmoins encore une grande marge de manœuvre pour les stratégies quantitatives qui ne nécessitent pas de fréquences élevées.