Skip to content

BitFrog 信號策略警報規範

PineScript™ 腳本速覽:Strategy 與 Indicator

PineScript 策略既可用於歷史資料的回溯測試,也可用於即時市場的前瞻測試。除執行指標計算外,策略還包括呼叫 strategy.*() 函數,將交易訂單傳送至 PineScript™ 的經紀商模擬器。隨後,模擬器可以模擬這些訂單的執行。

回溯測試結果會顯示在圖表底部的「策略測試器(Strategy Tester)」頁籤中,該頁籤位於「Pine Script 編輯器(Pine Script Editor)」頁籤旁邊。

Sect A - express overview 1

另一方面,PineScript 指標同樣涉及計算,但不用於回溯測試。由於獨立於經紀商模擬器,指標消耗的資源更少,執行速度更快。

Sect A - express overview 2

請注意,您可以靈活使用 A 節或 B 節中的格式,兩者完全相容。

根據您傳輸的資訊,系統將智慧識別所使用的格式,並相應解析您的資訊。無論您選擇哪種方式,這種智慧處理都能確保無縫體驗。

A節 - PineScript™ 策略用戶

以下規範專為使用 PineScript™ 策略(主要是 strategy.* 函數)編寫演算法的用戶量身打造。

該格式專門用於容納策略佔位符值,確保無縫適配性。

如需深入了解策略腳本以及使用策略佔位變數發送警報的流程,請訪問相關 連結 了解更多資訊

如果您對此概念不熟悉,請參閱B 節 - 通用相容 該部分提供了另一種建構警報的方法,適用於更廣泛的場景。

警報訊息規範概述

欄位名稱說明
id(信號 ID)標識每個具體信號,防止重複或追蹤信號實例。
action(交易方向)來自 TradingView 的 {{strategy.order.action}}
marketPosition(當前倉位方向)來自 TradingView 的 {{strategy.market_position}}
prevMarketPosition(上一個倉位方向)來自 TradingView 的 {{strategy.prev_market_position}}
marketPositionSize(當前倉位數量)來自 TradingView 的 {{strategy.market_position_size}}
prevMarketPositionSize(上一個倉位數量)來自 TradingView 的 {{strategy.prev_market_position_size}}
instrument(交易對)來自 TradingView 的 {{ticker}}
signalToken(安全令牌)安全令牌,用於驗證信號來源,信號建立時由 BitFrog 提供。
timestamp(時間戳)來自 TradingView 的 {{timenow}}
maxLag(最大延遲)[1,3600] 之間的非負整數值,預設為 60
investmentType(投資類型)由 TradingView 配置。
amount(金額)來自 TradingView 的 {{strategy.order.contracts}}。最小下單數量會根據交易所變動,低於最小下單量將導致失敗。
orderType(訂單類型)限價:limit;市價:market。市價單會立即按照當前市場價格執行,限價單會按照當前價格掛單執行。
orderPriceOffset(價格偏離)僅限價單生效。按照當前觸發時買一/賣一價格進行價格偏移後掛單執行。

1. 「警報訊息」- id

json
{
  "action": "{{strategy.order.action}}",
  "amount": "{{strategy.order.contracts}}",
  "id": "{{strategy.order.id}}", //👈id - 訂單識別碼
  "instrument": "{{ticker}}",
  "investmentType": "base",
  "marketPosition": "{{strategy.market_position}}",
  "marketPositionSize": "{{strategy.market_position_size}}",
  "maxLag": "60",
  "orderType": "limit",
  "orderPriceOffset": "0",
  "prevMarketPosition": "{{strategy.prev_market_position}}",
  "prevMarketPositionSize": "{{strategy.prev_market_position_size}}",
  "signalToken": "fb16aaeb4d5e2e5d36a6eacd66d06635",
  "timestamp": "{{timenow}}"
}

id - 訂單識別碼

{{strategy.order.id}} — 返回已執行訂單的 ID(即在產生訂單的函數呼叫中作為第一個參數使用的字串,例如:strategy.entrystrategy.exitstrategy.order

2. 「警報訊息」- 操作

json
{
  "action": "{{strategy.order.action}}",  //👈操作 -「買入」或「賣出」?
  "amount": "{{strategy.order.contracts}}",
  "id": "{{strategy.order.id}}",
  "instrument": "{{ticker}}",
  "investmentType": "base",
  "marketPosition": "{{strategy.market_position}}",
  "marketPositionSize": "{{strategy.market_position_size}}",
  "maxLag": "60",
  "orderType": "limit",
  "orderPriceOffset": "0",
  "prevMarketPosition": "{{strategy.prev_market_position}}",
  "prevMarketPositionSize": "{{strategy.prev_market_position_size}}",
  "signalToken": "fb16aaeb4d5e2e5d36a6eacd66d06635",
  "timestamp": "{{timenow}}"
}

操作 -「買入」或「賣出」?

{{strategy.order.action}} 返回已執行訂單的 "buy""sell" 字串

3. 「警報訊息」- marketPosition

json
{
  "action": "{{strategy.order.action}}",
  "amount": "{{strategy.order.contracts}}",
  "id": "{{strategy.order.id}}",
  "instrument": "{{ticker}}",
  "investmentType": "base",
  "marketPosition": "{{strategy.market_position}}", //👈marketPosition - 預期倉位狀態(訂單執行時)
  "marketPositionSize": "{{strategy.market_position_size}}",
  "maxLag": "60",
  "orderType": "limit",
  "orderPriceOffset": "0",
  "prevMarketPosition": "{{strategy.prev_market_position}}",
  "prevMarketPositionSize": "{{strategy.prev_market_position_size}}",
  "signalToken": "fb16aaeb4d5e2e5d36a6eacd66d06635",
  "timestamp": "{{timenow}}"
}

marketPosition - 預期倉位狀態(訂單執行時)

{{strategy.market_position}} - 以字串形式返回策略的當前倉位:"long", "flat",或"short"。

4. 「警報訊息」- prevMarketPosition

json
{
  "action": "{{strategy.order.action}}",
  "amount": "{{strategy.order.contracts}}",
  "id": "{{strategy.order.id}}",
  "instrument": "{{ticker}}",
  "investmentType": "base",
  "marketPosition": "{{strategy.market_position}}",
  "marketPositionSize": "{{strategy.market_position_size}}",
  "maxLag": "60",
  "orderType": "limit",
  "orderPriceOffset": "0",
  "prevMarketPosition": "{{strategy.prev_market_position}}",  // 👈 之前的倉位狀態(訂單執行前)
  "prevMarketPositionSize": "{{strategy.prev_market_position_size}}",
  "signalToken": "your_token_here",
  "timestamp": "{{timenow}}"
}

prevMarketPosition - 之前的倉位狀態(訂單執行前)

{{strategy.prev_market_position}} - 以字串形式返回策略的上一個倉位狀態: "long", "flat", "short".

5. 「警報訊息」- 工具

json
{
  "action": "{{strategy.order.action}}",
  "amount": "{{strategy.order.contracts}}",
  "id": "{{strategy.order.id}}",
  "instrument": "{{ticker}}",  // 👈 當前信號所綁定的交易對(重要)
  "investmentType": "base",
  "marketPosition": "{{strategy.market_position}}",
  "marketPositionSize": "{{strategy.market_position_size}}",
  "maxLag": "60",
  "orderType": "limit",
  "orderPriceOffset": "0",
  "prevMarketPosition": "{{strategy.prev_market_position}}",
  "prevMarketPositionSize": "{{strategy.prev_market_position_size}}",
  "signalToken": "your_token_here",
  "timestamp": "{{timenow}}"
}

ticker — TradingView 佔位符值

「標準佔位符」* 是由雙大括號包圍並包含在警報訊息中的文字片段。

{{ticker}} 將返回產生警報的 TradingView 代碼。

例如:

  • BTCUSDT.P
  • ETHUSDT.P

* 在 PineScript 中存取變數的標準佔位符點擊此處了解更多。

6. 警報訊息」- 信號代碼

json
{
  "action": "{{strategy.order.action}}",
  "amount": "{{strategy.order.contracts}}",
  "id": "{{strategy.order.id}}",
  "instrument": "{{ticker}}",
  "investmentType": "base",
  "marketPosition": "{{strategy.market_position}}",
  "marketPositionSize": "{{strategy.market_position_size}}",
  "maxLag": "60",
  "orderType": "limit",
  "orderPriceOffset": "0",
  "prevMarketPosition": "{{strategy.prev_market_position}}",
  "prevMarketPositionSize": "{{strategy.prev_market_position_size}}",
  "signalToken": "fb16aaeb4d5e2e5d36a6eacd66d06635",  // 👈 BitFrog 分配的策略密鑰
  "timestamp": "{{timenow}}"
}

信號代碼:信號的身分驗證。這項安全機制用於確保傳入的請求為合法且已授權的請求。當用戶在 BitFrog 成功建立新信號時,系統將自動生成此信號代碼,並需要將其複製至 TradingView 警報訊息中。

如何找到已啟用信號的信號代碼?

  1. 查看信號配置資訊
Sect A - locate signalToken 1.png -CN
  1. 在「警報資訊」部分找到信號代碼
Sect A - locate signalToken 2.png -CN

7. 「警報訊息」- 時間戳

json
{
  "action": "{{strategy.order.action}}",
  "amount": "{{strategy.order.contracts}}",
  "id": "{{strategy.order.id}}",
  "instrument": "{{ticker}}",
  "investmentType": "base",
  "marketPosition": "{{strategy.market_position}}",
  "marketPositionSize": "{{strategy.market_position_size}}",
  "maxLag": "60",
  "orderType": "limit",
  "orderPriceOffset": "0",
  "prevMarketPosition": "{{strategy.prev_market_position}}",
  "prevMarketPositionSize": "{{strategy.prev_market_position_size}}",
  "signalToken": "fb16aaeb4d5e2e5d36a6eacd66d06635",
  "timestamp": "{{timenow}}" // 👈 發出信號的時間戳
}

timenow — TradingView 佔位符值

「標準佔位符」* 是由雙大括號包圍並包含在警報訊息中的文字片段。

{{timenow}} 將返回生成警報的當前精確時間,採用 UTC 及 yyyy-MM-ddTHH:mm:ssZ 格式。

例如:

2023-06-01T17:38:10Z

* 在 PineScript 中存取變數的標準佔位符點擊此處了解更多。

8. 「警報訊息」- maxLag

json
{
  "action": "{{strategy.order.action}}",
  "amount": "{{strategy.order.contracts}}",
  "id": "{{strategy.order.id}}",
  "instrument": "{{ticker}}",
  "investmentType": "base",
  "marketPosition": "{{strategy.market_position}}",
  "marketPositionSize": "{{strategy.market_position_size}}",
  "maxLag": "60", // 👈 最大允許延遲(秒),超過該值的信號將被忽略
  "orderType": "limit",
  "orderPriceOffset": "0",
  "prevMarketPosition": "{{strategy.prev_market_position}}",
  "prevMarketPositionSize": "{{strategy.prev_market_position_size}}",
  "signalToken": "fb16aaeb4d5e2e5d36a6eacd66d06635",
  "timestamp": "{{timenow}}"
}

maxLag - 最大可接受延遲

在信號策略中,「maxLag」是指交易信號被接收前,以秒為單位的最大可接受延遲時間。

預設值為 60 秒

設定 maxLag 值有助於確保信號策略的即時運行,避免對可能已無法反映當前市場狀況的過期信號或潛在不準確信號採取行動

9. 「警報訊息」- 投資類型與金額

json
{
  "action": "{{strategy.order.action}}",
  "amount": "{{strategy.order.contracts}}", // 👈直接引用策略中設定的下單數量
  "id": "{{strategy.order.id}}",
  "instrument": "{{ticker}}",
  "investmentType": "base", // 👈以幣種數量下單,與策略設定的數量保持一致
  "marketPosition": "{{strategy.market_position}}",
  "marketPositionSize": "{{strategy.market_position_size}}",
  "maxLag": "60",
  "orderType": "limit",
  "orderPriceOffset": "0",
  "prevMarketPosition": "{{strategy.prev_market_position}}",
  "prevMarketPositionSize": "{{strategy.prev_market_position_size}}",
  "signalToken": "fb16aaeb4d5e2e5d36a6eacd66d06635",
  "timestamp": "{{timenow}}"
}

重要提示: 為了確保與您的 TradingView 策略具有最佳的相容性,我們強烈建議將 investmentType 配置為 "base",並將數量設定為 {{strategy.order.contracts}}。透過此方式,BitFrog 上的訂單數量將與您 TradingView 策略中指定的訂單數量保持一致。

B 節 - 通用相容

以下提供的規範用途廣泛,可根據任何情況進行自訂。無論您是使用 PineScript™ 製作策略或指標腳本,還是手動將警報輸入 TradingView 的警報使用者介面,這些規範皆具有良好的適應性與可自訂性。

警報訊息規範概述

欄位名稱說明
id(信號 ID)標識每個具體信號,防止重複或追蹤信號實例。
instrument(交易對)來自 TradingView 的 {{ticker}},如 BTCUSDT.P。為確保數據源與執行端的一致性,您配置 TradingView K 線來源交易所與您下單交易所需保持一致。
action(交易方向)做多:open_long做空:open_short市價全平:close反手策略-做反手:需配置做多開倉、做空開倉信號後,將為您開多倉;觸發做空信號後,將為您平多倉並開空倉。
orderType(訂單類型)限價:limit,市價單會立即按照當前市場價格執行。市價:market,限價單會按照當前價格掛單執行。
orderPriceOffset(價格偏離)限價單觸發時按照當前觸發時間買一/賣一價格掛單執行。
investmentType(投資類型)USDT 數量:"investmentType":"usdt",每次開倉可輸入 USDT 數量下單,這是加上槓桿後的數量。幣的數量:"investmentType":"base",每次開倉可輸入交易幣數量下單,這是加上槓桿後的數量。資金比例:"investmentType":"percent",每次開倉按您帳戶資金設定資金比例 × 槓桿下單。
amount(金額)USDT 數量:正浮點數數值。幣的數量:正浮點數數值(浮動值在 [0.01,100] 之間,單位為 %)。最小下單數量根據交易所變動,低於最小下單量將失敗。
signalToken(安全令牌)安全令牌,用於驗證信號來源,信號建立時由 BitFrog 提供。
maxLag(下單延遲)信號的最大延遲,防止過期信號被執行。交易信號被接收前以秒為單位的最大可接受延遲時間,僅針對開倉。

1. 「警報訊息」- 操作

json
{
  "action": "open_long", // 👈 交易動作,可選值詳見說明
  "amount": "10",
  "instrument": "{{ticker}}",
  "investmentType": "base",
  "maxLag": "60",
  "orderType": "limit",
  "orderPriceOffset": "0",
  "signalToken": "70b6498ea82de2b2e35fa3988c09c3e2",
  "timestamp": "{{timenow}}"
}

交易模式

假設 BitFrog 信號策略以單向(買入/賣出)模式運行,這意味著只會在單一方向持有倉位。

下單

開多(open_long):下單持有多頭倉位,預期價格將上漲。

開空(open_short):下單持有空頭倉位,預期價格將下跌。

平倉

平倉(close):根據目前持有的倉位進行全部平倉。

2. 「警報訊息」- 工具

json
{
  "action": "open_long",
  "amount": "10",
  "instrument": "{{ticker}}", // 👈 TradingView 佔位符:代表當前圖表交易對
  "investmentType": "base",
  "maxLag": "60",
  "orderType": "limit",
  "orderPriceOffset": "0",
  "signalToken": "70b6498ea82de2b2e35fa3988c09c3e2",
  "timestamp": "{{timenow}}"
}

ticker — TradingView 佔位符值

「標準佔位符」* 是由雙大括號包圍並包含在警報訊息中的文字片段。

{{ticker}} 將返回產生警報的 TradingView 代碼。

例如:

  • BTCUSDT.P
  • ETHUSDT.P

* 在 PineScript 中存取變數的標準佔位符。點擊此處了解更多。

3. 「警報訊息」- 信號代碼

json
{
  "action": "open_long",
  "amount": "10",
  "instrument": "{{ticker}}",
  "investmentType": "base",
  "maxLag": "60",
  "orderType": "limit",
  "orderPriceOffset": "0",
  "signalToken": "70b6498ea82de2b2e35fa3988c09c3e2", // 👈 信號代碼:由 BitFrog 自動生成的身分驗證標識
  "timestamp": "{{timenow}}"
}

信號代碼:信號的身分驗證。這項安全機制用於確保傳入的請求為合法且已授權的請求。當用戶在 BitFrog 成功建立新信號時,系統將自動生成此信號代碼,並需要將其複製到 TradingView 警報訊息中。

4. 「警報訊息」- 時間戳

json
{
  "action": "open_long",
  "amount": "10",
  "instrument": "{{ticker}}",
  "investmentType": "base",
  "maxLag": "60",
  "orderType": "limit",
  "orderPriceOffset": "0",
  "signalToken": "70b6498ea82de2b2e35fa3988c09c3e2",
  "timestamp": "{{timenow}}" // 👈 TradingView 佔位符,表示警報產生時間
}

點擊此處

「標準佔位符」* 是由雙大括號包圍並包含在警報訊息中的文字片段。

{{timenow}} 將返回產生警報的當前精確時間,採用 UTC 與 yyyy-MM-ddTHH:mm:ssZ 格式。

格式範例(UTC 時間,ISO 8601 格式)

yyyy-MM-ddTHH:mm:ssZ

例如:

2023-06-01T17:38:10Z

yyyy-MM-ddTHH:mm:ss.SSSZ

例如:

2023-06-01T17:38:10.836Z

yyyy-MM-ddTHH:mm:ss+0000

例如:

2023-06-01T17:38:10+0000

* 在 PineScript 中存取變數的標準佔位符。點擊此處了解更多。

5. 「警報訊息」- maxLag

json
{
  "action": "open_long",
  "amount": "10",
  "instrument": "{{ticker}}",
  "investmentType": "base",
  "maxLag": "60", // 👈 最大可接受信號延遲(單位:秒),超過該時間的信號將被視為無效
  "orderPriceOffset": "0",
  "signalToken": "70b6498ea82de2b2e35fa3988c09c3e2",
  "timestamp": "{{timenow}}"
}

maxLag - 最大可接受延遲

在信號策略中,maxLag 是指交易信號被接收前,以秒為單位的最大可接受延遲時間。

預設值為 60 秒

設定 maxLag 值有助於確保信號策略的即時運行,避免對可能已無法反映當前市場狀況的過期信號或潛在不準確信號採取行動。

6. 「警報訊息」- 訂單

json
{
  "action": "open_long",
  "amount": "10",
  "instrument": "{{ticker}}",
  "investmentType": "base",
  "maxLag": "60",
  "orderType": "limit", // 👈 限價單:下單時掛指定價格。若為 market,則為市價單,無需設定 orderPriceOffset
  "orderPriceOffset": "0", // 👈 限價偏移:以當前買一/賣一價格為基準的浮動距離,單位為最小報價精度(tick size)
  "signalToken": "70b6498ea82de2b2e35fa3988c09c3e2",
  "timestamp": "{{timenow}}"
}

訂單類型(orderType)

市價單(market)

透過市價進行下單,例如開倉(action=open_xx)或平倉(action=close)時,無需提供 orderPriceOffset

限價單(limit)

設定限價單,進行開倉(action=open_xx)或平倉(action=close)。

訂單價格偏移量(orderPriceOffset)

如上所述,該參數僅在限價單類型下需要填寫。

當使用限價單下單時,可允許訂單在指定價格基礎上增加一定偏移量,在提高成交機率的同時,仍可盡量確保以較理想的價格成交。

設定後,不同操作的偏移價格計算方式如下:

開多:

(1 - 訂單價格偏移量) × 買一價

開空:

(1 + 訂單價格偏移量) × 賣一價

平多:

(1 + 訂單價格偏移量) × 賣一價

平空:

(1 - 訂單價格偏移量) × 買一價

操作計算公式訂單價格
開多(1 - 0.01) × 10099 元
開空(1 + 0.01) × 102103.02 元
平多(1 + 0.01) × 102103.02 元
平空(1 - 0.01) × 10099 元

7. 「警報訊息」- 投資類型與金額

json
{
  "action": "open_long",
  "amount": "10", // 👈 委託數量,建議使用 {{strategy.order.contracts}},以保持與 TradingView 策略數量一致
  "instrument": "{{ticker}}",
  "investmentType": "base", // 👈 投資類型:base 表示按基礎幣種數量下單,建議值為 "base"
  "maxLag": "60",
  "orderType": "limit",
  "orderPriceOffset": "0",
  "signalToken": "70b6498ea82de2b2e35fa3988c09c3e2",
  "timestamp": "{{timenow}}"
}

B 節警報設定範例

範例 1:多頭開倉 → 多頭平倉(全部平倉)

範例 2:多倉,反手開空

範例 3:使用多次下單開倉

多重進場是信號策略的一項功能,允許對指定交易工具執行多次進場。交易者可以透過入場點的多樣化(即美元成本平均法,DCA)來優化交易方式,從而有機會在動態市場環境中提高捕捉獲利交易的機會。

BitFrog User Documentation