在5分線上,
要根據作天日線上的MACD值、與今天一開盤的日線MACD值做比較,
若今天開盤的MACD值高於昨天收盤的日線MACD值,設定VALUE1=1,否則為0,
請問該怎麼寫,煩請賜教,謝謝。
在5分線上,
要根據作天日線上的MACD值、與今天一開盤的日線MACD值做比較,
若今天開盤的MACD值高於昨天收盤的日線MACD值,設定VALUE1=1,否則為0,
請問該怎麼寫,煩請賜教,謝謝。
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;
請問小編~頻率設在一分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的條件後在符合過前高要怎麼寫
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;
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;
Hello 黑牛,
If value3 > value6 then condition1=true else condition2=false;
如果您這樣寫的話,condition2就會一直是False。
因為condition 每次執行的預設值是False,而運算中也只會被賦予False。
那麼 if condition2 and condition1 then ret =1; 就不會觸發。
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;
這樣才對
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出來即可得知。
小編您好,借串詢問
若我想在交易頻率為1分K的情況下計算今天與昨天日頻率的MACD執行回測
會遇到需要的資料筆數過多(140*270=37800)
導致無法回測(資料讀取比數錯誤,請重新設定)
這個問題如何排除呢?
Hello niji,
內建的跨頻率MACD腳本無法避開此問題。
您可以自行撰寫跨頻率的MACD腳本,改用陣列保存過去不同頻率的MACD筆數資料,這樣就不需要在腳本運作時需要長期的資料讀取筆數。
9 評論