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 で新旧のプレイヤーとチャットしたり、経験を共有したりすることもよくあります。この種の戦略に関して、友人の言ったことに強く同意する点が 1 つあります。つまり、暗号通貨業界で契約を行う場合、ロングポジションを取るリスクはショートポジションを取るリスクよりもわずかに低くなります。あるいは簡単に言えば、最悪の下落はゼロだが、上昇の可能性は無限大だ。

では、マーチンゲールやグリッドのような戦略はロングのみでショートは行わず、ボトムピッキングのリスクを長期にわたって分散させる方が、二国間取引を行うよりも良いのでしょうか?このアイデアは良いように思えますが、実際の実行に耐えられるかどうかは誰にもわかりません。しかし、少なくともこのアイデアを単純にバックテストすることはできます。さて、今日の記事のテーマは、契約のボトムピッキング戦略の設計です。

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)