80行コードの高周波戦略で脳のないロボットを搾取して売る方法

作者: リン・ハーン小草作成日:2023年12月24日 21:37:45 更新日:2023年12月26日 15:40:23

img

観察する機会

最近の2日間,市場を見ていたら,BINANがBININSTORJの市場を持っていることに気づきました. 取引量は非常に多く,取引頻度は非常に速く,特定の1分間のKラインの図は,毎分取引量は一致していることがわかります.imgビナンの1秒級K線を用いて観察すると,端末が発見され,誰かが5-7秒間ごとに20,000STORJを売り,コストを考慮せずに,直接K線に小さな穴を掘り,価格は短期間に回復する.この操作は明らかに氷山委託ロボットによって引き起こされた.この販売された操作は非常に長い期間であり,総額は100万ドルのレベルに達すると推定され,多くの場合,スライドポイントは千分の"に達し,これは取引のスライドポイントだけで意味し,この戦略の実行者は数十万ドルを失います.しかし,機械操作と活発な取引は明らかに市場を剥奪する機会があります.img

このロボットは,この氷山を売る頭が全くない人を搾取するために,数分間で,原始の即時高周波戦略を単純に変更しました.

戦略的なアイデア

市場価格が数秒ごとに売り上げられるので,取引簿に1万の深さをみつけ,単体を前に掛けるだけです. このように,この氷山が売り上げられたとき,市場ロボットがちょうど受け取る可能性が高い可能性があり,取引は非常に活発で,瞬間の価格の下落もいくつかの買い上げを誘発しました. 同じように,単位の順番を投げ出しても,繰り返し操作できます. 取引の頻度は非常に高く,毎回収益が少ないとしても,総収益はかなり目に見えます. もちろん,すべての前提は,手続費が低い口座があり,買い出の手続費が千分の"である場合,このスペースは手続費を支払うのに根本的に不十分です.

戦略的な表現

戦略表現は以下の通り,最初は収益も印刷されていなかったが,今午後は変更され,収益を印刷した.狂った販売ロボットは,毎回約5000の量を変更したので,最適な利息時期が過ぎました. スタートは,1時間あたりおそらく100-200Uを稼働させることができます. 鍵はリスクなし,低コストです. ここから見ると,逆に,氷山委託は実際には多くの技巧があります.

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

もっと

チェックポイント草の神様,走るこの戦術の費用はどれくらいですか?

yc123h小草先生,この戦略が有効である場合は,毎回練習の開始時に,撤回前の2つの注文が失敗したメッセージが頻繁に表示されるかどうかです. (つまり,買取券が有効であることを示す).

小草これは0の手数料です.

yc123hありがとう,また,パラメータについて質問したいです. 例えば,この高周波戦略は,パラメータを最適化する方法です. 例えば,私が2014年に共有した戦略を見て,デフォルトの回転訓練間隔は3500msに達し,高周波の場合,回転訓練間隔は,少し短く良いですか. しかし,あまりにも短い場合,取引は非常に困難です.

小草撤廃は失敗で,取引で,お金で,それが有効であることを証明します.