Hợp đồng tiền kỹ thuật số dễ dàng theo dõi robot

Tác giả:Giấc mơ nhỏ, Ngày: 2021-04-07 15:14:23
Tags:Được hỗ trợ thương mại

Hợp đồng tiền kỹ thuật số dễ dàng theo dõi robot

Bài viết liên quan:https://www.fmz.com/bbs-topic/6821


/*backtest
start: 2021-03-18 00:00:00
end: 2021-04-07 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_OKCoin","currency":"BTC_USD"},{"eid":"Futures_OKCoin","currency":"BTC_USD"},{"eid":"Futures_OKCoin","currency":"BTC_USD"}]
*/

function test() {
    // 测试函数
    var ts = new Date().getTime()    
    if (ts % (1000 * 60 * 60 * 6) > 1000 * 60 * 60 * 5.5) {
        Sleep(1000 * 60 * 10)
    	var nowPosAmount = getPosAmount(_C(exchange.GetPosition), refCt)
    	var longPosAmount = nowPosAmount.long
    	var shortPosAmount = nowPosAmount.short
        var x = Math.random()
        if (x > 0.7) {
        	exchange.SetDirection("buy")
            exchange.Buy(-1, _N(Math.max(1, x * 10), 0), "参考账户测试开单#FF0000")
        } else if(x < 0.2) {
        	exchange.SetDirection("sell")
            exchange.Sell(-1, _N(Math.max(1, x * 10), 0), "参考账户测试开单#FF0000")
        } else if(x >= 0.2 && x <= 0.5 && longPosAmount > 4) {
        	exchange.SetDirection("closebuy")
        	exchange.Sell(-1, longPosAmount, "参考账户测试平仓#FF0000")
        } else if(shortPosAmount > 4) {
        	exchange.SetDirection("closesell")
        	exchange.Buy(-1, _N(shortPosAmount / 2, 0), "参考账户测试平仓#FF0000")
        }
    }
}

function getPosAmount(pos, ct) {
    var longPosAmount = 0
    var shortPosAmount = 0
    _.each(pos, function(ele) {
    	if (ele.ContractType == ct && ele.Type == PD_LONG) {
    		longPosAmount = ele.Amount
    	} else if (ele.ContractType == ct && ele.Type == PD_SHORT) {
    		shortPosAmount = ele.Amount
    	}
    })
    return {long: longPosAmount, short: shortPosAmount}
}

function trade(e, ct, type, delta) {
    var nowPosAmount = getPosAmount(_C(e.GetPosition), ct)
    var nowAmount = type == PD_LONG ? nowPosAmount.long : nowPosAmount.short
    if (delta > 0) {
        // 开仓
        var tradeFunc = type == PD_LONG ? e.Buy : e.Sell
        e.SetDirection(type == PD_LONG ? "buy" : "sell")
        tradeFunc(-1, delta)
    } else if (delta < 0) {
        // 平仓
        var tradeFunc = type == PD_LONG ? e.Sell : e.Buy
        e.SetDirection(type == PD_LONG ? "closebuy" : "closesell")
        if (nowAmount <= 0) {
        	Log("未检测到持仓")
        	return 
        }
        tradeFunc(-1, Math.min(nowAmount, Math.abs(delta)))
    } else {
    	throw "错误"
    }
}

function main() {
    LogReset(1)
    if (exchanges.length < 2) {
        throw "没有跟单的交易所"
    }
    var exName = exchange.GetName()
    // 检测参考交易所
    if (!exName.includes("Futures_")) {
        throw "仅支持期货跟单"
    }
    Log("开始监控", exName, "交易所", "#FF0000")
    
    // 检测跟单交易所
    for (var i = 1 ; i < exchanges.length ; i++) {
        if (exchanges[i].GetName() != exName) {
            throw "跟单的期货交易所和参考交易所不同!"
        }
    }
    
    // 设置交易对、合约
    _.each(exchanges, function(e) {
    	if (!IsVirtual()) {
    		e.SetCurrency(refCurrency)
            if (isSimulate) {
                if (e.GetName() == "Futures_OKCoin") {
                    e.IO("simulate", true)
                }
            }
    	}
        e.SetContractType(refCt)
        // 设置精度
        e.SetPrecision(pricePrecision, amountPrecision)
        Log("设置", e.GetName(), e.GetLabel(), "价格精度:", pricePrecision, "下单量精度:", amountPrecision)
    })

    var initRefPosAmount = getPosAmount(_C(exchange.GetPosition), refCt)
    while(true) {
        if (IsVirtual()) {    // 回测时才模拟
        	test()            // 测试函数,模拟参考账户主动交易,触发跟单账户跟单        
        }
    	Sleep(5000)
        var nowRefPosAmount = getPosAmount(_C(exchange.GetPosition), refCt)
        var tbl = {
            type : "table", 
            title : "持仓",
            cols : ["名称", "标签", "多仓", "空仓", "账户资产(Stocks)", "账户资产(Balance)"],
            rows : []
        }
        _.each(exchanges, function(e) {
            var pos = getPosAmount(_C(e.GetPosition), refCt)
            var acc = _C(e.GetAccount)
            tbl.rows.push([e.GetName(), e.GetLabel(), pos.long, pos.short, acc.Stocks, acc.Balance])
        })
        LogStatus(_D(), "\n`" + JSON.stringify(tbl) + "`")
        
        // 计算仓位变动量
        var longPosDelta = nowRefPosAmount.long - initRefPosAmount.long
        var shortPosDelta = nowRefPosAmount.short - initRefPosAmount.short

        // 检测变动
        if (longPosDelta == 0 && shortPosDelta == 0) {
        	continue
        } else {
        	// 检测到仓位变动
        	for (var i = 1 ; i < exchanges.length ; i++) {
        		// 执行多头动作
        		if (longPosDelta != 0) {
        			Log(exchanges[i].GetName(), exchanges[i].GetLabel(), "执行多头跟单,变动量:", longPosDelta)
        		    trade(exchanges[i], refCt, PD_LONG, longPosDelta)
        		}
        		// 执行空头动作
        		if (shortPosDelta != 0) {
        			Log(exchanges[i].GetName(), exchanges[i].GetLabel(), "执行空头跟单,变动量:", shortPosDelta)
        		    trade(exchanges[i], refCt, PD_SHORT, shortPosDelta)
        		}
        	}
        }

        // 执行跟单操作后,更新
        initRefPosAmount = nowRefPosAmount
    }
}


Có liên quan

Thêm nữa

pw1013Xin chào, làm thế nào để thêm nhiều giao dịch?

m 886Bạn có thể cộng v không?

lt4691888@163.comAnh bạn, thẻ này có thể sử dụng trên nhiều nền tảng không?

lctBạn có thể thêm V vào không?

17331171117Xin hỏi các tham số chiến lược ở đâu

fxhoverTrong khi đó, các nhà nghiên cứu cho biết, các nhà nghiên cứu đã nghiên cứu và nghiên cứu rất nhiều về các loại thuốc và các loại thuốc khác nhau.

Giấc mơ nhỏĐiều này có thể đòi hỏi phải thay đổi mã, kiểm tra tất cả thông tin lưu trữ tổng thể của một tài khoản, và xử lý từng tài khoản một.

pw1013Cảm ơn câu trả lời của bạn, nhưng nếu tôi muốn sao chép tất cả các cặp giao dịch của một tài khoản, xin hỏi làm thế nào để làm điều đó, một trong số đó là quá nhiều rắc rối, vấn đề này đã làm tôi lo lắng trong một thời gian dài -

Giấc mơ nhỏMột cách chiến lược, bạn có thể thêm nhiều đối tượng trên sàn giao dịch.

Giấc mơ nhỏXin chào, bạn có thể tham gia nhóm Telegram chính thức của FMZ ngay trên trang chủ của nền tảng, tôi cũng tham gia nhóm này.

Giấc mơ nhỏĐây là V3, API KEY xác định cấu hình là V5 và xác định chọn V5 khi cấu hình trên FMZ; đảm bảo nhà quản trị mới nhất.

17331171117Một số trong số v5 đã được tạo ra và không thành công.

Giấc mơ nhỏKhóa API được cấu hình không chính xác, hãy kiểm tra.

17331171117/upload/asset/18859d9a5a19f334f87be.png

17331171117/upload/asset/18859d9a5a19f334f87be.png

Giấc mơ nhỏ/upload/asset/1695c1168b60c8160718.png

Giấc mơ nhỏTrong mô tả chiến lược, bạn có thể xem địa chỉ bài viết, mã nguồn mở hoặc nghiên cứu trực tiếp mã.

fxhoverLàm thế nào để bạn sử dụng robot thanh toán của bạn?

Giấc mơ nhỏĐây là một robot thanh toán.