2015年4月2日 星期四

開發商品的交易系統 - 基礎篇 [34]

EasyTrader ArtNo 258
微積分是研究函數的微分、積分以及有關概念和應用的數學分支。微積分是建立在實數、函數和極限的基礎上的。微積分最重要的思想就是用"微元"與"無限逼近",好像一個事物始終在變化你不好研究,但通過微元分割成一小塊一小塊,那就可以認為是常量處理,最終加起來就行。

微積分學是微分學和積分學的總稱。它是一種數學思想,‘無限細分’就是微分,‘無限求和’就是積分。無限就是極限,極限的思想是微積分的基礎,它是用一種運動的思想看待問題。比如,子彈飛出槍膛的瞬間速度就是微分的概念,子彈每個瞬間所飛行的路程之和就是積分的概念。如果將整個數學比作一棵大樹,那麼初等數學是樹的根,名目繁多的數學分支是樹枝,而樹幹的主要部分就是微積分。微積分堪稱是人類智慧最偉大的成就之一。
研究函數,從量的方面研究事物運動變化是微積分的基本方法。微積分的基本概念和內容包括微分學和積分學。微分學主要研究的是在函數自變數變化時如何確定函數值的瞬時變化率(導數或微商)。換言之,計算導數的方法就叫微分學。微分學的另一個計算方法是牛頓法,該演算法又叫應用幾何法,主要通過函數曲線的切線來尋找點斜率。
資料參考 MBA智庫

本篇介紹利用微分概念來尋找價格運動中的拐點拐點代表的是移動平均線中凹形和凸形的變化轉折點,對交易來說,它代表的是價格在觸底之前的下跌減緩,或是在上漲攻頂之前的速度放緩狀況,對於即將而來的進場時機,是一個明確訊號建立的契機,拐點只發生在第二次導數等於零的位置下圖中的黃線指標是一次導數桃紅線指標是二次導數

系統參數與變數
input:EntryType(2),ExitType(4);
inputs:NBarL(24),NBarS(19),TradeProfit(0.045),TradeStopLoss(0.05),ATRs_L(10.7),ATRs_S(6.4);
vars: IsBalanceDay(False),MP(0),PF(0),PL(0),HLRange(100);
inputs: LenA(9),LenB(8),FracA(0.4),FracB(0.8),HighBar(11),LowBar(11);
Vars: AvgVal(0),DerivMA1(0),DerivMA2(0),DerivMA3(0), BuyFlag(False), SellFlag(False);

MP = MarketPosition ;
if DAYofMonth(Date) > 14 and DAYofMonth(Date) < 22 and DAYofWeek(Date)= 3 then isBalanceDay = True else isBalanceDay =False ;

PF = AvgPrice*TradeProfit ;
PL = AvgPrice*TradeStopLoss ;

{計算導數}
AvgVal = Average(Close, LenA);
{第一次導數}
DerivMA1 = (AvgVal - AvgVal[LenA]) / LenA;
{第二次導數}
DerivMA2 = (DerivMA1 - DerivMA1[1]) / 1;

{買賣環境建立}
Condition1 = DerivMA1 Crosses Below 0;
Condition2 = DerivMA1 Crosses Above 0;
Condition3 = DerivMA2 Crosses Below 0;
Condition4 = DerivMA2 Crosses Above 0;

{當第二次導數突破零軸時準備進場作多}
If Condition4 Then BuyFlag = True;

{當第二次導數跌破零軸時準備進場作空}
If Condition3 Then SellFlag = True;

{多方進場}
If MP <> 1 and Condition2 AND BuyFlag Then Begin
Buy Next Bar at Close + Average(Range,LenA)*FracA Stop;
BuyFlag = False;
End;

{空方進場}
If MP <> -1 and Condition1 AND SellFlag Then Begin
Sell Next Bar at Close - Average(Range,LenA)*FracB Stop;
SellFlag = False;
End;

{出場規則}
if ExitType = 1 then SetStopLoss(PL * BigPointValue) ;

if ExitType = 2 then Begin
SetStopLoss(PL * BigPointValue) ;
setProfitTarget(PF * BigPointValue) ;
end;

if ExitType = 3 then Begin
if MP > 0 and BarsSinceEntry = NBarL then ExitLong next bar at Market ;
if MP < 0 and BarsSinceEntry = NBarS then ExitShort next bar at Market ;
end;

if ExitType = 4 then Begin
SetStopLoss(PL * BigPointValue) ;
setProfitTarget(PF * BigPointValue) ;
if MP > 0 and BarsSinceEntry = NBarL then {Sell } ExitLong next bar at Market ;
if MP < 0 and BarsSinceEntry = NBarS then {Buy} ExitShort next bar at Market ;
end;

if IsBalanceDay or date = 1150224 then setExitonClose ;
台指期 30 min K 多空留倉 交易週期 2004/12/31~ 2014/12/31 交易成本 1200

台指期 60 min K 多空留倉 交易週期 2004/12/31~ 2014/12/31 交易成本 1200

結論:過去部落格也介紹過內建函數 SwingHigh/SwingLow與 PivotHighVS/PivotLowVS來找轉折點,本篇利用數學微分的概念來作為策略元素也是有不錯的表現
MagicQS166

2 則留言:

  1. Hi 版主大人,您好!

    拜讀貴網站大作,獲益頗多。本人是初學者,有許多不懂之處,需要版主大人多多指教。

    本人於 “開發商品的交易系統 - 基礎篇 [34]” 有不解之處(如下),請指點一二。謝謝!

    {多方進場}
    If MP <> 1 and Condition2 AND BuyFlag Then Begin
    Buy Next Bar at Close + Average(Range,LenA)*FracA Stop;
    BuyFlag = False;
    End;

    Buy Next Bar at Close + Average(Range,LenA)*FracA Stop; 為什麼要買在比 close + Avg(Range,LenA)*FracA 更高的價位呢? 是為了確認次日價位有突破今日range 40%的向上趨勢嗎?
    不能 Buy Next Bar at market?

    新手上路,請多指教!

    謝謝!

    Nelson Liu

    回覆刪除
  2. 以此例是買突破,當然buy at market也可以,就依個人習慣或是回測績效而定

    回覆刪除