60줄의 코드 하나의 생각을 실현 - 계약 바닥 낚시

저자:니나바다스, 창작: 2022-04-02 18:27:54, 업데이트: 2022-04-02 18:29:47

60줄의 코드 하나의 생각을 실현 - 계약 바닥 낚시

그리드 전략과 마틴게일 전략, 시장 코트를 오스실레이션하는 것을 좋아하는, 고유 한 단점이 있으며, 비슷한 전략은 기간 동안 ETH 계약 시장에서 테스트되었습니다. 또한 나는 종종 채팅하고 경험 공유FMZ.COM이런 전략에 대해 한 친구와 정말 동의하는 점이 있습니다. 즉, 통화 사이클에서 계약을 하는 것입니다. 그리고 긴 거래의 위험은 짧은 거래의 위험보다 적습니다. 또는 간단히 말해서, 최악의 추락은 0으로 돌아가는 것입니다. 그러나 상승은 무한합니다.

그래서, 마틴게일과 그리드 같은 전략은 단지 길게 만들지만 짧게 만들지 않습니까? 양방적으로하는 것보다 긴 범위에서 바닥 낚시 위험을 퍼뜨리는 것이 더 낫습니까? 이 아이디어는 매우 좋지만 실제 전투에 견딜 수 있는지 아무도 모릅니다. 그러나 적어도 우리는 단순히이 아이디어를 뒷 테스트 할 수 있습니다. 따라서 우리는 오늘의 기사의 주제를 가지고 있습니다 - 계약 바닥 낚시 전략을 설계하십시오.

급속한 발전FMZ.COM

이 아이디어를 구현하는 코드는 유연성, 인터페이스 캡슐화 및 FMZ 플랫폼의 강력한 백테스트 시스템 등을 통해 매우 간단합니다. 전체 코드는 60 줄 만입니다. (코드 작성 사양에 따라 줄일 수있는 많은 줄은 줄이지 않습니다.)

전략 아이디어의 설계는 매우 간단합니다. 논리의 시작 부분의 초기 가격에 따라, 인터벌 거리가 감소하는 경우, 구매 주문을 배치합니다. 가격이 계속 하락하는 경우, 구매 주문을 계속 배치하고, 바닥 낚시를 유지하십시오. 그 다음 특정 이익 스프레드를 추가하는 포지션 가격 후 클로즈 포지션 주문을 기다립니다. 포지션이 닫히면, 위의 논리는 현재 가격으로 초기 가격으로 반복됩니다. 전략은 짧게하지 않고 길게합니다.

전략 소스 코드:

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

function getLong(arr, kind) {
    var ret = null 
    for (var i = 0 ; i < arr.length ; i++) {
        if (arr[i].Type == (kind == "pos" ? PD_LONG : ORDER_TYPE_BUY)) {
            ret = arr[i]
        }
    }
    return ret
}

function pendingBidOrders(firstPrice) {
    var index = 0
    var amount = baseAmount
    while (true) {
        var pos = _C(exchange.GetPosition)
        var price = firstPrice - index * baseSpacing
        amount *= ratio
        index++
        exchange.SetDirection("buy")
        exchange.Buy(price, amount)        
        if (pos.length != 0) {
            var longPos = getLong(pos, "pos")
            if (longPos) {
                exchange.SetDirection("closebuy")
                exchange.Sell(longPos.Price + profitTarget, longPos.Amount)
            }
        }
        while (true) {
            Sleep(interval)
            if (!getLong(_C(exchange.GetOrders), "orders")) {
                cancelAll()
                break
            }
            if (!getLong(_C(exchange.GetPosition), "pos")) {
                cancelAll()
                return 
            }
        }
    }
}

function main() {
    exchange.SetContractType(symbol)
    while (true) {
        pendingBidOrders(_C(exchange.GetTicker).Last)
    }
}

매개 변수의 설계도 매우 간단합니다.

img

몇 가지 매개 변수만 있습니다.

수십 줄의 코드에서 얻은 결과들을 살펴봅시다.

백테스트 시간 범위를 무작위로 설정합니다.

img

백테스트:

img

img

그것은 격자 또는 마틴게일 유형의 전략과 같습니다. 처음 시작하는 새로운 학습자는 이러한 종류의 긴 전략을 매우 두려워하고 쉽게 포기하도록 설득됩니다. 짧고 간결한 전략 소개가 더 적합하며 전략 아이디어를 소화하고 논리적 디자인을 배우는 것이 더 쉽습니다.

위 전략 코드들은 연구와 연구용으로만 사용됩니다.


더 많은