在5分線上,要抓開盤時的日線MACD,跟昨天的日線MACD做比較,請問該怎麼寫

  •   461 
  • 最後發表   小毛  2023 七月 12
小毛 發文於   2022/04/16

在5分線上,

要根據作天日線上的MACD值、與今天一開盤的日線MACD值做比較,

若今天開盤的MACD值高於昨天收盤的日線MACD值,設定VALUE1=1,否則為0,

請問該怎麼寫,煩請賜教,謝謝。

排序方式: 標準 | 最新
XQ小幫手 發文於   2022/04/22

Hello 小毛,

 

您可以用 xf_MACD 來計算跨日頻率的MACD值,然後在換日的時候比較一開盤的跟昨日的MACD值。

簡單的範例如下:

value5 = xf_MACD("D",xf_weightedclose("D"),12,26,9,value2,value3,value4);       //計算日線MACD

if issessionfirstbar then begin    //當日第一根Bar

    if value3 > value3[1] then value1 = 1 else value1 = 0;    //日MACD跟前一根Bar比較若大於的話value1 = 1不然value1 = 0

    end;

黑牛 發文於   2022/07/10

 請問小編~頻率設在一分K;

第一個問題~如果我不指定開盤那根大於前天~我只要盤中有大於前天~那是不是就不用加上這段

f issessionfirstbar then begin    //當日第一根Bar

    if value3 > value3[1] then value1 = 1 else value1 = 0;    //日MACD跟前一根Bar比較若大於的話value1 = 1不然value1 = 0

    end;

只要寫if value3 > value3[1] then ret=1;就可以了

 

第二個問題~如果在分K下寫一個突破當天前高的腳本=condition1

然後要符合日macd大於前天

是不是寫if value3 > value3[1] and condition1 then ret=1;就可以

第三個問題

根據第二個問題又延伸到一個問題~因為我不是開盤第一根去判斷日mcad有沒有大於前天而是盤中,

所以就會有先後問題~如果是先突破當天前高後過段時間再macd大於前一天這樣上面的寫法會觸發嗎?

上面的寫法不管誰先都不會觸發吧,應該是要同時發生 才會觸發吧~

如果我想要先符合macd的條件後在符合過前高要怎麼寫

XQ小幫手 發文於   2022/07/14

Hello 黑牛,

 

1. value3 > value3[1] 會是跟前一根Bar的MACD比較。

如果您是要跟前一天的MACD比較,請使用xfMin_GetValue

舉例來說:

value6 = xfMin_GetValue("D", value3, 1);

if value3 > value6 then...

 

2.vaule3 > value3[1] 要改成上面描述的寫法,其他正確。

 

3.如果您是用 and,那麼就要兩著同時達成才會觸發。

您可以改用變數另外紀錄,舉例來說:

if date <> date[1] then value7 = 0;  //每日重置

 

value6 = xfMin_GetValue("D", value3, 1);

if value3 > value6 then value7 = 1;  //如果當日曾經符合MACD條件,value7 = 1

if value7 = 1 and condition1 then ret =1;

黑牛 發文於   2022/07/14

 

3.如果您是用 and,那麼就要兩著同時達成才會觸發。

您可以改用變數另外紀錄,舉例來說:

if date <> date[1] then value7 = 0;  //每日重置

 

value6 = xfMin_GetValue("D", value3, 1);

if value3 > value6 then value7 = 1;  //如果當日曾經符合MACD條件,value7 = 1

if value7 = 1 and condition1 then ret =1;

 

 

if value3 > value6 then value7 = 1;  //如果當日曾經符合MACD條件,value7 = 1

if value7 = 1 and condition1 then ret =1;

請問上面這一段改成下面那段有什麼差別嗎

If value3 > value6 then condition1=true else condition2=false;  //如果當日曾經符合MACD條件,value7 = 1

if condition2 and condition1 then ret =1;

 

XQ小幫手 發文於   2022/07/19

Hello 黑牛,

 

If value3 > value6 then condition1=true else condition2=false;

如果您這樣寫的話,condition2就會一直是False。

因為condition 每次執行的預設值是False,而運算中也只會被賦予False。

那麼 if condition2 and condition1 then ret =1; 就不會觸發。

黑牛 發文於   2022/07/25

Hello 黑牛,

 

If value3 > value6 then condition1=true else condition2=false;

如果您這樣寫的話,condition2就會一直是False。

因為condition 每次執行的預設值是False,而運算中也只會被賦予False。

那麼 if condition2 and condition1 then ret =1; 就不會觸發。

 

上面打錯應該是If value3 > value6 then condition2=true else condition2=false;  //如果當日曾經符合MACD條件

if condition2 and condition1 then ret =1;

 

這樣才對

 

XQ小幫手 發文於   2022/08/03

Hello 黑牛,

 

If value3 > value6 then condition2=true else condition2=false; 

condition2 = value3 > value6;

這兩種寫法出來的結果是相同的。

 

另外 If value3 > value6 then condition2=true else condition2=false;  這種寫法會變成只有在 value3 > value6 的時候 condition2 才會是True。

跟 if value3 > value6 then value7 = 1; 差別在於 value7 是達成後就會保持在 1,而condition2 則是達成當下才是 true。

建議您可以print出來即可得知。

niji 發文於   2023/07/10

小編您好,借串詢問

若我想在交易頻率為1分K的情況下計算今天與昨天日頻率的MACD執行回測

會遇到需要的資料筆數過多(140*270=37800)

導致無法回測(資料讀取比數錯誤,請重新設定)

這個問題如何排除呢?

XQ小幫手 發文於   2023/07/12

 Hello niji,

 

內建的跨頻率MACD腳本無法避開此問題。

您可以自行撰寫跨頻率的MACD腳本,改用陣列保存過去不同頻率的MACD筆數資料,這樣就不需要在腳本運作時需要長期的資料讀取筆數。

發表回覆
Close