Chiến lược điểm chuyển đổi hai đường thẳng tương lai tiền kỹ thuật số (giảng dạy)

Tác giả:Giấc mơ nhỏ, Ngày: 2021-12-03 11:25:28
Tags:

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


/*backtest
start: 2021-09-01 00:00:00
end: 2021-12-02 00:00:00
period: 1h
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/

var LONG = 1 
var SHORT = -1
var IDLE = 0

function getPosition(positions, direction) {
    var ret = {Price : 0, Amount : 0, Type : ""}
    _.each(positions, function(pos) {
        if (pos.Type == direction) {
            ret = pos
        }
    })
    return ret 
}

function cancellAll() {
    while (true) {
        var orders = _C(exchange.GetOrders)
        if (orders.length == 0) {
            break
        } else {
            for (var i = 0 ; i < orders.length ; i++) {
                exchange.CancelOrder(orders[i].Id, orders[i])
                Sleep(500)
            }
        }
        Sleep(500)
    }
}

function cover(tradeFunc, direction) {
    var mapDirection = {"closebuy": PD_LONG, "closesell": PD_SHORT}
    var positions = _C(exchange.GetPosition)
    var pos = getPosition(positions, mapDirection[direction])
    if (pos.Amount > 0) {
        cancellAll()
        exchange.SetDirection(direction)
        if (tradeFunc(-1, pos.Amount)) {
            return true 
        } else {
            return false 
        }
    }
    return true 
}

function main() {
    if (okexSimulate) {
        exchange.IO("simulate", true) // 切换到OKEX V5模拟盘测试 
        Log("切换到OKEX V5模拟盘")
    }    
    exchange.SetContractType(ct)
    var state = IDLE
    var holdPrice = 0
    var preTime = 0

    while (true) {
        var r = _C(exchange.GetRecords)
        var l = r.length
        if (l < Math.max(ema1Period, ema2Period)) {
            Sleep(1000)
            continue
        }
        var ema1 = TA.EMA(r, ema1Period)
        var ema2 = TA.EMA(r, ema2Period)
        
        // 画图
        $.PlotRecords(r, 'K线')
        if(preTime !== r[l - 1].Time){
            $.PlotLine('ema1', ema1[l - 2], r[l - 2].Time)
            $.PlotLine('ema2', ema2[l - 2], r[l - 2].Time)
            
            $.PlotLine('ema1', ema1[l - 1], r[l - 1].Time)
            $.PlotLine('ema2', ema2[l - 1], r[l - 1].Time)
            preTime = r[l - 1].Time
        } else {
            $.PlotLine('ema1', ema1[l - 1], r[l - 1].Time)
            $.PlotLine('ema2', ema2[l - 1], r[l - 1].Time)
        }
        
        var up = (ema1[l - 2] > ema1[l - 3] && ema1[l - 4] > ema1[l - 3]) && (ema2[l - 2] > ema2[l - 3] && ema2[l - 4] > ema2[l - 3])
        var down = (ema1[l - 2] < ema1[l - 3] && ema1[l - 4] < ema1[l - 3]) && (ema2[l - 2] < ema2[l - 3] && ema2[l - 4] < ema2[l - 3])
        if (up && (state == SHORT || state == IDLE)) {
            if (state == SHORT && cover(exchange.Buy, "closesell")) {
                state = IDLE
                holdPrice = 0
                $.PlotFlag(r[l - 1].Time, 'coverShort', 'CS')
            }
            exchange.SetDirection("buy")
            if (exchange.Buy(-1, amount)) {
                state = LONG
                holdPrice = r[l - 1].Close
                $.PlotFlag(r[l - 1].Time, 'openLong', 'L')
            }
        } else if (down && (state == LONG || state == IDLE)) {
            if (state == LONG && cover(exchange.Sell, "closebuy")) {
                state = IDLE
                holdPrice = 0
                $.PlotFlag(r[l - 1].Time, 'coverLong', 'CL')
            }
            exchange.SetDirection("sell")
            if (exchange.Sell(-1, amount)) {
                state = SHORT
                holdPrice = r[l - 1].Close
                $.PlotFlag(r[l - 1].Time, 'openShort', 'S')
            }
        }
        
        // 止盈
        if (state == LONG && r[l - 1].Close - holdPrice > profitTarget && cover(exchange.Sell, "closebuy")) {            
            state = IDLE
            holdPrice = 0
            $.PlotFlag(r[l - 1].Time, 'coverLong', 'CL')
        } else if (state == SHORT && holdPrice - r[l - 1].Close > profitTarget && cover(exchange.Buy, "closesell")) {            
            state = IDLE
            holdPrice = 0
            $.PlotFlag(r[l - 1].Time, 'coverShort', 'CS')
        }
        LogStatus(_D())
        Sleep(500)        
    }
}

Thêm nữa

xxs1xxs1Ông chủ, tôi đã sửa đổi một chút, kết quả trông rất tốt. Bạn đã đưa ra một vài lời khuyên. Đọc thêm: https://www.fmz.com/m/edit-strategy/359761

Thiên đàng và tài sảnCô giáo: Bạn đã thực hiện bài kiểm tra về chiến lược giảng dạy bao nhiêu lần?

Thiên đàng và tài sảnTôi bắt đầu chơi, không có phản ứng nào.

Thiên đàng và tài sản/upload/asset/2152afd2a78355e8ce25b.png

Thiên đàng và tài sảnBuy ((-1, 5): 400: {"code":-2019, "msg:"Margin is insufficient. "} Ý nghĩa là gì?

Thiên đàng và tài sảnChị Chị Mùi: Xin vui lòng gửi tin nhắn cho tôi nhé?

Thiên đàng và tài sảnBạn có thể sử dụng chiến lược này trên máy tính thực không?

Cyclk9macd giao thoa mua lên mua xuống bán đồng thời chuyển đổi đơn hàng, không chỉ thắng, chỉ dừng lỗ như thế nào viết

13826543292Cảm ơn Chúa, thật tuyệt vời.

Giấc mơ nhỏĐược rồi, nghiên cứu này là nghiên cứu.

xxs1xxs1Ông già, bạn có thể đưa ra một chiến lược để khóa và mở kho không? Trong khi đó, một số người cho rằng chiến lược dừng lỗ trực tiếp là quá mạnh.

Giấc mơ nhỏĐược rồi, chúng tôi sẽ chia sẻ nhiều chiến lược hơn trong tương lai, cảm ơn vì đã hỗ trợ FMZ.

xxs1xxs1Chỉ cần nói ông chủ là bạn thực sự là 666 Tôi chỉ sử dụng lợi thế lợi nhuận. Bạn hãy thử thử EOS. Tôi đang nghiên cứu để xem liệu có thể không. Hiện tại, ước tính không đủ để trả phí. Tôi có thể thử một hợp đồng BUSD giá rẻ.

Giấc mơ nhỏCó thể là tài sản tài khoản chưa đủ.

Giấc mơ nhỏThông thường, đòn bẩy khi kiểm tra lại là 10 lần.

Giấc mơ nhỏX. X, tôi cũng không cho phép. Nhưng nói về phiên bản tối ưu của bạn 666, Sharp cao như thế nào?

Thiên đàng và tài sảnĐó là hợp đồng của bạn, phải không?

Giấc mơ nhỏBạn có tài khoản không đủ tiền bảo lãnh, không đủ tiền để đặt hàng.

Giấc mơ nhỏCó thể tìm thấy ví dụ tham khảo tại quảng trường chiến lược.