La stratégie est présentée
La stratégie est de partager:https://www.fmz.com/strategy/1088Cette stratégie est ma principale stratégie depuis que j'ai fait de la monnaie virtuelle, et après avoir été continuellement améliorée et modifiée, elle est devenue beaucoup plus compliquée, mais l'idée principale n'a pas changé. Cette version partagée est la version initiale sans bugs évidents, la plus simple et la plus claire, sans gestion de position, chaque transaction est pleine, sans redémarrage après la mort de la carte, etc., mais elle suffit à expliquer le problème. La stratégie a fonctionné d'août 2014 jusqu'au début de l'année où les échanges ont commencé à facturer des frais de transaction.Le blog Sina du petit foinJe suis désolé.La voie vers l'automatisation des transactions en monnaie virtuelleUne série d'articles.
Pourquoi partager cette stratégie?
1. l'échange a tué presque toutes les stratégies de haute fréquence après avoir facturé des frais de service, et je ne suis pas la seule à le faire. Je n'ai rien partagé depuis longtemps, j'avais envie d'écrire cet article depuis longtemps. 3. Partager et apprendre avec tout le monde.
Les principes de la stratégie
Cette stratégie est extrêmement simple et peut être comprise comme une stratégie de marché à haute fréquence, vous pouvez voir que vous voulez peut-être battre quelqu'un, cela peut gagner de l'argent, alors que presque tout le monde pouvait l'écrire. Je ne m'attendais pas à ce que cela soit aussi efficace au début, je vois que j'avais l'idée de me dépêcher de le mettre en pratique et de dire qu'il n'y a pas forcément de surprises. Comme pour toutes les stratégies de haute fréquence, cette stratégie est basée sur le livre d'ordres.On peut voir à gauche le paiement, qui montre le nombre d'ordres en attente à des prix différents, et à droite le paiement. On peut imaginer que si une personne veut acheter du bitcoin, si elle ne veut pas attendre, elle ne peut choisir que de l'acheter. Si elle a plus de billets, cela provoquera un grand nombre de transactions, ce qui provoquera un choc pour le prix. L'exemple de l'enchère dans le graphique est que si l'on achète directement 5 pièces, le prix atteint 10377, alors que si l'on vend directement 5 pièces, le prix atteint 10348, ce qui est un espace de profit. La stratégie consiste à acheter à un prix légèrement inférieur à 10377, par exemple 10376.99, tout en achetant à un prix légèrement supérieur à 10348, par exemple 10348.01, ce qui, si c'est le cas, va évidemment gagner la différence. Pour expliquer l'opération concrète avec les paramètres de la stratégie actuelle, ce paramètre ne peut bien sûr pas être utilisé, mais seulement comme une illustration. Il va chercher vers le haut le prix de la quantité cumulée de l'ordre de vente suspendue de 8 pièces, ici est 10377, alors le prix de vente à ce moment-là est ce prix moins 0.01 (moins combien peut être aléatoire), de la même manière chercher vers le bas l'ordre de vente cumulé suspendu de 8 pièces, ici est 10348, alors le prix de vente à ce moment-là est 10348.01, alors la différence de prix d'achat est 10376.99-10348.01 = 28.98, plus grand que le prix prévu par la stratégie différence de 1.5, de sorte que si les deux prix d'achat suspendus sont livrés, le prix est inférieur à 1.5, il va aussi chercher un prix de réduction pour l'ordre de vente suspendue, comme le prix d'interruption 10, plus une attente de la fente (le plus approprié devrait être de continuer à chercher plus profondément).
En savoir plus
L'explication du code
Le code complet peut être vu sur mon site www.fmz.com, où je partage la stratégie, qui explique uniquement les fonctions logiques de base. Tout d'abord, il est nécessaire d'obtenir des informations sur la profondeur de l'ordre, en tenant compte de la différence de longueur de l'information sur la profondeur de l'ordre sur différentes plateformes, et de la situation où, même après avoir parcouru toutes les commandes, il n'y a toujours pas la quantité requise.
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 cycle est onTick (), où la durée de cycle est de 3,5 s. Chaque cycle annule le bloc d'origine et le ré-enchaîne, ce qui réduit le risque de 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);
}
La queue
L'ensemble du processus a également plus de 40 lignes, semble très simple, mais il m'a également pris plus d'une semaine à l'époque, ce qui est encore le cas sur la plate-forme botvs. Le plus grand avantage est de commencer tôt, en 2014, le marché est principalement basé sur le déménagement, les réseaux et les prises de contrôle ne sont pas très fréquents, ce qui rend la stratégie comme l'eau, puis la concurrence devient inévitablement plus féroce, mon argent est de plus en plus, les défis sont de plus en plus nombreux, il faut faire des changements plus importants à chaque fois, mais globalement, c'est bien. Mais il y a beaucoup de marge de manœuvre pour des stratégies de quantification qui ne nécessitent pas de fréquences élevées.
/* 就是我刚开始编写机器人的源代码,几乎没有改动,参数也是原来的参数。这个版本的程序有许多 需要改进的地方,但即使如此,它也当时表现除了惊人的盈利能力,在我本金不多时,不加杠杆平 均每天盈利在5%左右。当然无论从哪一方面,它都不适应今天的市场。 我同时也发了一篇文章在社区,大家可以看看。 by 小草 */ //稍微改了一下,用了平台的容错函数_C(),和精度函数_N(). //取消全部订单 function CancelPendingOrders() { var orders = _C(exchange.GetOrders); for (var j = 0; j < orders.length; j++) { exchange.CancelOrder(orders[j].Id, orders[j]);} } //计算将要下单的价格 function GetPrice(Type,depth) { 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 } function onTick() { var depth=_C(exchange.GetDepth); var buyPrice = GetPrice("Buy",depth); var sellPrice= GetPrice("Sell",depth); //买卖价差如果小于预设值diffprice,就会挂一个相对更深的价格 if ((sellPrice - buyPrice) <= diffprice){ buyPrice-=10; sellPrice+=10;} //把原有的单子全部撤销,实际上经常出现新的价格和已挂单价格相同的情况,此时不需要撤销 CancelPendingOrders() //获取账户信息,确定目前账户存在多少钱和多少币 var account=_C(exchange.GetAccount); //可买的比特币量 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); } function main() { while (true) { onTick(); } }
le guohwaC'est une stratégie à la main, non? Maintenant, il y a des échanges qui semblent avoir une partie de la monnaie gratuite, et on peut s'en charger?
a624587332Les transactions en BTC sont gratuites et peuvent-elles être effectuées?
Je ne sais pas.J'ai vu dans le programme qu'il n'y avait pas de code vendu après l'achat, pas de code vendu après l'achat.
le tempsPourquoi ne pas l'utiliser maintenant?
- Je vous en prie.Faites une marque et attendez une version améliorée.
- Je vous en prie.Merci beaucoup de partager, c'est très utile. Nous attendons avec impatience d'autres échanges d'idées aussi profondes. Merci merci!
Le logueJe suis désolé.