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

기회 관찰

최근에 우연히 바이낸스 코인인 STORJ의 시장이 매우 이상하다는 것을 알게 되었습니다. 거래량이 매우 크고 거래 빈도가 매우 빠릅니다. 구체적인 1분 K-라인은 다음과 같습니다. 다음을 볼 수 있습니다. 분당 거래량은 매우 일정하며, 분 단위 선에 긴 하단 그림자가 나타납니다.
img
바이낸스의 1초 K-라인을 사용하여 우리는 단서를 찾았습니다. 누군가는 비용에 관계없이 5~7초마다 10,000~20,000 STORJ를 판매하고 K-라인에 작은 구덩이를 직접 만들었습니다. 내부에서 회복될 것입니다. 이 작전은 분명히 아이스버그의 의뢰에 따라 수행된 로봇에 의해 수행되었습니다. 이 판매 작업은 매우 오랫동안 지속되었고 총 금액은 수천만 달러로 추산되었습니다. 많은 경우 발생한 슬리피지는 1/1000에 달했으며 이는 이 전략의 실행자가 수만 달러를 잃었다는 것을 의미합니다. 거래가 미끄러져서 그렇습니다. 달러. 그러나 이러한 기계적인 작업과 활발한 거래는 시장 조작과 스캘핑에 대한 명확한 기회를 만들어냅니다.
img

원래의 스팟 고주파 전략을 간단히 수정하여 아이스버그 주문의 무분별한 판매를 특별히 이용하는 이 로봇을 만드는 데 걸린 시간은 불과 몇 분이었습니다.

전략적 사고

몇 초마다 시장 매도가 있을 것이므로 매수 주문장에서 10,000의 깊이만 찾아서 앞에 주문을 내면 됩니다. 이런 식으로 이 빙산이 매도될 때, 마켓메이킹 로봇이 그것을 받을 수 있는 확률이 높습니다. 이때는 거래가 매우 활발하고, 즉각적인 가격 하락도 일부 매수 주문을 유발합니다. 매도 주문을 하고 그에 따라 매도하는 데도 같은 원칙이 적용됩니다. 작업을 반복합니다. 거래 빈도가 매우 높고, 매번 수익률이 크지 않더라도 전체 수익은 여전히 ​​상당합니다. 물론, 모든 것의 전제는 낮은 거래 수수료가 있는 계정을 갖는 것입니다. 매수 및 매도 거래 수수료가 0.1%라면 이 공간은 거래 수수료를 지불하기에 충분하지 않습니다.

전략 성과

전략 성과는 다음과 같습니다. 처음에는 수익이 인쇄되지 않았습니다. 오늘 오후에 변경하여 수익을 인쇄했습니다. 미친 판매 로봇은 매번 수량을 약 5,000으로 변경하여 최상의 차익 거래 기간이 지났습니다. 처음에는 시간당 100-200U 정도 벌 수 있습니다. 중요한 것은 위험이 없고 비용이 저렴하다는 것입니다. 다른 측면에서 보면, 실제로 아이스버그 주문에는 많은 기술이 있습니다. 전략을 작성하는 방법을 알고 있다면 FMZ에서 단 12분 만에 전략을 작성할 수 있습니다. 매수 주문의 깊이를 관찰하여 주문 크기를 결정하고 가격을 확인하고, 활성 매수 주문의 크기를 관찰하여 보류 주문 크기를 조정합니다. 그리고 시장을 점유하는 것과 같은 특성을 가진 아이스버그 위탁 전략은 수만 달러를 쉽게 절약할 수 있습니다.

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)