HSP程式交易論壇 >> 程式交易 >> 論壇主區 >> 程式交易討論區 >> 請問版主關於MACD
請問版主關於MACD
mingyi1973,2009-08-04 20:47:00
請問版主為什麼我在HSP上設的MACD值和奇狐的值是一樣的
但是出來的MACD差柱值結果卻是不一樣的而且倍數也不是固定的
請問要如何將奇狐的值換算成HSP的。
以下是奇狐MACD的算法原碼:
LONG:=26; P1:=20; P2:=100;
SHORT:=12; P1:=5; P2:=40;
M:=9; P1:=2; P2:=60;
{Moving Average Convergence/Divergence , MACD , 移動平均收斂/發散指標}
DIFF:EMA(CLOSE,SHORT) - EMA(CLOSE,LONG);
DEA:EMA(DIFF,M);
MACD:2*(DIFF-DEA),COLORSTICK,Linethick2;
{==================================================================
英譯:
DIFF=Difference = 差異=差離值
DEA=Difference Exponential Average=差離值平均值
MACD=Moving Average Convergence/Divergence = 移動平均收斂/發散
1.利用快速和慢速兩條指數平滑移動平均線,計算兩者之間的差離值DIFF
2.再利用 差離值DIFF,來計算 差離值平均值DEA
3.本公式MACD柱狀,即可明顯體現出了DIFF與DEA兩者的收斂交會與發散分離的情況
用以研判買進或賣出的時機
===================================================================}
{以下是將柱狀變寬的原碼============================================
DIFF:EMA( CLOSE , SHORT ) - EMA( CLOSE , LONG),Linethick0,Color33AAFF;
DEA:EMA( DIFF , M ),Linethick0,ColorFF9966;
MACD: 2 * ( DIFF - DEA ),Linethick0,Color9966FF;
StickLine(MACD>0,0,MACD,6,1),Color9966FF;
StickLine(MACD<=0,0,MACD,6,1),ColorCCFF66;
PARTLINE(C>0,DIFF),Color33AAFF;
PARTLINE(C>0,DEA),ColorFF9966;
===================================================================}
Hunta,2009-08-04 22:37:57
依照說明,奇狐的所謂MACD柱狀,是DIFF與DEA兩者的差值,而HSP的差柱是DIFF與MACD兩者的差值,定義上似乎不同。
mingyi1973,2009-08-04 23:21:00
那這樣是否就無法換算了?
mingyi1973,2009-08-04 23:23:27
LONG:=26; P1:=20; P2:=100;
SHORT:=12; P1:=5; P2:=40;
M:=9; P1:=2; P2:=60;
{Moving Average Convergence/Divergence , MACD , 移動平均收斂/發散指標}
DIFF:EMA(CLOSE,SHORT) - EMA(CLOSE,LONG);
DEA:EMA(DIFF,M);
MACD:2*(DIFF-DEA),COLORSTICK,Linethick2;
他這個可以改
要怎麼改成你的算法?
Hunta,2009-08-05 00:03:57
HSP系統之MACD指標是依照正常之MACD公式所計算出來,而MACD差柱就是D-M,即DIF-MACD。
你可以兩套同時設定同樣的參數,看一下算出來的DIF及MACD是否一樣,若不一樣的話,那可能是否是他們的公式有做過修改。
mingyi1973,2009-08-05 11:15:26
我知道HSP系統之MACD指標是依照正常之MACD公式所計算出來的,因為其他看盤軟體和你的一樣,只有奇狐的跟你不同,而且他的快速線和慢速線的值是有限制的,所以想將之前在奇狐使用的公式轉到您這裡使用,但是兩邊MACD的值都不一樣,那就無法換算,如果差距是固定的倍數還好,但是有時是0.4倍有時是0.6倍實在無法侍從,所以想問你是怎麼算的,我再將他的做修改,才能找出一樣的參數,才能讓之前的公式績效固定。謝謝!!!
Hunta,2009-08-05 12:31:23
這是依照他的說明公式所寫的程式:
10 自訂技術指標[ #1 , 差柱 ]
20
30 Vi = 9
40 Vj = 12
50 Vk = 26
60 GoSub macd
70 If Vf >= 0 Then
80 柱狀線[ Vf , 0 , 實心 , 技術1 , #1 , 差柱 , 顏色: 255 ]
90 Else
100 柱狀線[ Vf , 0 , 實心 , 技術1 , #1 , 差柱 , 顏色: 52224 ]
110 End If
120
130 Sub macd
140 Vd = 5分_EMA( Vj ) - 5分_EMA( Vk )
150
160 Ve = 0
170 Vg = Vi + 20 - 1
180 For Vh = 20 To Vg Step 1
190 Ve = Ve + ( 前Vh_5分_EMA( Vj ) - 前Vh_5分_EMA( Vk ) )
200 Next
210 Ve = Ve / Vi
220
230 For Vh = 19 To 0 Step -1
240 Ve = Ve + 2 * ( 前Vh_5分_EMA( Vj ) - 前Vh_5分_EMA( Vk ) - Ve ) / ( Vi + 1 )
250 Next
260
270 Vf = 2 * ( Vd - Ve )
280 End Sub
Run出來的結果如下:
[IMGA=0,absMiddle]http://www.huntasoft.com/hsp/pic/0805-1.jpg[/IMGA]
下載程式碼0045.rda(請存在huntap資料匣內) [URL=http://www.huntasoft.com/hsp/0045.rda]http://www.huntasoft.com/hsp/0045.rda[/URL]
看這樣對不對。
mingyi1973,2009-08-05 19:35:08
報告老師我對過了,這樣算不對,數據都差了一點,如果換成十五分鐘就差更多了。
LONG:=26; P1:=20; P2:=100;
SHORT:=12; P1:=5; P2:=40;
M:=9; P1:=2; P2:=60;
P1是最小,P2是最大,所以他們家的MACD不能像你一樣,可以調到20以下,是有限制的,如果將他的改成你的算法可以嗎?
Hunta,2009-08-05 22:44:04
如果你改掉他的公式定義,那算出來的值也會改變,那你回測出來的訊號及績效也會跟之前不一樣。
另外,你說數值差一點,那交叉位置是否有一致嗎?若有一致的話,數值是否就沒太大影響了?
mingyi1973,2009-08-06 13:05:26
交叉位置是一致的,數值會有影響,因為我不是用死叉跟金叉來判定,會造成交易次數過多,所以用macd數值來判定,這樣多空點才有差距,沒關係我用大概的倍數來計算就好,因為這兩天我發現這樣算,差距只有幾秒所以沒什麼太大差別。
還有一個問題要請教:
我的停損是這樣寫
860 // 多單停損
870 If 目前部位( 倉位多空 ) > 0 Then
880 If 單K計數器( 目前K線 , 0 ) = 0 Then
890 Vl = 目前部位( 第 1 次成本價位 ) - 15分_最低價
900 Vi = 前1_15分_均價( 5 ) / 170
910 Vb = ( 15分_最高價 + 15分_最低價 ) / 2
920 If Vl > Vi Then
930 Vf = 15分_最高價 + 10
940 S2$ = '損' + Cstr( Vg )
950 顯示文字[ S2$ , 主畫面 , ( 0 , Vf ) , 字型: 新細明體 , 大小: 010 , 顏色: 16744703 ]
960 If 最後K線 = 是 And 單K計數器( 目前K線 , 0 ) = 0 Then
970 S1$ = '0' + ' ' + Cstr( Vg )
980 輸出命令檔( R:\hsp02.txt , [yyyy]/[mm]/[dd]□[hh]:[nn]:[ss]□[S1$] )
990 End If
1000 End If
1010 End If
1020 End If
1030
1040 // 空單停損
1050 If 目前部位( 倉位多空 ) < 0 Then
1060 If 單K計數器( 目前K線 , 0 ) = 0 Then
1070 Vk = 15分_最高價 - 目前部位( 第 1 次成本價位 )
1080 Vi = 前1_15分_均價( 5 ) / 170
1090 Vb = ( 15分_最高價 + 15分_最低價 ) / 2
1100 If Vk > Vi Then
1110 Vj = 15分_最低價 - 10
1120 S3$ = '損' + Cstr( Vg )
1130 顯示文字[ S3$ , 主畫面 , ( 0 , Vj ) , 字型: 新細明體 , 大小: 010 , 顏色: 8454016 ]
1140 If 最後K線 = 是 And 單K計數器( 目前K線 , 0 ) = 0 Then
1150 S1$ = '-1' + ' ' + Cstr( Vg )
1160 輸出命令檔( R:\hsp02.txt , [yyyy]/[mm]/[dd]□[hh]:[nn]:[ss]□[S1$] )
1170 End If
1180 End If
1190 End If
1200 End If
但是碰到一個問題
我今天一買進立刻停損了
因為當根k線的最低點低於停損價
vg=收盤價
請問怎麼樣能讓當根k線買進賣出時不做停損動作?
Hunta,2009-08-06 15:05:16
在行號880及1060各加上:
And K線序號( 目前K線 ) > 目前部位( 第 1 次建倉K線序號 )
即可。
97 1 8: 此主題共有11帖 此頁11帖 每頁12帖
[查看完整模式] LeadBBS 5.0 耗時62.5毫秒 請求2次
|