디지털 통화 선물 쌍평선 전환점 전략 (교육)

저자:작은 꿈, 날짜: 2021-12-03 11:25:28
태그:

관련 기사: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)        
    }
}

더 많은

xxs1xxs1"이봐요, 선생님, 저는 당신의 작은 것을 조금 수정했습니다. 당신은 조언을 해주세요. 이 글은 이쪽에서 읽었습니다.

천하의 재물조영미 선생님: 시험에서 얼마나 많은 수업 전략을 사용하셨나요?

천하의 재물"이봐요, 이봐요, 이봐요.

천하의 재물/upload/asset/2152afd2a78355e8ce25b.png

천하의 재물Buy ((-1, 5): 400: {"코드":-2019, "msg:"마린이 부족하다. "} 무슨 뜻이야~ 한 분마다

천하의 재물소림 선생님, 微信을 추가해 주시겠습니까?

천하의 재물이 전략은 실제 디스크에서 실행될 수 있습니까?

실크9macd는 상향과 상향을 교차하고 동시에 상향과 상향을 판매합니다.

13826543292감사합니다. 정말 대단합니다.

작은 꿈이 연구는 매우 흥미롭습니다.

xxs1xxs1"이봐요, 노부님, 잠금을 풀기 위한 전략을 구해낼 수 있나요? 아니면 아이디어도 작동할까요?" 우리는 이 전략이 너무 강력하다는 것을 알고 있습니다. 우리는 다음 시장을 기다려야 합니다.

작은 꿈좋은 소식입니다. 앞으로 더 많은 전략을 공유할 것입니다.

xxs1xxs1당신이 진짜 666이라고 말할 수 있습니다. 저는 단지 이윤의 장점을 이용했습니다. 여러분은 EOS 테스트를 해 보세요. 올해부터 현재까지요. 저는 실제 거래가 불가능한지 알아보기 위해 연구를 하고 있습니다. 현재 실제 거래가 비용 지불에 충분하지 않다고 추정됩니다.

작은 꿈이 모든 것이 우리 국민의 자원을 위한 것입니다.

작은 꿈일반적으로 리테스트 시 리버리는 10배나 됩니다.

작은 꿈X.X 금액, 나는 또한 허용하지 않습니다. 하지만 당신의 최적화된 버전인 666에 대해선 Sharp가 얼마나 높을까요?

천하의 재물이 계약은 유가족 계약이 아닌 레버 계약입니다.

작은 꿈이 글은 유저들의 관심과 관심의 대상이 되고 있습니다.

작은 꿈요구에 따라 코드를 작성하십시오. 예제를 위해 전략 광장을 참조하십시오.