Die Strategie wurde von:https://www.fmz.com/strategy/1088Die Strategie ist meine Hauptstrategie, seit ich mit der digitalen Währung angefangen habe. Nach kontinuierlicher Verbesserung und Modifikation ist sie komplizierter geworden, aber die Hauptidee hat sich nicht geändert. Die freigegebene Version ist die ursprüngliche Version ohne offensichtliche Fehler. Sie ist die einfachste und klarste. Es gibt kein Positionsmanagement. Jede Transaktion ist voll und es gibt keinen Neustart, aber es reicht aus, um das Problem zu erklären.
Die Strategie lief von August 2014 bis Anfang dieses Jahres, als die Börse Gebühren. Während des Zeitraums war der Betrieb ziemlich gut, und die Zeit des Verlusts war sehr gering. Das Kapital ist von 200 Yuan auf 80 Bitcoin gestiegen. Der spezifische Prozess kann in gesehen werdenDer Weg der automatisierten Transaktion mit virtueller WährungArtikelreihe inXiaocao
Die folgende Grafik zeigt die in Währung umgerechnete Kurve der gesamten Vermögenswerte:
Das Prinzip dieser Strategie ist sehr einfach. Es kann als quasi-hohe Frequenz-Marktmachungsstrategie verstanden werden. Sie möchten vielleicht nach dem Lesen Leute treffen, kann es Geld verdienen?! Zu dieser Zeit konnte fast jeder es schreiben. Ich habe nicht erwartet, dass es am Anfang so effektiv sein würde. Es kann gesehen werden, dass wir der Praxis Aufmerksamkeit schenken sollten, sobald wir Ideen im Kopf haben. Wie alle Hochfrequenzstrategien basiert auch diese Strategie auf dem Auftragsbuch.
Wir können auf der linken Seite den Kaufbefehl sehen, der die Anzahl der Aufträge zu verschiedenen Preisen anzeigt, und auf der rechten Seite ist der Verkaufsbefehl. Man kann sich vorstellen, dass, wenn jemand Bitcoin kaufen möchte, wenn er nicht den Auftrag abwarten und warten möchte, er nur den Auftrag entgegennehmen kann. Wenn er eine große Anzahl von Aufträgen hat, wird dies dazu führen, dass eine große Anzahl von Transaktionen den Auftrag und die Liste verkaufen, was sich auf den Preis auswirken wird. Dieser Einfluss wird jedoch nicht anhalten. Einige Leute wollen den Auftrag entgegennehmen und verkaufen, und der Preis wird sich wahrscheinlich in sehr kurzer Zeit erholen. Umgekehrt ist es ähnlich wie zu verstehen, dass jemand Münzen verkaufen möchte. Nehmen wir zum Beispiel den ausstehenden Auftrag in der Abbildung. Wenn Sie 5 Münzen direkt kaufen möchten, wird der Preis 10377 erreichen. Wenn jemand 5 Münzen direkt verkaufen möchte, wird der Preis 10348 erreichen. Der Preisunterschied ist die Gewinnspanne. Die Strategie wird einen Auftrag zu einem etwas niedrigeren Preis als 10377, z. B. 10376,99, ausstecken und zu einem etwas höheren Preis als 10348, z. B. 10348,01 kaufen. Dies liegt daran, dass, wenn die Situation einfach passiert ist, der Unterschied offensichtlich verdient wird. Obwohl es nicht jedes Mal so perfekt sein wird, sind die Chancen, tatsächlich Geld zu verdienen, angesichts der Wahrscheinlichkeiten unglaublich hoch. Erklären Sie die spezifische Operation mit den Parametern der aktuellen Strategie. Dieser Parameter ist natürlich nicht verfügbar, nur zur Veranschaulichung. Er sucht nach einem Preis mit einer kumulierten Menge von 8 Münzen, hier ist 10377, dann ist der Verkaufspreis zu diesem Zeitpunkt der Preis minus 0.01 (der Betrag kann zufällig sein). Ähnlich wird er nach unten nach einer kumulierten Menge von 8 Münzen suchen, hier ist 10348, dann ist der Verkaufspreis zu diesem Zeitpunkt 10348.01, und die Differenz zwischen dem Kauf- und Verkaufspreis zu diesem Zeitpunkt ist 10376.99-10348.01 = 28.98, was größer ist als die voreingestellte Preisdifferenz von 1.5, also wird er einen Auftrag finden, auf die Transaktion mit diesen beiden Preisen zu warten, wenn die Preisdifferenz kleiner als 1.5 ist, wird er auch einen Auftrag finden, wie den Eröffnungspreis plus oder minus 10 und warten Sie weiter (es ist angemessen, die Tiefe des Abwarts zu verfolgen). Darüber hinaus ist zu beachten, dass diese Strategie nur mit den aktuellen tiefen ausstehenden Aufträgen zusammenhängt und sich nicht um den historischen Markt und seine eigene historische Transaktion kümmert. Die Strategie hat auch kein Konzept von Einzelverlusten. Tatsächlich ist die Gewinnrate einer einzelnen Transaktion sehr hoch.
Der vollständige Code kann in meinem Strategie-Sharing unterwww.fmz.com. Hier werden nur die Kernlogikfunktionen erklärt. Ohne Änderungen funktioniert der Simulationsbot, der mit botvs geliefert wird, tatsächlich perfekt. Dies ist eine Strategie vor mehr als drei Jahren, und die Plattform unterstützt sie noch heute. Es ist sehr bewegend.
Zunächst einmal müssen Sie die Ordertiefeninformationen von verschiedenen Plattformen erhalten, und selbst wenn alle Aufträge durchlaufen werden, gibt es immer noch keine erforderliche Menge (diese Situation wird durch viele 0,01 Gitterorders in der späteren Phase verursacht). Der Aufruf ist GetPrice (
function GetPrice(Type) {
//_C() is the fault-tolerant function of the platform
var depth=_C(exchange.GetDepth);
var amountBids=0;
var amountAsks=0;
//Calculate the buy price and get the cumulative depth to a preset price
if(Type=="Buy"){
for(var i=0;i<20;i++){
amountBids+=depth.Bids[i].Amount;
//The parameter floatamountbuy is the preset accumulated depth
if (amountBids>floatamountbuy){
//Add 0.01 to make the order in the front
return depth.Bids[i].Price+0.01;}
}
}
//Calculate the selling price similarly
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;}
}
}
//After traversing the full depth but still not meeting the demand, a price is returned to avoid bugs
return depth.Asks[0].Price
}
Die Hauptfunktion jeder Schleife ist onTick(). Die hier eingestellte Schleifezeit beträgt 3,5 Sekunden. Jede Schleife annulliert die ursprüngliche Bestellung und verlängert die Bestellung. Je einfacher sie ist, desto weniger wird sie auf einen Fehler stoßen.
function onTick() {
var buyPrice = GetPrice("Buy");
var sellPrice= GetPrice("Sell");
//diffprice is the preset spread, if the bid/ask spread is less than the preset spread, it will pend a relatively deeper price.
if ((sellPrice - buyPrice) <= diffprice){
buyPrice-=10;
sellPrice+=10;}
//Cancel all the original orders. In fact, the new price is often the same as the price of the order. At this time, it is not necessary to cancel.
CancelPendingOrders()
//Get account information to determine how much money and how many currencies are currently in the account.
var account=_C(exchange.GetAccount);
//The amount of Bitcoins that can be bought, _N() is the precision function of the platform.
var amountBuy = _N((account.Balance / buyPrice-0.1),2);
//The amount of Bitcoin that can be sold, note that there is no position limit, buy and sell as much as you can, as I had very little money at the time.
var amountSell = _N((account.Stocks),2);
if (amountSell > 0.02) {
exchange.Sell(sellPrice,amountSell);}
if (amountBuy > 0.02) {
exchange.Buy(buyPrice, amountBuy);}
//Sleep and enter the next loop
Sleep(sleeptime);
}
Das gesamte Programm ist nur über 40 Zeilen lang, was sehr einfach erscheint, aber es dauerte auch mehr als eine Woche, zu der Zeit, die auf der botvs-Plattform war. Der größte Vorteil ist, dass es früh begann. Im Jahr 2014 wurde der Markt von beweglichen Ziegeln dominiert, und die Hochfrequenz-Strategie des Netzwerks und der Bestandsaufnahme war nicht zu viele, was die Strategie wie ein Fisch im Wasser machte. Später wurde die Konkurrenz immer heftiger, und ich hatte mehr Geld und stand vor vielen Herausforderungen. Ich musste jedes zweite Mal große Änderungen vornehmen, um damit umzugehen, aber es war im Allgemeinen glatt. Unter der Bedingung, dass die Handelsplattform nicht berechnet wird, ist es ein Paradies für den programmierten Handel. Weil Einzelhändler dazu neigen, zu operieren, wenn es keine Gebühr gibt, bietet es Gelegenheit für Hochfrequenz- und Arbitragegebühren. All dies endet im Grunde mit den zwei-Wege-Gebühren von 0,1-0,2%. Es gibt jedoch noch viel Raum für hochfrequente quantitative Strategien.