Ein einfacher Bitcoin-Hochfrequenz-Strategie-Roboter aus dem Jahr 2014

Schriftsteller:Das Gras, Datum: 21.10.2014 22:58:44
Tags:Hochfrequenz

Einführung der Strategie

Die Strategie, die sie teilen, ist:https://www.fmz.com/strategy/1088Diese Strategie ist die wichtigste Strategie, die ich seit meiner Arbeit mit der virtuellen Währung entwickelt habe. Sie wurde ständig weiterentwickelt und geändert, wurde viel komplizierter, aber die grundlegende Idee hat sich nicht geändert. Diese Version, die ich teile, ist die ursprüngliche Version ohne offensichtliche Bugs, am einfachsten klar, ohne Positionsverwaltung, jede Transaktion ist voll, ohne Karten-Tod-Restart usw. Die Strategie wurde von August 2014 bis zu Beginn des Jahres von den Börsen in Rechnung gestellt. Während der Zeit lief sie gut und verlor wenig Zeit. Das Geld flog von den ursprünglichen 200 US-Dollar auf 80 Bitcoins.Der Sina-Blog von Little GrassIch bin hier.Der Weg zur automatisierten virtuellen WährungSie ist ein junger Mann, der in der Schule lebt.

Warum diese Strategie teilen?

1. Nachdem die Börsen die Gebühren für die Handhabung berechnet haben, haben sie fast alle Hochfrequenz-Strategien getötet, auch meine. 2. Ich wollte diesen Artikel schon lange schreiben, seit ich lange nichts mehr geteilt habe. 3. Lernen Sie gemeinsam mit anderen.

Die Grundsätze der Strategie

Diese Strategie ist sehr einfach und kann als Quasi-Hochfrequenz-Marktstrategie verstanden werden. Sie werden vielleicht danach jemanden schlagen wollen, und das kann Geld verdienen. Zu diesem Zeitpunkt konnte fast jeder es schreiben. Wie bei allen High-Frequency-Strategien basiert diese auf einem Orderbuch, das eine typische Bitcoin-Börsen-Orderverteilung darstellt.imgMan kann sich vorstellen, wenn man Bitcoin kaufen will, wenn man nicht warten möchte, kann man sich nur dafür entscheiden, ob man es kaufen will. Wenn man mehr hat, wird es zu einer großen Anzahl von Transaktionen führen, die den Preis beeinträchtigen. Die Strategie ist es, etwas unter 10377, wie 10376.99, zu buchen und gleichzeitig etwas höher als 10348, wie 10348.01, zu kaufen, was offensichtlich die Differenz einbringt. Obwohl es nicht immer so perfekt ist, sind die Gewinnchancen unter der Wirkung der Wahrscheinlichkeit tatsächlich erstaunlich hoch. Der Parameter kann natürlich nicht mehr verwendet werden. Er sucht nach einem Preis für die kumulierte Verkaufs- und Verkaufsliste von 8 Münzen, hier ist 10377, also der Verkaufspreis ist dieser Preis minus 0.01 (wie viel abzüglich kann zufällig sein), und gleichermaßen sucht nach einem Preis für die kumulierte Bestellung von 8 Münzen, hier ist 10348, also der Verkaufspreis ist 10348.01, dann ist der Kaufpreis 10376.99-10348.01 = 28.98, der Preis ist größer als der von der Strategie vorausgesagte Unterschied von 1.5, also sucht man nach einem Preis für die Verkaufsliste, wenn der Preis kleiner als 1.5 ist, und sucht nach einem Preis für die Verkaufsliste, z. B. einen Preis von 10, plus eine Warteöffnung.

Weitere Informationen

  1. Was tun, wenn man kein Geld oder eine Münze hat? Dies ist sehr verbreitet, wenn ich weniger Geld habe, meistens hängt nur ein Teil auf der Seite, aber es ist kein großes Problem. Tatsächlich kann man sich der Logik des Geldgleichgewichts anschließen, aber im Gleichgewichtsprozess kann es unweigerlich zu Verlusten kommen.
  2. Wie werden die Positionen verwaltet? Zu Beginn waren die Geschäfte vollständig gekauft und verkauft, später wurden sie nach verschiedenen Parametern in verschiedene Gruppen unterteilt, ohne dass die Transaktionen auf einmal vollständig abgeschlossen wurden.
  3. Ist es nicht zu stoppen? Die Strategie hat die vollständige Logik der Kauf- und Verkaufsliste, ich denke, dass es keinen Stopp-Loss gibt (es kann diskutiert werden), und es gibt die Wahrscheinlichkeit, dass es eine Chance ist, dass es eine Chance ist, dass es einen Stopp-Loss gibt.
  4. Wie kann man die Strategie für die Münze anpassen? Die Parameter sind symmetrisch, d.h. die kumulierten Verkaufs- und Verkaufsoptionen von 8 Münzen nach oben und 8 Münzen nach unten werden etwas ungleichgewichtig, z.B. die kumulierten Verkaufs- und Verkaufsoptionen von 15 Münzen nach oben werden schwieriger verkauft, und es besteht eine größere Wahrscheinlichkeit, dass die Münze zu einem niedrigeren Preis zurückgekehrt wird.

Code-Erläuterung

Der vollständige Code kann auf www.fmz.com geteilt werden, wo ich nur die Kernlogikfunktionen beschreibe. Zunächst ist es notwendig, die Ordertiefe-Informationen zu erhalten. Beachten Sie, dass die Ordertiefe-Informationen auf verschiedenen Plattformen unterschiedlich lang sind und dass die Menge, die benötigt wird, nicht erreicht wird, selbst wenn alle Bestellungen durchlaufen wurden.

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
}

Die Hauptfunktion für jeden Lauf ist onTick (), wobei die Laufzeit von 3,5 s festgelegt wird, wobei die ursprüngliche Einheit bei jedem Lauf widerrufen und neu aufgehängt wird, und je einfacher, desto weniger Bugs auftreten.

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);
}

Schwanz

Das Ganze dauerte auch über 40 Zeilen und schien sehr einfach, aber es dauerte auch eine Woche, und das war immer noch der Fall mit der botvs-Plattform. Der größte Vorteil war, dass ich früh anfing. Im Jahr 2014 war der Markt nicht so stark verlagert, die Netze und die hohe Frequenz von Raubvorräten machten die Strategie wie ein Fisch, und die Konkurrenz wurde immer härter. Aber es gibt einen großen Raum für Quantifizierungsstrategien, die keine hohen Frequenzen erfordern.


/*
就是我刚开始编写机器人的源代码,几乎没有改动,参数也是原来的参数。这个版本的程序有许多
需要改进的地方,但即使如此,它也当时表现除了惊人的盈利能力,在我本金不多时,不加杠杆平
均每天盈利在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();
    }
}

Verwandt

Mehr

GohwaDas ist eine Strategie, oder? Es scheint, als ob manche Börsen jetzt einen Teil der Münze kostenlos anbieten.

a624587332Binance-BTC-Kontaktgeschäfte sind kostenlos und können wieder funktionieren

AbcdsfasdfhzwEinseitige Transaktionen? Ich sehe, dass der Code nach dem Kauf nicht verkauft wird, nach dem Verkauf nicht gekauft wird.

ZeiträumeWarum ist das jetzt nicht mehr möglich? Gibt es noch eine nützliche Strategie?

- Das ist nicht wahr.Ich habe ein Zeichen gemacht, und ich warte auf eine verbesserte Version.

- Ich weiß.Ich bin sehr dankbar, dass Sie das geteilt haben und dass es sehr hilfreich war. Ich freue mich auf den Dialog und auf den Austausch von tiefgründigen Gedanken. Danke, danke!

- Das ist logisch.Wir haben es geschafft.