Name
50行网格策略教学
Author
小小梦
Strategy Arguments
Argument | Default | Description |
---|---|---|
direction | true | 网格方向 |
_GridNum | 10 | 网格节点数量 |
_GridPointAmount | 0.1 | 网格节点下单量 |
_GridPointDis | 20 | 网格节点间距 |
_GridCovDis | 50 | 网格节点平仓差价 |
Source (javascript)
var _StopLoss = 0
var _StopWin = 0
var _Grid = []
function UpdateGrid(nowBidsPrice, nowAsksPrice, direction){ // up 1, down -1
if(_Grid.length == 0 || (direction == 1 && nowBidsPrice - _Grid[_Grid.length - 1].price > _GridPointDis) ||
(direction == -1 && _Grid[_Grid.length - 1].price - nowAsksPrice > _GridPointDis)){
var nowPrice = direction == 1 ? nowBidsPrice : nowAsksPrice
_Grid.push({
price: _Grid.length == 0 ? nowPrice : _Grid[_Grid.length - 1].price + _GridPointDis * direction,
hold : {price: 0, amount: 0},
coverPrice : _Grid.length == 0 ? nowPrice - direction * _GridCovDis : _Grid[_Grid.length - 1].price + _GridPointDis * direction - direction * _GridCovDis
})
var tradeInfo = direction == 1 ? $.Sell(_GridPointAmount) : $.Buy(_GridPointAmount)
_Grid[_Grid.length - 1].hold.price = tradeInfo.price
_Grid[_Grid.length - 1].hold.amount = tradeInfo.amount
$.PlotFlag(new Date().getTime(), JSON.stringify(tradeInfo), "O")
}
if(_Grid.length > 0 &&
((direction == 1 && nowAsksPrice < _Grid[_Grid.length - 1].coverPrice) || (direction == -1 && nowBidsPrice > _Grid[_Grid.length - 1].coverPrice))){
var coverInfo = direction == 1 ? $.Buy(_Grid[_Grid.length - 1].hold.amount) : $.Sell(_Grid[_Grid.length - 1].hold.amount)
_Grid.pop()
$.PlotFlag(new Date().getTime(), JSON.stringify(coverInfo), "C")
_StopWin++
} else if(_Grid.length > _GridNum){
var coverfirstInfo = direction == 1 ? $.Buy(_Grid[0].hold.amount) : $.Sell(_Grid[0].hold.amount)
_Grid.shift()
$.PlotFlag(new Date().getTime(), JSON.stringify(coverfirstInfo), "C")
_StopLoss++
}
}
function main(){
while(1){
var ticker = _C(exchange.GetTicker)
var records = _C(exchange.GetRecords)
$.PlotRecords(records, "kline")
UpdateGrid(ticker.Buy, ticker.Sell, direction)
var msg = ""
for(var i = 0; i < _Grid.length; i++){
msg += JSON.stringify(_Grid[i]) + "\n"
}
LogStatus(_D(), "_StopWin:", _StopWin, "_StopLoss:", _StopLoss, _C(exchange.GetAccount), "\n", "_Grid.length:", _Grid.length, "_GridNum:", _GridNum, "\n", msg)
Sleep(500)
}
}
Detail
https://www.fmz.com/strategy/113144
Last Modified
2018-08-25 18:19:22