對策略進行偵錯

From FxCodeBaseWiki
Jump to: navigation, search

啟動偵錯工作階段

要開始對策略進行偵錯,請在策略偵錯器 (Strategy Debugger) 的 File(檔案)功能表中,按一下 Open(開啟)。您將看到要進行偵錯的策略的清單。請選擇要進行偵錯的策略並按一下 OK(確定)

請注意,您只能對儲存在使用者策略資料夾(預設情況下為 strategies 子資料夾)中的那些策略進行偵錯。如果要對標準策略進行偵錯,請將其移至使用者策略資料夾中。

啟動偵錯工作階段後,將逐步執行策略的 Init() 函數。您可以執行整個函數,但不要忘記在 Prepare()Update() 函數中放置中斷點,以便在輸入參數之後中斷策略的執行。

策略參數

Init() 函數執行完畢後,會顯示策略參數對話方塊。前兩組參數用於設定偵錯工作階段。其他各組參數都用於設定策略。

模擬參數

參數對話方塊

使用模擬參數,可以在偵錯工作階段期間對要模擬的市場進行設定。

Luadebugging6.png

商品

首先,您最多可以添加三種商品,以模擬點價 (tick price)。要執行此操作,請分別在 First Instrument Price Source(第一種商品的價格來源)、Second Instrument Price Source(第二種商品的價格來源)和 Third Instrument Price Source(第三種商品的價格來源)參數中選擇價格來源。要選擇來源,請將游標放在參數值欄位中,並按一下省略號 (...) 按鈕。

您將看到 Choose Price Source(選擇價格來源)對話方塊:

Luadebugging6-1.png

您可以選擇包含價格的檔案,也可以使用來自報價管理器伺服器的資料:

  • 要選擇價格檔案,請按一下 File(檔案),然後按一下省略號 (...) 按鈕。您可以參閱 CodeBase 價格存檔來獲得 1 年的資料檔案。
  • 您可以使用報價管理器伺服器下載選定商品在所選期間內的 1 分鐘報價資料。資料下載速度足夠快。載入某種商品的全年 1 分鐘資料(約 30 萬根蠟燭線)通常不到 30 秒。要使用報價管理器提供的資料,請按一下 Quotes Manager(報價管理器),然後選擇商品、時間框架和資料範圍。

設定參數後,請按一下 OK(確定)。如果已選擇從報價管理器伺服器載入資料,並且以前沒有下載過資料,您將看到一個訊息方塊,詢問是否要立即下載資料。按一下 Yes(是)。您將看到 Load Quotes(載入報價)視窗:

Luadebugging6-2.PNG

按一下 OK(確定)開始下載選定商品在所選期間內的資料。載入資料時請稍候片刻:

Luadebugging6-3.PNG

載入資料後,如有必要,請在 Second Instrument Price Source(第二種商品的價格來源)和 Third Instrument Price Source(第三種商品的價格來源)參數中選擇價格來源。

價格來源適用以下規則:

  • 歷史資料必須是不同商品的歷史資料。
  • 所有歷史資料必須以大致相同的時間開始。

時間框架可能有所不同。時間框架較長時,執行速度較快(模擬較少的價格點/Update() 函數的呼叫頻率較低)。時間框架較短時,可進行更精確的市場模擬。

通用規則如下:

  • 對邏輯進行偵錯時,所用資料的時間框架應該與應用策略的時間框架相同。
  • 時間框架不得長於應用策略的時間框架。例如,如果您將策略應用於 1 分鐘棒線,但選擇每小時資料進行模擬,則每小時將只有 8 分鐘,每分鐘棒線將僅由一個價格點 (tick) 構成。這種資料的值會存在很大爭議。
  • 在回溯測試期間始終使用 1 分鐘資料。

Account Currency(賬戶貨幣)

然後,您可以選擇賬戶貨幣。如果未指定賬戶貨幣,將自動使用第一種商品的基礎貨幣

如果指定了賬戶貨幣,它可能會影響商品的添加順序:

示例 1

1 種商品,EUR/USD。

如果未指定賬戶貨幣,預設情況下將使用 USD。賬戶貨幣可以是 EUR 或 USD。

示例 2

您希望擁有 USD 賬戶,但對 GBP/JPY 執行策略。

請選擇 USD/JPY 作為第一種商品,接著再添加 GBP/JPY。然後對第二種商品執行策略。

示例 3

您希望擁有 USD 賬戶並模擬 GBP/JPY、EUR/USD 和 GBP/USD 交易。

第一種商品必須是 GBP/USD,因為它包含賬戶貨幣,並擁有其他兩種商品所包含的貨幣。其他兩種商品的順序並不重要。

Run Strategy At(要執行策略的商品)

您知道,您可對任意數量的商品執行策略,但只能對一種商品啟動策略(呼叫 Update() 函數)。因此,如果指定了多種商品,必須選擇使用哪一種商品來啟動策略。模擬商品的價格點時,將呼叫策略的 Update() 函數。將不會對其他商品的價格點呼叫策略。

平倉單與避險

位於不同國家/地區並在不同監管體制下執行的交易系統可能對某些操作具有不同的權限。使用「Are Closing Orders Allowed」(是否允許平倉單)和「Is Hedging Allowed」(是否允許避險)這兩個參數,幾乎可以設定現有的所有市場:

「Are Closing Orders Allowed」(是否允許平倉單)定義是否可以使用市價平倉單、止損單及限價單。

「Is Hedging Allowed」(是否允許避險)定義是否可以在相同商品中同時持有交易方向相反的部位(買進及賣出)。如果參數設為「False」,市價單將先對反向部位進行平倉(從交易時間最早的一個開始),然後再開立新倉位(前提是對所有反向部位進行平倉後還有剩餘金額)。

典型賬戶設定為:

  • 英國,有避險:允許避險,允許平倉單。
  • 英國,無避險:允許避險,允許平倉單。
  • 美國(或實行 NFA 先進先出規則的市場):允許避險,允許平倉單。

Initial Amount(初始金額)

這是指最初要存入賬戶的賬戶貨幣金額。

Lot Size(每手大小)

這是要模擬的商品的每一手大小。所有部位和訂單的金額都必須是每手大小的倍數。每手大小始終以商品的基礎貨幣來表示。例如,如果在此參數中指定 10000,USD/JPY 的每手大小將為 10000 USD,EUR/USD 的每手大小將為 10000 EUR,以此類推。

MMR(維持保證金要求)

這是要為 1 手合約劃撥的保證金金額,以賬戶貨幣表示。您可以從交易平台獲取此值,此值位於「報價視窗(簡易)」中的「維持保證金要求」欄。

Lot Size(每手大小)和 MMR 必須平衡。例如,每手大小為 5000,MMR 為 100,則對應的槓桿率大約為 1:50。

Chart Parameters(圖表參數)

第二組參數用於設定顯示策略結果的圖表視圖。

Luadebugging7.png

首先應設定圖表的時間框架和價格類型(賣出或買進)。圖表始終為棒型圖,因此必須選擇時間框架。圖表資料是從策略的價格點日誌中收集的,因此,該時間框架可能不同於來源價格資料的時間框架和策略時間框架。但和策略時間框架一樣,選擇的時間框架不應短於模擬中使用的價格資料的時間框架。

然後,您可以選擇淨值線和餘額線的顏色。淨值和餘額顯示在圖表下方的獨立區域中。

然後,您可以設定用於淨值通道的參數。淨值通道是指在圖表棒線的期間內,達到的最高淨值和最低淨值之間的區域。該線顯示期末淨值和餘額。

最後,您可以選擇箭頭的顏色和字型大小,在模擬期間執行賣出或買進指令時,這些箭頭將顯示在棒線上的價格處。

對策略進行偵錯

進行策略初始化之後,偵錯器就開始模擬市場上的策略更新。偵錯器將使用在策略參數中選擇的價格資料,模擬一種或多種商品的價格點。模擬所選商品的價格點時,會呼叫策略的 Update() 函數。

除了偵錯輸出資訊和監視資訊外(請參閱 Lua 偵錯),還會顯示以下資訊:

  • 策略的價格點日誌(顯示在 Streams[流]標籤上)。
  • 圖表上顯示的策略結果(顯示在 Chart[圖表]標籤上)。
  • 策略統計(顯示在 Statistics[統計]標籤上)。
  • 所有交易表格(Offers[報價]、Accounts[賬戶]、Orders[訂單]、Trades[交易]、Closed Trades[已平倉交易]及 Summary[總結])的內容。

每當偵錯器因遇到中斷點而停止執行時或處於逐步執行模式時,會更新此資訊。

策略的價格點日誌

該日誌顯示在偵錯器的 Streams(流)標籤上。模擬的所有價格點都會寫入到日誌中。對於每個價格點,您可以看到:

  • 價格點的日期和時間
  • 賣出和買進價格
  • 策略的所有事件(開單、提示、交易)
  • 價格點上的淨值和餘額

如需快速尋找包含事件的行,可使用以下命令:Debug(偵錯)->Find Previous Action in Tick Log(在價格點日誌中尋找上一個指令)或 Debug(偵錯)->Find Next Action in Tick Log(在價格點日誌中尋找下一個指令)。

Luadebugging8.png

策略統計

統計資訊顯示在偵錯器的 Statistics(統計)標籤上,它反映策略的總體表現。

統計資訊包括:

  • 已平倉交易數量和策略的總盈/虧
  • 盈利最多/最少的盈利交易
  • 虧損最多/最少的虧損交易
  • 淨值和餘額的最大值和最小值
  • 淨值和餘額的最大跌幅。該跌幅是淨值或餘額自達到新的絕對最大值以來減少的最大幅度。
Luadebugging9.png

圖表

圖表顯示在偵錯器的 Chart(圖表)標籤上,它以直觀的形式顯示策略結果。

該圖表顯示執行策略的商品的價格,這些價格處於在偵錯工作階段參數中選擇的時間框架內。

紅色箭頭表明至少執行了一份賣出單。箭頭指向此棒線期間執行的所有賣出單的加權平均價格。

綠色箭頭表明至少執行了一份買進單。箭頭指向此棒線期間執行的所有買進單的加權平均價格。

在價格圖表下方有淨值和餘額圖表。這些線顯示棒線的期末淨值和餘額。淨值線上還覆有半透明的雲(如果已在參數中開啟)。此雲顯示相應棒線上的最大淨值和最小淨值。

要查看關於某根棒線的詳細資訊,只需右鍵按一下該棒線即可。

還可以使用滑鼠或使用 Debug(偵錯)->Chart(圖表)命令來縮放或移動圖表。

Luadebugging10.png

表格

策略使用各種表格來監視市場、交易和訂單。使用與相關表格同名的標籤,您可以看到模擬的每個價格點上所有交易對象的變化。

請注意,執行回溯測試時,表格不可用。只能在偵錯過程中看到表格。

Luadebugging11.png

GetHistory 模擬

對棒線應用策略時,通常會呼叫主應用程式的 GetHistory 命令。在這種情況下,會顯示一個對話方塊,請求提供其他的價格資料

您必須為所請求的商品和時間框架選擇價格來源。請注意,只會使用來源中早於模擬日期/時間的資料。所請求的歷史資料在之後的所有棒線將以模擬的價格點為基礎構建。

您還可以選擇「Empty History」(清空歷史資料)。在這種情況下,將不會提供任何歷史資料,並且僅會以價格點資料為基礎填充資料。但是,如果策略的時間框架較長(數小時或數天),可能會導致策略在實際啟動交易之前有較長時間的延遲。例如,如果策略的時間框架為數天,然後使用預設參數應用 MACD,策略將只能在所模擬市場的第 26 天啟動交易。

請注意,只有模擬的商品會得到正確處理。

亦請參閱

策略偵錯器Lua 偵錯對策略進行回溯測試

其他語言版本

Language: English  • español • français • русский • 中文 • 中文(繁體)‎