You need to enable JavaScript in order to visit our site!
 
Logo PTMC
NAVIGATION
CANCEL
 
or via PTMC account
Restore password
or via PTMC account
Logo PTMC
NAVIGATION
or via PTMC account
Restore password
or via PTMC account
or via PTMC account
Restore password
or via PTMC account
Stefan Stefan 09.02 2018

PTMC 的程式開發 (5) MultiCharts 策略改寫

這篇要教大家如何將 MultiCharts 的策略改寫,讓它能夠在 PTMC 上運作。

MultiCharts 策略範例來自於 老余的金融筆記

inputs: Price(close), Len(12); 
vars: var1(0);
var1=RSI(Price,len);


if marketposition=0 and var1 >52 then begin
buy("buy") next bar at market;
end;


if marketpositon=0 and var1 < 48 then begin
sellshort("sell") next bar at market;
end;


if marketposition>0 and var1 <48 then begin
sell("exit_buy) next bar at market;
end;


if market position<0 and var1 > 52 then begin
buytocover("exit_sell") next bar at market;
end;


1. 首先我們要正確解讀這個策略的程式碼:

inputs: Price(close), Len(12); 
vars: var1(0);
var1=RSI(Price,len);

第一行代表的是這個策略的 input 參數

第二行代表的是宣告有個變數 var1

第三行代表的是接收 RSI 指標的傳回值

2.

if marketposition=0 and var1 >52 then begin
buy("buy") next bar at market;
end;
if marketpositon=0 and var1 < 48 then begin
sellshort("sell") next bar at market;
end;
if marketposition>0 and var1 <48 then begin
sell("exit_buy) next bar at market;
end;
if market position<0 and var1 > 52 then begin
buytocover("exit_sell") next bar at market;
end;

這串代表的是根據指標以及部位的條件,在下一根 K 棒開始時,要做出的進出場動作。

3. 先將這四個動作在 Visual Studio 定義出來,在程式碼的最底端加上

internal enum Action
{
Buy = 1,
Sell = 2,
Exit_Buy = 3,
Exit_Sell = 4,
}

我們產生了一個 enum 的型別,取名為 Action,分別是 Buy, Sell, Exit_Buy, Exit_Sell

4. 由於這四個動作都是發生在 next bar 產生時,我們回到上方把 next bar 函式補上

publice override void NextBar()
{

}<span class="redactor-invisible-space"></span>

5. 在 next bar 函式中補上 RSI 的傳回值、目前的部位、

var var1 = Rsi.GetValue();

var position = Positions.GetPositions().Where(p => p.Instruments == Instruments.Current && p.Account == Accounts.Current).ToList
var positioncount = position.Count;<span class="redactor-invisible-space"></span>

6. 根據指標、部位的不同條件值,做出不一樣的動作

if (positioncount == 0 && var1 > 52)
{
MakeOrder(Action.Buy, 1);
}

if (positioncount == 0 && var1 < 48)
{
MakeOrder(Action.Sell, 1);
}

if (positioncount == 0 && var1 < 48)
{
MakeOrder(Action.Exit_Buy, positioncount);
}

if (positioncount == 0 && var1 > 52)
{
MakeOrder(Action.Exit_Sell, posistioncount);
}

7. 將上方四個動作獨立成一個函式叫做 MakeOrder,在下方我們要新增這個函式的運作方式

void MakeOrder(Action action, double amount)
{
Operation side = Operation.Sell ;
if (action ==  Action.Buy || action == Action.Exit_Sell)
    side = Operation.Buy;

var request = new NewOrderRequest()
{
Account = Accounts.Current ,
Instrument = Instruments.Current ,
Amount = amount ,
Type = OrderType.Market ,
Side = side
};

Orders.Send(request);        
}

第一段是產生這筆單

第二段是設定單的內容

最後把單送出去

8. 完成之後即可編譯程式,將產生的 .dll 檔複製到 PTMC 文件目錄底下

9. 開啟 PTMC 的 "交易系統集",新增剛剛產生的交易策略並按下開始鈕,我們就可以看到策略開始執行。



本篇範例程式原始檔(source code)下載連結:https://www.dropbox.com/s/751e1wxp7d73yjn/StrategyOne.zip?dl=0

Discussion
Join PTMC community to post your comments
No comments yet. Be the first.
PTMC 是一個專業的交易平台,結合了強大的圖表和分析工具,並可在不同的金融市場進行交易。 它是由 PFSOFT UK LTD 開發的,該公司是全球銀行和經紀商交易技術提供商
© 2021. PTMC 為基於 Protrader 技術的專業交易平台
地址
臺北市大安區羅斯福路3段273號5樓
聯絡我們
電話: +886-2-2367-8583
E-mail: service@kcdatanet.com
社群
© 2021. PTMC 為基於 Protrader 技術的專業交易平台