市場変動を好むグリッド戦略,マルティンゲール戦略は,独自の欠点があり,彼らはETH契約市場でしばらくテストされています.FMZ.COMデジタル通貨市場でのショートよりもリスクが低いということです. あるいは,単純に言うと,最悪の値はゼロに下がりますが,増加率は無限です.
このアイデアは非常に良いように聞こえますが,実際に実行できるかどうかは誰にもわかりません. しかし,少なくとも,私たちはそれを簡単にバックテストすることができます. だから,今日の記事のテーマは,契約の底釣り戦略を設計します.
このアイデアを実装するコードは,プラットフォームの柔軟性,インターフェースのエンカプスレーション,強力なバックテストシステムなどのおかげで,本当にシンプルです. 完全なコードは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)
}
}
パラメータ設計もとてもシンプルです
この6つのパラメータだけで
バックテストの時間範囲をランダムに設定します.
バックテスト:
格子戦略,マルティンゲール戦略に似ています~. 初心者は通常,長編コードの戦略を恐れているので,簡単に説得されます. スタートするための短く簡潔な戦略は,戦略のアイデアを理解し,論理設計を学ぶのにより簡単で適切です.
戦略コードは研究目的のみです