hulk10425 發表於 12-7-25 17:11

(請教)想問一下這些濾嘴為什麼沒辦法正確過濾。

先附上小弟我的程式碼

IIf( MA(C,75) > Ref(MA(C,75),-5), a_1= 1,a_1 = 0);
IIf (MA(C,75) > MA (C,150) > MA(C,300),a_2 =1 ,a_2 = 0);
IIf( MA(V,5)>MA(V,10)>MA(V,15),a_3 =1,a_3 = 0);
IIf( HHV(RSI(30),5) == RSI(30), a_4 =1,a_4 =0);
IIf(RSI(30) >80 AND RSI(60) >50 AND MACD(12,26) >0,a_5 =1,a_5=0);
IIf(ADX(5)>20,a_6 =1 ,a_6 =0);
IIf(C>Ref(C,-1)>Ref(C,-2)>Ref(C,-3),a_7 =1,a_7 =0);

Buy = (a_1 =1AND a_2 =1 AND a_3 =1 AND a_4 =1 AND a_5=1 AND a_6=1 AND a_7=1);

Sell =C< MA(C,10) ;

上面總共有七個濾嘴,然後 a_1 ~ a_7 分別是濾嘴通過與否的開關。
如果滿足這七個濾嘴則下單買進。
我的問題在於 這段程式碼好像跟我上述想要表達的意思有出入耶,因為當我改變濾嘴裡面的條件後,總交易次數並沒有改變,也就是說電腦買進的條件好像不適根據那些濾嘴做決策的,為什麼會這樣子呢 ? 謝謝 ^^

jo5918 發表於 12-7-25 17:24

{:4_90:}肯定您的研究精神

lchardie 發表於 12-7-25 17:35

本帖最後由 lchardie 於 12-7-25 17:38 編輯

IIf( MA(C,75) > Ref(MA(C,75),-5), a_1= 1,a_1 = 0);

這種寫法看得我都要哭笑不得了

a_1 = MA(C,75) > Ref(MA(C,75),-5) 這才是正確的

hulk10425 發表於 12-7-25 17:49

請問一下

a_1 = MA(C,75) > Ref(MA(C,75),-5) 表示說 今天的75日MA 如果大於 五天前的75日MA的話那麼 a_1就等於一的意思囉 ?

那麼我寫 IIf( MA(C,75) > Ref(MA(C,75),-5), a_1= 1,a_1 = 0); 這樣應該也是這個意思吧@@?

hulk10425 發表於 12-7-25 18:00

喔喔 ,我了解了= ="好丟臉。

一夜輸 發表於 12-7-25 18:23

我都看不懂{:4_120:}    要丟什麼?

ncur 發表於 12-7-26 11:14

一夜輸 發表於 12-7-25 18:23 static/image/common/back.gif
我都看不懂      要丟什麼?

恩~ 不介意的話,丟點打賞的COCO錢好了~上面兩位熱心的大大值得您的鼓勵.

冠軍熊 發表於 12-7-26 13:30

因為你的濾嘴是山寨版的 裡面沒有放棉花...{:4_122:}

hulk10425 發表於 12-7-27 12:10

裡面沒放棉花的意思是= = ?

我已經把程式碼改成

a_1 = IIf( MA(C,75) > Ref(MA(C,75),-5), 1,0);

a_2 = IIf (MA(C,75) > MA (C,150) > MA(C,300),1 ,0);

a_3 = IIf( MA(V,5)>MA(V,10)>MA(V,15),1,0);

a_4 = IIf( HHV(RSI(30),5) == RSI(30), 1,0);

a_5 = IIf(RSI(30) >80 AND RSI(60) >50 AND MACD(12,26) >0,1,0);

a_6 = IIf(ADX(5)>20,1 ,0);

a_7 = IIf(C>Ref(C,-1)>Ref(C,-2)>Ref(C,-3),1, 0);

a_8 = IIf( a_1 =1AND a_2 =1 AND a_3 =1 AND a_4 =1 AND a_5=1 AND a_6=1 AND a_7=1,1,0);

Buy = a_8 ;


Sell =C< MA(C,10) ;

但是結果好像還是沒變耶,為什麼呢 @@?

kilroy 發表於 12-7-27 13:07

hulk10425 發表於 12-7-27 12:10 static/image/common/back.gif
裡面沒放棉花的意思是= = ?

我已經把程式碼改成

大大 濾嘴應該是指抽菸的東西,我是沒有抽菸啦
---

在AB裡

Condition = 條件;

如果有符合條件時,就會回傳 true 了

所以不用再用 iif( 某條件, 1,0); 來傳了

ex.

a_1 = MA(C,75) > Ref(MA(C,75),-5);
a_2 = MA(C,75) > MA (C,150) > MA(C,300);
a_3 = MA(V,5)>MA(V,10) AND MA(V,10)>MA(V,15);
a_4 = HHV(RSI(30),5) == RSI(30);
a_5 = RSI(30) >80 AND RSI(60) >50 AND MACD(12,26) >0;
a_6 = ADX(5)>20;
a_7 = C>Ref(C,-1)>Ref(C,-2) AND Rec(C,-2)>Ref(C,-3);

buy = a_1 and a_2 and a_3 and a_4 and a_5 and a_6 and a_7;
short = C<MA(C,10);
---

再來就是如果要跑 AB 的 analysis

記得 buy, short, cover, sell 這四個條件都要寫入語法裡

才可以做 back test

ex.

Buy = 買進條件;
Short =賣出條件;

Sell = Short;
Cover = Buy;

Buy = ExRem(Buy,Short);
Short = ExRem(Short,Buy);


---
如果您的這些條件是要跑程式交易

既便是回測績效很好看,也不能用

有很多地方要注意

1. C > 某值,或是某 MA 大於 某 MA
    這類的條件式,在盤中上述數值都是即時跳動的
    可能上一秒符合,下一秒不符合

   訊號就會跳來跳去,這樣必須再加一個當根K棒完成後才動作的判斷

2. iif( conditionA, conditionB, 1, 0);

    這個於法只會在當根K達到條件時 為 1
    下根K 時,會回傳為 0

    這點 AB 和 您可能之前使用的 TS/MC/HTS 有很大差異

    使用上要注意一下是否是自己想要的結果


---

參考看看了

sdnian 發表於 12-7-27 13:08

hulk10425 發表於 12-7-27 12:10 static/image/common/back.gif
裡面沒放棉花的意思是= = ?

我已經把程式碼改成

我有點好奇, 您這個程式碼能通知語法檢查嗎? (AB 的 Formula Editor 的工具列, 按 "AFL 紅色打勾" 那個圖示)

hulk10425 發表於 12-7-28 08:13

kilroy 發表於 12-7-27 13:07 static/image/common/back.gif
大大 濾嘴應該是指抽菸的東西,我是沒有抽菸啦
---



感謝!!!獲益良多 ORZ
頁: [1]
查看完整版本: (請教)想問一下這些濾嘴為什麼沒辦法正確過濾。