Type/to search
3
Follow
1505
Followers
80 行のコードで高頻度戦略による無知な販売ロボットを利用する方法
HFT
Created 2023-12-24 21:37:45  Updated 2023-12-26 15:40:23
 7
 5969

img

機会観察

最近、偶然、BinanceのコインであるSTORJの市場が非常に奇妙であることを発見しました。取引量が非常に大きく、取引頻度が非常に速いです。具体的な1分間のKラインは次のとおりです。 1分あたりの取引量は非常に安定しており、1分足では長い下ヒゲが見られます。
img
Binanceの1秒Kラインを観察することで、手がかりを見つけました。誰かがコストに関係なく5〜7秒ごとに10,000〜20,000 STORJを売却し、Kラインの小さな穴を直接ヒットします。その中で回復します。この作戦は明らかにアイスバーグが依頼したロボットによって行われた。この売り操作は非常に長く続き、総額は数千万ドルと推定されています。多くの場合、発生したスリッページは1/1000に達し、この戦略の実行者は数万ドルの損失を被ったことになります。取引のずれによるものです。ドル。しかし、このような機械的な操作や活発な取引は、マーケットメイクやスキャルピングの明らかな機会を生み出します。
img

オリジナルのスポット高頻度戦略を単純に変更するだけで、アイスバーグ注文の無意識の売りを特に利用するこのロボットを構築するのに数分しかかかりませんでした。

戦略的思考

数秒ごとに市場での売りが発生するため、買い注文書で 10,000 の深さを見つけて、その前に注文を出すだけで済みます。このように、この氷山が売られると、マーケットメイキングロボットがそれを受け取ることができる可能性が高くなります。このとき、取引は非常に活発で、瞬間的な価格下落もいくつかの買い注文を引き起こします。売り注文を出し、それに応じて売却する場合も同じ原則が適用されます。操作を繰り返します。取引頻度が非常に高く、1回あたりの収益率は大きくないとしても、総利益は相当な額になります。もちろん、すべての前提は取引手数料が低い口座を持つことです。売買の取引手数料が0.1%であれば、このスペースでは取引手数料を支払うのに十分ではありません。

戦略パフォーマンス

戦略パフォーマンスは次のとおりです。 最初は利益が印刷されませんでした。 今日の午後に変更して利益を印刷しました。 クレイジーセリングロボットは、数量を毎回約5,000に変更したため、最高の裁定期間が過ぎました。最初は1時間あたり100~200U程度稼げます。リスクがなく、低コストなのがポイントです。逆に見てみると、氷山注文には実は多くのテクニックがあります。戦略の書き方を知っていれば、FMZで10分ほどで戦略を書くことができます。買い注文の深さを観察して注文サイズを決定し、価格を監視し、アクティブな買い注文のサイズを観察して保留中の注文のサイズを調整します。そして、市場を占有するなどの特徴を持つ氷山委託戦略は、簡単に数万ドルを節約できます。

img

戦略ソースコード

戦略コードは非常にシンプルで、わずか 80 行です。初心者に適しています。単精度などの一部のパラメータはプログラムにハードコードされています。自分で変更できます。必要なパラメータは下の図のとおりです。交換取引ペアが将来必要になった場合に備えて保存することをお勧めします。もう一つのクレイジーな取引があります。いつでも利息を請求できます。
img

function CancelPendingOrders() { var orders = _C(exchange.GetOrders) for (var j = 0; j < orders.length; j++) { exchange.CancelOrder(orders[j].Id, orders[j]) } } function onexit(){ CancelPendingOrders() } function GetPrice(Type, Depth) { var sumAmount = 0 var checkAmount = Type == "Buy" ? CheckBuyAmount : CheckSellAmount var deep = Type == "Buy" ? Depth.Bids : Depth.Asks for(var i = 0; i < Math.min(20, deep.length); i++) { if(Type == "Buy" && deep[i].Price == lastBuyPrice && buyId){ sumAmount += deep[i].Amount - amountBuy //这里要减去自己的挂单 }else if(Type == "Sell" && deep[i].Price == lastSellPrice && sellId){ sumAmount += deep[i].Amount - amountSell }else{ sumAmount += deep[i].Amount } if(sumAmount >= checkAmount){ return deep[i].Price } } return deep[19].Price } function OnTick() { var depth = _C(exchange.GetDepth) var buyPrice = _N(Math.min(GetPrice("Buy", depth) + 0.0001, depth.Asks[0].Price-0.0001) , 4) //保证在盘口 var sellPrice = _N(Math.max(GetPrice("Sell", depth) - 0.0001, depth.Bids[0].Price+0.0001), 4) LogStatus('buy_price:'+buyPrice, ' sell price: '+sellPrice) if ((sellPrice - buyPrice) < DiffPrice) { buyPrice = 0 } if(sellPrice != lastSellPrice && sellId){ exchange.CancelOrder(sellId); sellId = 0 lastSellPrice = 0 } if(buyPrice != lastBuyPrice && buyId){ exchange.CancelOrder(buyId); buyId = 0 lastBuyPrice = 0 } var acc = _C(exchange.GetAccount) if(account.Stocks+account.FrozenStocks != acc.Stocks+acc.FrozenStocks){ LogProfit((acc.Stocks+acc.FrozenStocks)*depth.Bids[0].Price+acc.Balance+acc.FrozenBalance - 2000) Log('free '+acc.Stocks, ' lock: '+ acc.FrozenStocks, ' total: ' , (acc.Stocks+acc.FrozenStocks)*depth.Bids[0].Price+acc.Balance+acc.FrozenBalance) } account = acc amountBuy = _N(Math.min(account.Balance / buyPrice - 0.1, Amount), 0) amountSell = _N(account.Stocks, 0) if (sellPrice > 0 && amountSell > 40 && sellId == 0) { sellId = exchange.Sell(_N(sellPrice,4), amountSell) lastSellPrice = sellPrice } if (buyPrice>0 && amountBuy > 40 && buyId == 0) { buyId = exchange.Buy(_N(buyPrice,4), amountBuy) lastBuyPrice = buyPrice } Sleep(Interval) } var account = {Stocks:0, FrozenStocks:0, Balance:0, FrozenBalance:0} var buyId = 0 var sellId = 0 var lastBuyPrice = 0 var lastSellPrice = 0 var amountSell = 0 var amountBuy = 0 function main() { CancelPendingOrders() while (true) { OnTick() } }
Comment
All comments (7)

    复刻出来了,测试中,感觉还是能赚的都

    10 months ago

    期货能用这个策略吗

    a year ago

    草神,跑的这个策略手续费是多少

    2 years ago

    这个是0手续费

    2 years ago

    小草老师请教一下,这个策略生效的情况下,是不是每个轮训开始,经常能看到撤销之前的两个订单失败的消息(也就是说明买卖单都生效了),才说明策略是有效的

    2 years ago

    撤销失败是成交了,赚钱了才能说明有效

    2 years ago

    哦哦谢谢,另外就是还想向您请教下参数的问题。像这种高频策略如何优化参数。例如我看您分享的2014年的策略,默认的轮训间隔达到了3500ms,如果是高频的话,轮训间隔是不是应该短一点比较好。但是太短的话成交也挺难的,如果太长的话,收市场波动的影响就很大了,如果持仓后没有能够在利润点卖出去,就可能亏损。这块我不是太明白。。

    2 years ago
  • 1
iPhone Download
Forums
PINE Language
© 2015 - ∞ INVENTOR PTE LTD (SG)