liawfujin 發表於 21-12-29 01:28

微分策略(附程式)

本帖最後由 liawfujin 於 21-12-29 01:51 編輯

學過微積分的人應知道距離(對時間)的微分是速度, 而把微分的概念應用到股價上, 那麼對股價(均線)微分, 可以得到股價上漲或下跌的速度!

將微分觀念應用到程式交易, 幣圖誌裡有一篇文章可以參考, " 04/03開發商品的交易系統 - 基礎篇 微分" ,https://www.bituzi.com/2015/04/trading-fundamantals34.html

這裡還是從前篇 HullMoving Average(HMA) 出發, 微分是無限小的變量,我們無法做到無限小, 只能在此均線上取兩點(6 根 K 棒)的差值(即導數)來近似!
//----------------------------------
inputs: Hlength(x), dyz(6);Input: avmlen(y), asima(2), du(z1),dl(z2);var: M1_M2(0), avM1_M2(0);vars: delta1(0), MA(0),HMA(0);vars: mp(0), IsBalanceDay(False);//----------------------------------------MA=2*WAverage(close,IntPortion(Hlength*0.5))-WAverage(close,Hlength);HMA=WAverage(MA,IntPortion(SquareRoot(Hlength)));
delta1 =HMA - HMA;
//----------------------------------------M1_M2 = AverageFC(delta1, asima);avM1_M2 = AverageFC(M1_M2, avmlen);
//-----------------------------------------mp = MarketPosition;if DAYofMonth(Date) > 14 and DAYofMonth(Date) < 22 and DAYofWeek(Date)= 3 then isBalanceDay = True else isBalanceDay =False;//---------------------------------------if mp = 0 then begin   if M1_M2 cross over avM1_M2+du then buy next bar at market;    end;

if mp > 0 then begin if M1_M2 cross under avM1_M2-dl then sellshort next bar at market;end;

if mp < 0 then begin   if M1_M2 cross over avM1_M2+du then buy next bar at market;end;
if IsBalanceDay then setExitonClose;
//--------------------------------------------------
delta1 即為   HullMoving Average(HMA) 的導數, 當導數為零時, 代表均線反轉, 而導數極大(小)值, 代表均線的反曲點, 均線增速為零, 之後均線上漲速度變緩!

為使導數較為平滑, 可求其某小區間的均值, 即 M1_M2 = AverageFC(delta1, asima); 而 avM1_M2 = AverageFC(M1_M2, avmlen) 為某一區間的導數簡單平均值(線)!

此指標的交易策略, 可以在導數M1_M2 穿越 avM1_M2 之上時買進, 在 M1_M2 穿越 avM1_M2 之下時賣出, 加減一小差值 du, dl 當緩衝, 以減少買賣雜訊.

4分鐘 K 線, 跑日夜盤的波段策略, 以 2017.05 至2020.06.30 之資料為樣本內做優化, 一口小台, 不設停損, 每月結算, 起始資金10萬, 單邊費用設120元, 2020. 07.01 後是樣本外績效,

qingxinguayu 發表於 22-9-18 08:37

liawfujin 發表於 22-9-16 14:19
x, y, z1, z2 是數值參數, 要帶入數值才能編譯!

謝謝大佬指點迷津,這下明白了.感恩有你!

liawfujin 發表於 22-9-16 14:19

qingxinguayu 發表於 22-9-15 11:34
編譯不通過,提示變量設置錯誤.Hlength(x)
avmlen(y)
du(z1),dl(z2)

x, y, z1, z2 是數值參數, 要帶入數值才能編譯!

qingxinguayu 發表於 22-9-15 11:34

編譯不通過,提示變量設置錯誤.Hlength(x)
avmlen(y)
du(z1),dl(z2)

rayho9983 發表於 23-8-16 23:58

感謝分享

kkreal 發表於 23-10-24 14:03

感謝分享觀念
頁: [1]
查看完整版本: 微分策略(附程式)