2018年5月3日 星期四

開發商品的交易系統 - 進階篇 [11]

EasyTrader ArtNo 297
投資組合包含了下列幾個重要元素(如圖)
1.要交易的商品列表
2.商品列表內每個商品的交易策略
3.投組權益值


瞭解甚麼是動態投資組合
動態投資組合策略,不僅是應用於許多商品的一套簡單的策略組合, 同時也考慮到一些額外的因子:
1.資金限制
2.進場單的優先次序
3.投入金額和風險管理
4.整體投資組合曝險程度


批次處理組合回溯測試,單純的評估分別應用於每個商品的策略的表現,然後將各批次輸出結果整合為一份報告。真正的動態投資組合回溯測試,通過動態地考慮投資組合表現來模擬實務交易上的行為,投組權益與可動用的資金是隨著每個商品、每根K棒來動態評估,以決定可投資的金額,因此當考慮到整體投組曝險程度時所輸出的結果也會不同。

當可動用資金不足以支付同時出現的所有進場交易機會時,則會根據使用者自訂的標準,選擇最佳的交易機會。除了某一特定商品的表現之外,投組權益拉回或其他投組表現也可以納入進出場的考慮因素。

延續上一篇的 開發商品的交易系統 - 進階篇 [10] PMMS相關的指令/函數介紹
關鍵詞名稱:pmms_strategy_marketposition(StrategyIndex)
參數:StrategyIndex 為數值變數
回傳值:數值
說明:傳回指定索引編號的交易策略目前的倉位
備註:此函數僅限於投組交易(PortFolio Trader)內的訊號檔使用
範例:Value1 = pmms_strategy_marketposition(0) ;

關鍵詞名稱:pmms_strategy_netprofit(StrategyIndex)
參數:StrategyIndex 為數值變數
回傳值:數值
說明:傳回指定索引編號的交易策略目前的淨損益
備註:此函數僅限於投組交易(PortFolio Trader)內的訊號檔使用
傳回數值會以投組交易內設定的幣值單位為基礎
範例:Value1 = pmms_strategy_netprofit(0);

關鍵詞名稱:pmms_strategy_openprofit(StrategyIndex)
參數:StrategyIndex 為數值變數
回傳值:數值
說明:傳回指定索引編號的交易策略目前的浮動損益
備註:此函數僅限於投組交易(PortFolio Trader)內的訊號檔使用
傳回數值會以投組交易內設定的幣值單位為基礎
範例:Value1 = pmms_strategy_openprofit(0);

關鍵詞名稱:pmms_strategy_maxiddrawdown(StrategyIndex)
參數:StrategyIndex 為數值變數
回傳值:數值
說明:傳回指定索引編號的交易策略目前的最大回撤(MDD)
備註:此函數僅限於投組交易(PortFolio Trader)內的訊號檔使用
傳回數值會以投組交易內設定的幣值單位為基礎
範例:Value1 = pmms_strategy_maxiddrawdown(0);

關鍵詞名稱:pmms_strategy_currentcontracts(StrategyIndex)
參數:StrategyIndex 為數值變數
回傳值:數值
說明:傳回指定索引編號的交易策略目前的未平倉總口數
備註:此函數僅限於投組交易(PortFolio Trader)內的訊號檔使用
範例:Value1 = pmms_strategy_currentcontracts(0);

關鍵詞名稱:pmms_strategy_entryprice(StrategyIndex)
參數:StrategyIndex 為數值變數
回傳值:數值
說明:傳回指定索引編號的交易策略目前的未平倉部位的平均進場價格
備註:此函數僅限於投組交易(PortFolio Trader)內的訊號檔使用
範例:Value1 = pmms_strategy_entryprice(0);

關鍵詞名稱:pmms_strategy_riskcapital(StrategyIndex)
參數:StrategyIndex 為數值變數
回傳值:數值
說明:傳回指定索引編號的交易策略目前的未平倉部位的預留風險損失金額
備註:此函數僅限於投組交易(PortFolio Trader)內的訊號檔使用
傳回數值會以投組交易內設定的幣值單位為基礎
範例:Value1 = pmms_strategy_riskcapital(0);

關鍵詞名稱:pmms_strategy_symbol(StrategyIndex)
參數:StrategyIndex 為數值變數
回傳值:文字字串
說明:傳回指定索引編號的交易策略內目前訊號檔所對應的商品名稱
備註:此函數僅限於投組交易(PortFolio Trader)內的訊號檔使用
範例:pmms_strategy_symbol(0);

關鍵詞名稱:pmms_strategies_get_by_symbol_name(SymbolName)
參數:SymbolName 為字串變數
回傳值:數值
說明:傳回目前依商品名稱所對應的策略索引編號(若找不到商品名稱則回傳-1),如果好幾個策略都有同樣的商品名稱,則會傳回其中一個策略的索引編號
備註:此函數僅限於投組交易(PortFolio Trader)內的訊號檔使用
範例:Value1 = pmms_strategies_get_by_symbol_name("MSFT");

關鍵詞名稱:pmm_set_my_status(Status)
參數:Status 為字串變數
回傳值:無
說明:此函數賦予投組內目前的策略一個代表狀態的文字字串(此文字狀態會顯示在投組交易的即時視窗內的"自訂文字"欄位)
備註:此函數僅限於投組交易(PortFolio Trader)內的訊號檔使用
範例:if marketposition < 0 then pmm_set_my_status("Short");

關鍵詞名稱:pmm_get_my_named_num(VariableName)
參數:VariableName 為字串變數
回傳值:數值
說明:取得目前策略內指定變數的值
備註:此函數僅限於投組交易(PortFolio Trader)內的訊號檔使用
範例:Value1 = pmm_get_my_named_num("CustomVar");

關鍵詞名稱:pmm_get_my_named_str(VariableName)
參數:VariableName 為字串變數
回傳值:文字字串
說明:取得目前策略內指定變數的值
備註:此函數僅限於投組交易(PortFolio Trader)內的訊號檔使用
範例:pmm_get_my_named_str("CustomStr");

關鍵詞名稱:pmm_set_my_named_num(VariableName, VariableValue)
參數:VariableName 為字串變數
參數:VariableValue 為數值變數
回傳值:無
說明:此函數對目前策略內的指定變數賦予新值(數值)
備註:此函數僅限於投組交易(PortFolio Trader)內的訊號檔使用
範例:pmm_set_my_named_num("MarketPosition", marketposition);

關鍵詞名稱:pmm_set_my_named_str(VariableName, VariableValue)
參數:VariableName 為字串變數
參數:VariableValue 為字串變數
回傳值:無
說明:此函數對目前策略內的指定變數賦予新值(字串)
備註:此函數僅限於投組交易(PortFolio Trader)內的訊號檔使用
範例:if marketposition > 0 then pmm_set_my_named_str("Position", "Long");

關鍵詞名稱:pmm_get_global_named_num(VariableName)
參數:VariableName 為字串變數
回傳值:數值
說明:取得指定全域變數內的數值
備註:此函數僅限於投組交易(PortFolio Trader)內的訊號檔使用
範例:Value1 = pmm_get_global_named_num("GlobalVar");

關鍵詞名稱:pmm_get_global_named_str(VariableName)
參數:VariableName 為字串變數
回傳值:文字字串
說明:取得指定全域變數內的字串
備註:此函數僅限於投組交易(PortFolio Trader)內的訊號檔使用
範例:pmm_get_global_named_str("GlobalStr");

關鍵詞名稱:pmm_set_global_named_num(VariableName, VariableValue)
參數:VariableName 為字串變數
參數:VariableValue 為數值變數
回傳值:無
說明:此函數對指定的全域變數賦予新值(數值)
備註:此函數僅限於投組交易(PortFolio Trader)內的訊號檔使用
範例:pmm_set_global_named_num("GlobalVar", 3);

關鍵詞名稱:pmm_set_global_named_str(VariableName, VariableValue)
參數:VariableName 為字串變數
參數:VariableValue 為字串變數
回傳值:無
說明:此函數對目前策略內的指定變數賦予新值(字串)
備註:此函數僅限於投組交易(PortFolio Trader)內的訊號檔使用
範例:if marketposition > 0 then pmm_set_global_named_str("GlobalStr", symbolname + " is Long");

關鍵詞名稱:pmm_get_my_index
參數:無
回傳值:數值
說明:取得目前交易策略的索引編號(編號為以零為基礎開始計算)
備註:此函數僅限於投組交易(PortFolio Trader)內的訊號檔使用
範例:Value1 = pmm_get_my_index;

關鍵詞名稱:Array_Contains(ArrayName,Value)
參數:ArrayName 為一個可存放數值/文字/布林值得一維陣列名稱
參數:Value 待尋找的陣列內含值(數值/文字/布林值)
回傳值:布林值(True or False)
說明:檢查在指定的一維陣列內是否包含特定元素
備註:無
範例:Condition1 = Array_Contains(Array1,4);

關鍵詞名稱:Convert_Currency(DateTime, SrcCurrency, DstCurrency, SrcMoney);
參數:DateTime 以日期時間的數值格式表示
參數:SrcCurrency 待轉換貨幣代碼(來源)
參數:DstCurrency 欲轉換貨幣代碼(目標)
參數:SrcMoney 待轉換貨幣金額
回傳值:數值
說明:傳回依指定日期時間不同貨幣間交叉匯率可兌換金額總數
備註:14種基礎貨幣可用常數表示式
範例:Convert_Currency(39448.25000000, GBP, USD, 12.34);
回傳24.48 意思是將12.34英鎊以2008/1/1英鎊兌美元匯率可換得24.48美元

關鍵詞名稱:SymbolCurrencyCode
參數:無
回傳值:常數字串
說明:傳回QM內交易所貨幣代碼設定值
備註:14種基礎貨幣可用常數表示式
範例:condition1 = SymbolCurrencyCode = USD;
用來檢查目前商品在QM內交易所貨幣設定是否為美元

關鍵詞名稱:Portfolio_CurrencyCode
參數:無
回傳值:常數字串
說明:傳回投組交易內貨幣代碼設定值(Portfolio Settings)
備註:14種基礎貨幣可用常數表示式
範例:condition1 = Portfolio_CurrencyCode = USD;
用來檢查目前投組帳戶設定是否為美元計價

關鍵詞名稱:CurrencyCodeToStr(CurrencyCode)
參數:CurrencyCode 常數
回傳值:常數字串
說明:將貨幣代碼轉成文字表示
備註:此函數僅限於投組交易(PortFolio Trader)內的訊號檔使用
範例:CurrencyCodeToStr(symbolcurrencycode)
如果目前交易策略使用的商品以歐元計價則傳回值為"EUR"

關鍵詞名稱:StrategyCurrencyCode
參數:無
回傳值:常數字串
說明:傳回策略內貨幣設定值
備註:14種基礎貨幣可用常數表示式
範例:condition1 = StrategyCurrencyCode = USD;

關鍵詞名稱:PortfolioEntriesPriority
參數:無
回傳值:無
說明:PortfolioEntriesPriority = Priority 賦予投組內每個進場單優先次序,數值愈大愈優先,如果投組產生的所有進場單的執行將導致超出資金限制, 則優先順序最高的進場單將獲得優先權, 而優先順序最低的進場單將不會執行。如果未指定 PortfolioEntriesPriority, 則將根據商品在投組交易內商品列表內的順序執行由上而下執行。
備註:此函數僅限於投組交易(PortFolio Trader)內的訊號檔使用
範例:PortfolioEntriesPriority = (-Close) 。
對較低價格的商品給予較高的進場次序優先度

關鍵詞名稱:pmms_calc_money_cost_for_entry_per_cntrct(PotentialEntryPrice, Portfolio_GetMarginPerContract)
參數:PotentialEntryPrice 為數值變數
參數:Portfolio_GetMarginPerContract 為PT內建屬性,取得每口交易保證金
回傳值:數值
說明:
備註:此函數僅限於投組交易(PortFolio Trader)內的訊號檔使用
範例:
var: PotentialEntryPrice(close), MoneyCostForInvestPerCtrct(0);
if (entryprice > 0) then PotentialEntryPrice = entryprice;
MoneyCostForInvestPerCtrct =
pmms_calc_money_cost_for_entry_per_cntrct(PotentialEntryPrice, Portfolio_GetMarginPerContract)

14種基礎貨幣
AUD澳幣/CAD加幣/CHF瑞朗/EUR歐元/GBP英鎊/HKD港幣/JPY日幣/NOK挪威克朗/NZD紐幣/SEK瑞典克郎/SGD新加坡幣/TRY土耳其里拉/USD美元/ZAR南非幣


PMMS 關鍵詞參考來源 
https://www.multicharts.com/trading-software/index.php/Portfolio_Trader
https://www.multicharts.com/trading-software/index.php/PMM_Keywords

沒有留言:

張貼留言