以下测试代码,对于不同的数据粒度(A.实盘级别回测、B.模拟级别回测较小底层K线周期、C.模拟级别回测较大底层K线周期、其它等..),均有不同表现。交易次数、盈亏结果均不同。回测时应尽量保持较小的数据粒度,数据粒度过大可能回测较快,但是结果可能并不客观。
/*backtest
start: 2025-04-01 08:00:00
end: 2025-04-18 00:00:00
period: 1m
exchanges: [{"eid":"Binance","currency":"BTC_USDT","balance":1000000}]
mode: 1
*/
var delta = 50
var lotSize = 0.001
var lastPrice = null
var direction = null
function main() {
while (true) {
var ticker = _C(exchange.GetTicker)
if (!lastPrice) {
lastPrice = ticker.Last
}
var diff = ticker.Last - lastPrice
if ((!direction || direction == "long") && diff >= delta) {
// 价格上涨超过阈值 -> 做空
exchange.Sell(ticker.Last, lotSize)
Log("做空 @", ticker.Last)
direction = "short"
} else if ((!direction || direction == "short") && diff <= -delta) {
// 价格下跌超过阈值 -> 做多
exchange.Buy(ticker.Last, lotSize)
Log("做多 @", ticker.Last)
direction = "long"
}
// Tick 模式中尽可能短,K线回测中没影响
Sleep(100)
}
}