2009年1月16日 星期五

計算當日損益

這方法是利用"NetProfit"的方法去計算當日損益。

NetProfit的意思是淨利。先來看兩張圖

該策略回測從2008年11月開始。



上圖中的Total Net Profit 就是NetProfit的紀錄結果



這張圖中可以看到,在5K中,每一根K線都有NetProfit。

而且NetProfit的計算是從K線圖中的第一根K線開始

然後有交易,NetProfit才會開始累積,不然就維持0。


好~ 廢話結束。用策略解釋比較清楚~

宣告兩變數,Net和Diff。

Net:把開盤時的NetProfit儲存起來

Diff:計算K線的淨利與Net的差

現在有一個15k策略,交易時間是上午9點到下午1點之間

突破前10根K線高點作多,跌破前10根K線低點作空。

30點停損,50點停利,每天下午1點半平倉。

程式碼如下:

vars:net(0),diff(0);

if date[0] < > date[1] then net=netprofit;

diff=netprofit-net;
print(date,time,net,netprofit,diff);

if true then begin
{*******************************************************}
if time >= 0900 and 1300 >= time then begin

if close cross over Highest(high[1],10) then
buy ("Buy") next bar at market;

if close cross under Lowest(Low[1],10) then
sell ("Sell") next bar at market;

end;
{*******************************************************}
end;

{********************Day End Exit********************}
if marketposition = 1 and time = 1330 then
exitlong("ExitB") next bar at market;
if marketposition = -1 and time = 1330 then
exitshort("ExitS") next bar at market;

{********************Exit********************}
if marketposition = 1 then begin
exitlong("StopB") next bar at entryprice(0)-30 stop;
exitlong("EarnB") next bar at entryprice(0)+50 Limit;
end;
if marketposition = -1 then begin
exitshort("StopS") next bar at entryprice(0)+30 stop;
exitshort("EarnS") next bar at entryprice(0)-50 Limit;
end;


這只是一個隨便想策略,別亂用!!!賠錢別找我算帳。



如圖,此策略在2008.11.18號出現3筆空單。



分別是
0915空,1000停損;1100空,1130停損;1245空,1315停損

3連巴,還真慘~

回測成本2000,停損30點要在加上10點成本

所以回測表上顯示是損失8000,6000停損+2000成本。

記得剛剛在程式碼中有加入一段 print(date,time,net,netprofit,diff)嗎??

策略verify結束後會顯示這些值,分別表示

K線日期,K線時間,Net值,NetProfit值,Diff值。如下圖



2008.11.18開盤時,Net為-44800,也就是在這一天Net都是-44800

在0915下空單,1000停損,損失8000,淨利變成-52800

而Diff由0變成-8000

同理,之後的兩筆停損,NetProfit會變成-60800和-68800

Diff也會變成-16000和-24000。

2008.11.18三連巴結束。NetProfit(累積淨利)為-68800

2008.11.19來到。這時變數Net已經變成-68800了

而NetProfit也是-68800,所以Diff的值為0。

除非當天有交易,讓NetProfit改變,Diff才會有變化,不然會一直為0。

所以我們可以利用Diff來計算當天損益。


現在把先前策略中的

if true then begin 改成

if Diff > -6000 then begin 看看有什麼變化。







從上面3張圖可以看到,本來的3筆交易變成了1筆。

之後的兩筆都不見了!!!

因為加了Diff大於負6000這個判斷。

只要這個判斷不成立就不會在進場。

而第一筆交易已經讓Diff由0變成-8000

Diff也從大於-6000變成小於-6000,所以不會進場第二次。

不過這方法會把手續費考慮進去

所以要注意一下。
HEMiDEMi Technorati Del.icio.us MyShare?犖?貊惜 Yahoo