我已成功將策略增加到我的圖表,但它沒有生成訂單
如果在您向圖表增加策略後,策略模擬器的“交易清單”和“概覽”頁籤顯示“無數據”,很可能表示它沒有模擬任何訂單,這導致沒有數據可填充頁籤。如果您的腳本沒有生成訂單,可能是由於以下任一原因造成的:
該腳本未歸類為策略,或不使用建立訂單的命令
使用策略模擬器進行的回測,僅適用於Pine Script™策略,這些策略使用`strategy()`函數作為宣告語法。使用`indicator()`或`library()`宣告的腳本無法與策略模擬器的模塊交互。
宣告為策略的腳本必須使用`strategy.*`訂單放置命令(例如:`strategy.order()`或`strategy.entry()`)來模擬訂單,並在策略模擬器中顯示數據,而不管任何其他buy/sell訊號表明腳本的作者可能已將其包含在程式碼中。
該策略沒有足夠的資金開倉
對於建倉策略,它必須有足夠的資金購買指定數量的合約/手數/股票/單位。如果它沒有足夠的資金來支付成本,它就不會進行交易。例如:如果策略的初始資金為1000美元,訂單大小為一份合約,則除非資產價格跌破1000美元,否則無法進場,因為它無法承擔全部交易。策略始終只會購買指定數量的合約/股票/手數/單位。
關於回測期貨的重要說明:
期貨商品通常具有所謂的合約單位(在TradingView上表示為點值,在Pine中可透過`syminfo.pointvalue`變數訪問)。與其他商品一樣,圖表上的原始價格代表一單位交易商品的價格。然而,期貨合約有一個固定的數量,每個都代表,因此通常不可能購買單個單位。要計算合約所需的資金,請將圖表價格乘以點值。
為了展示點值對操作期貨商品的策略影響,讓我們看一下商品CME_MINI:ES1!,它代表流動性最好,且點值為50的ES期貨合約:
在下面的範例中,我們增加到圖表中的策略,恰好在4000美元時建倉,並在4500美元時退出。以進場價實際花在合約上的金額是4000美元乘以點值50,即200,000美元。當該策略以平倉價格平倉時,收到的金額為4500美元*50 = 225,000美元,產生了25,000美元的利潤,我們可以透過查看策略模擬器的“交易清單”頁籤的“利潤”來確認:
在這種情況下,如果該策略的初始資本值低於200,000美元,它就無法下訂單,因為它無法承受進場價,該價格是圖表上顯示的價格的50倍。要模擬部位,我們必須增加初始資本或降低多頭/空頭保證金值,以使策略能夠負擔得起。
該策略回傳運算時錯誤
如果策略在其計算過程中遇到問題,它將引發運算時錯誤,並在包含該策略的圖表窗格的左上角顯示一個紅色驚嘆號。運算錯誤會阻止腳本繼續計算,因此它無法模擬訂單。Pine中不同的運算錯誤有不同的原因和潛在的修復方法。點擊驚嘆號將顯示腳本的錯誤消息。
未滿足下達策略訂單所需的條件
策略未顯示任何數據的一個可能原因是在整個測試範圍內沒有條件觸發訂單。在這種情況下,圖表上不會有任何項目,因為沒有要填寫的訂單。用戶可以透過更改策略源程式碼中的條件來解決此問題。透過在圖表上繪製它們來直觀地檢查策略訂單條件的歷史通常會很有幫助。
下面的腳本使用Pine的`plotshape()`函數,在多頭和空頭條件發生時,在K線上方繪製藍色和紅色交叉,允許我們在圖表上檢查它們的歷史:
//@version=5
strategy('My Strategy', overlay = true)
longCondition = ta.crossover(ta.sma(close, 14), ta.sma(close, 28))
if longCondition
strategy.entry('Long', strategy.long)
plotshape(longCondition, color=color.new(color.blue, 0))
shortCondition = ta.crossunder(ta.sma(close, 14), ta.sma(close, 28))
if shortCondition
strategy.entry('Short', strategy.short)
plotshape(shortCondition, color=color.new(color.red, 0))
有關此主題的更多資訊,請參閱我們的用戶手冊中有關除錯的頁面。
策略的屬性不正確
每個策略都有幾個參數來管理其開單規則。作者可以從策略的源程式碼中設定這些參數,用戶可以使用策略設定的“屬性”頁籤中的輸入覆蓋它們。
注意:策略的源程式碼中有幾個地方,用戶可以在其中為其訂單設定合約/股票/手數/單位的數量:
- `strategy()`函數中的參數,允許用戶設定預設交易數量和類型,即在“屬性”頁籤中設定預設值。用戶可以透過調整“訂單大小”來覆蓋這些值。
- 產生掛單的下單命令,例如:“strategy.entry()”,可以按訂單設定交易數量。在這種情況下,更改“屬性”頁籤中的輸入,不會影響策略的訂單大小。
用戶必須確保他們正確指定了策略訂單的大小。增加到上面的“該策略沒有足夠的資金開倉”部分,您需注意:
- 如果策略的“訂單類型”設定為“合約”(相當於源程式碼中的 `strategy.fixed`作為default_qty_type),對於大多數商品,訂單大小必須大於1。有一些加密貨幣可以使用分數大小。例如:0.1的訂單大小對BTCUSD有效,但對AAPL或EURUSD無效。
- 訂單大小必須為正數;負數將導致運算錯誤,0值將無效。
- 總部為大小(合約數量)不能超過1e12。如果部位大小超過這個數字,策略將不會模擬新訂單。