Type/to search
8
Follow
1364
Followers
아이디어를 구현하기 위한 60줄의 코드 - 계약 최저가 전략
Original
Created 2022-03-19 14:37:08  Updated 2024-12-02 21:32:02
 14
 3758

img

그리드 전략과 마팅게일 전략과 같이 변동성이 큰 시장을 선호하는 전략에는 고유한 단점이 있습니다. 유사한 전략이 ETH 계약 시장에서 얼마 동안 테스트되었습니다. 저는 FMZ.COM에서 새로운 플레이어와 오래된 플레이어들과 자주 대화를 나누며 경험을 공유합니다. 이런 유형의 전략과 관련해서, 한 친구가 한 말에 강력히 동의하는 점이 하나 있습니다. 즉, 암호화폐 시장에서 계약을 체결할 때 롱 포지션을 취하는 위험은 숏 포지션을 취하는 위험보다 약간 낮습니다. 간단히 말해서, 최악의 하락은 0이지만 상승 가능성은 무한합니다.

그렇다면 마팅게일과 그리드 같은 전략은 롱 포지션만 취하고 숏 포지션은 취하지 않으며, 바닥 선정 위험을 장기적으로 분산하는 것이 양자 간 거래를 하는 것보다 더 나을까요? 이런 아이디어는 좋지만, 실제로 실행될 수 있을지는 아무도 모릅니다. 하지만 적어도 우리는 이 아이디어를 간단히 백테스트할 수 있습니다. 오늘 기사의 주제는 '계약 최저가 낙찰 전략 설계'입니다.

FMZ.COM 기반의 빠른 개발

이 아이디어를 구현하는 코드는 플랫폼의 유연성, 인터페이스 캡슐화, 강력한 백테스팅 시스템 덕분에 정말 매우 간단합니다. 전체 코드는 60줄밖에 되지 않습니다(코드 작성 표준을 위해 많은 약어는 사용하지 않습니다).

전략 설계는 매우 간단합니다. 논리의 시작 시 초기 가격에 따라 매수 주문은 아래로 간격을 두고 배치됩니다. 가격이 계속 하락하면 매수 주문을 계속 배치하여 바닥 낚시를 계속합니다. 그런 다음, 포지션 가격과 특정 이익 차이를 기준으로 마감 주문을 내고 포지션이 마감될 때까지 기다립니다. 포지션이 청산된 경우 위의 논리는 현재 가격을 초기 가격으로 반복됩니다. 이 전략에서는 숏 포지션을 취하지 않고, 롱 포지션만 취합니다.

전략 소스 코드:

javascript
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

그리드 또는 마틴 유형의 전략과 매우 흡사해 보입니다~. 방금 학습을 시작한 신입생들이 장기적인 전략을 두려워하고 쉽게 낙담하는 경우가 있나요? 전략에 대한 간략하고 간결한 소개가 더 적합하며, 이를 통해 전략적 아이디어를 더 쉽게 이해하고 논리적 설계를 배울 수 있습니다.

전략 코드는 학습 및 연구 목적으로만 사용됩니다.

Related Recommendations
Comment
All comments (14)

    img
    运行之后会报错然后一直在挂单,撤单无限循环,要如何解决

    4 years ago

    您好,这个是个教学策略,主要是讲解思路,可以在币安永续合约跑,跑OK需要对策略修改一下。上面问题的原因是下单量为小数了,OKX是要求下单量为合约整张数的。币安期货USDT本位永续合约可以是小数

    4 years ago

    好的谢谢我知道了

    4 years ago

    不客气,刚写支持FMZ量化。

    4 years ago

    这个策略只能在币安上跑吗?

    4 years ago

    都可以跑,就是参数调整下就行。

    4 years ago

    仓位增长系数是什么意思?

    4 years ago

    设置2就是2倍加仓。

    4 years ago

    怎么没有策略地址啊?复制策略源码不能用

    4 years ago

    这个策略只是一个教学策略,切勿实盘,回测研究学习可以。复制策略源码,还要加上策略参数,参数如文章上的截图。

    4 years ago

    img
    现在币安不能支持麦语言策略使用么,会提示用web什么的方式进行实时更新避免api封禁

    4 years ago

    您好,这个和策略无关的,您可以设置一下麦语言模版参数上的轮询间隔,设置大一些。如果您一个服务器上跑多个实盘,都访问一个交易所的接口,那么频率是会翻倍的,很容易就超频超限了。

    4 years ago

    img
    按道理我这个参数两个轮训一分钟最多120次,并没有超过币安限制每分钟1200次访问呀,有点不理解

    4 years ago

    是不是运行了多个实盘,如果一个服务器上运行2个实盘,频率就翻倍,以此类推的。

    4 years ago
  • 1
iPhone Download
Forums
PINE Language
© 2015 - ∞ INVENTOR PTE LTD (SG)