加值服務 | 相關文章

【分享】加值函數 GV-Plus 跨圖表策略控管實作

2020/06/03 - MultiCharts,GV-Plus,策略管理,跨圖表傳值,自動上下架,策略評分


如果今天我們只是想要利用【簡單的邏輯】例如:策略連續虧損 N 次就停止交易,連續獲利 N 次就重新上架交易來管理我們的策略,應該怎麼做?

目前市面上【MultiCharts 策略管理】優質產品實在是不少,TOUCHANCE 的評價大師也是屬於其中一個。而類似評價大師的策略管理系統多多半博大精深並且都有自己的管理邏輯,即使開放了非常大的彈性給終端客戶使用也離不開定制的管理框架。

有人會建議可以使用 MultiCharts 的 Portfolio Trader 來做進階的管理,不過 Portfolio Trader 提供的 PMM 函數只能是在 Portfolio Trader 內使用,沒有辦法在圖表的形式上使用沒有辦法跨圖表傳輸。

今天(終於進入主題),我們來用【簡單】的範例介紹一下 TOUCHANCE 的加值函數 GV-Plus 如何應用在 MultiCharts 的策略管理。

 

GV-Plus 是什麼?

GV-Plus 是 GV 的强化版本,函数將資料存在暫存記憶體,加快傳輸速度,同時【跨越】了資料傳遞的限制,您的運算結果可以跨圖表、 Portfolio Trader 甚至是在不同的 MultiCharts 之間傳輸。

操作手冊傳送門 》

跨圖表策略管理範例(超簡單)

我們今天使用下列的簡單管理邏輯,實際的實作出一個策略的上下架管理(其實只是關閉),範例程式碼在文章的最後。

“策略連續虧損 3 次就停止交易,連續獲利 3 次就重新上架交易來管理我們的策略”

實作前,你必須要先擁有下列環境配置與基本條件:

 

 

步驟 1 :開啟 MultiCharts,同時準備好兩個相同商品的圖表。

 

  • 【圖表 1 】為原始的策略,主要目的為輸出訊號與統計每次交易的賺賠使用,我們使用 MultiCharts 內建的 MACD LE 與 MACD SE 作為範例策略使用。
  • 統計每次交易的賺賠我們使用範例提供的 _simple_pass_eq.pla 將統計賺賠次數的結果儲存到 GV-Plus 提供的 MCDB 內。
  • 其中 putMCDataD("GV01", barTime ,"allowTrade", allowTrade); 語法將結果儲存下來給【圖表 2 】作為交易開關的依據。

 

步驟 2 :在【圖表 2】取出結果,並且套用到實際交易。

 

  • 【圖表 2 】我們將 MultiCharts 內建的 MACD LE 與 MACD SE 程式碼重新整合為 _MACD_With_WL_CONTROL.pla 訊號並且插入使用。
  • 程式裡使用 GetMCDataD("GV01", barTime ,"allowTrade"); 將賺賠結果取出,並且加入進出場條件作為控管。
  • 控管的結果如附圖所示,輕鬆的就完成了簡單的跨圖表的策略控管。

 

TOUCHANCE 的【加值函數】除了 GV-Plus 還有提供非常多樣的功能,GV-Plus 的跨圖表管理應用我們就介紹到這邊,是不是非常容易呢?連我這個 PowerLanguage 超級新手都能輕鬆完成,相信你一定可以開發出符合你自己風格的策略管理。

範例程式碼:_simple_pass_eq
var: openEquity(0), closeEquity(0), closeProfit(0),mp(0);
var: barTime(0), cc(0), wlCount(0), allowTrade(1);

barTime = date+time_s / 1000000;
mp = marketposition;
cc = currentcontracts;

//calc OpenEquity
openEquity = i_OpenEquity;
closeEquity = i_ClosedEquity;
closeProfit = 0;

if mp <> mp[1] and mp[1] <> 0 then closeProfit = closeEquity - closeEquity[1];

if closeProfit <> 0 then begin
	if closeProfit > 0 then begin
		if wlCount < 0 then wlCount = 0;
		wlCount = wlCount + 1;
		if wlCount > 3 then wlCount = 3;
	end;

	if closeProfit < 0 then begin
		if wlCount > 0 then wlCount = 0;
		wlCount = wlCount - 1;
		if wlCount < -3 then wlCount = -3;
	end;
end;

if wlCount = 3 then allowTrade= 1;
if wlCount = -3 then allowTrade= 0;

{
once print( File("R:\_simple_pass_eq.csv"), "barTime ," , "allowTrade", "wlCount,", "openEquity,", "closeProfit ,", "mp," , "cc");
print( File("R:\_simple_pass_eq.csv"), barTime :10:10, ",", allowTrade, "," , wlCount, ",", openEquity , ",", closeProfit , ",", mp, ",", cc );
}

putMCDataD("GV01", barTime ,"allowTrade", allowTrade);
範例程式碼:_MACD_With_WL_CONTROL
inputs:  FastLength( 12 ), SlowLength( 26 ), MACDLength( 9 ) ;
var:  var0( 0 ), var1( 0 ), var2( 0 ), barTime (0) ;

barTime = date+time_s / 1000000;

value1 = GetMCDataD("GV01", barTime ,"allowTrade");

var0 = MACD( Close, FastLength, SlowLength ) ;
var1 = XAverage( var0, MACDLength ) ;
var2 = var0 - var1 ;


condition1 = CurrentBar > 2 and var2 crosses over 0 ;

if condition1 then begin
	if value1 = 1 then 
		Buy ( "MacdLE" ) next bar at market ;
	if value1 = 0 then
		if marketposition = -1 then buytocover ("Exit-S") next bar at market;
end;

condition2 = CurrentBar > 2 and var2 crosses under 0 ;

if condition2 then begin                                
	if value1 = 1 then 
		Sell Short ( "MacdSE" ) next bar at market ;
	if value1 = 0 then
		if marketposition = 1 then sell ("Exit-L") next bar at market;
end;