請問如何用ATR出場
本帖最後由 ICHI 於 12-11-3 23:10 編輯請教一個問題,當前一根K滿足條件進場後,在當根k以開盤價進場,
如果想要進場價的再加上進場前一天的一個ATR來停利,那麼以下的寫法有什麼問題?
BUY=Ref(stochk(9,3),-1) >80; //當前一根k的kd指標的k值大於80時進場。
SELL=O+Ref(ATR(14),-1); //以開盤價再加上前一天的atr(14)的值為出場價。
我回測出來的結果很奇怪,很多筆交易的profit都是零,
之前的測試也有遇過一種情形,不過這種情形至少和我預期的錯誤還比較接近,
就是我是希望以進場價當天(例如10/15)的開盤價再加上前一日的1ATR(14)來停利,
也就是進場時就已經有一個確定的停利數值了,就是10/15的開盤價+10/14的ATR(14),
結果程式回測的結果出場價隨著那個O和ATR一直變動,
直到有一根k(例如11/3)的(H-O)>REF(ATR(14),-1)才會以那根K(11/3)的O+ATR(14)出場,
而不是我期望的以進場的O(10/15)再加上前一日的ATR(14)(10/14)來出場,
若有大大知道如何解決這問題,煩請告知小弟,謝謝。
雖然已N年不寫程式,也不曾用AB寫過程式交易,但粗略的看,你的SELL條件和BUY放在一起,當BUY條件成立後的下一根K線,SELL條件卻未必立即成立,只好再看下一根,但下一根的O已隨著改變,所以SELL值會跟著浮動。是否可在BUY=Ref(stochk(9,3),-1) >80條件成立的下一行設一變數x=O+Ref(ATR(14),-1),以固定出場值並跳出廻圈,再將SELL條件放在廻圈外。但願對你有幫助!
co5257 發表於 12-11-4 16:08 static/image/common/back.gif
雖然已N年不寫程式,也不曾用AB寫過程式交易,但粗略的看,你的SELL條件和BUY放在一起,當BUY條件成立後的 ...
謝謝您的回答,您提示的寫法雖然和我想的不同,不過想法倒是一致,只是還沒動手寫,
我再來試試看寫不寫的出來,感謝。
如果是這樣呢? 很久沒寫 AFL 了.. 可能有錯, 請自行確認是否正確.
SELL=cross( close, O+Ref(ATR(14),-1) );
另外, 你寫的 BUY=Ref(stochk(9,3),-1) >80; 應該不對.. 假設前一根K的 KD 值是 81, 現在這根的 KD 是 82, 那是不是跳到下一根 K 線時, 也要下單? .... 當 KD 大於 80, 常常會持續好幾根 K 線持續都大於 80, 都要下單嗎? 或者你真正想要的是 KD 突破 80 的才要下單一次?
sdnian 發表於 12-11-5 09:32 static/image/common/back.gif
如果是這樣呢? 很久沒寫 AFL 了.. 可能有錯, 請自行確認是否正確.
SELL=cross( close, O+Ref(ATR(14),-1) ) ...
謝謝您的回覆,我在想co5257大之前提供的想法可以解決我的問題,即當買進條件成立時,把進場的值寫入一個變數,即
BUY=Ref(stochk(9,3),-1) >80;
x=O+Ref(ATR(14),-1)
sell=H>x;
或
sell=cross(H,x);寫出來後再測測看那個寫法才對,不是大問題,
buy的條件滿足後,把值寫入x就不確定怎麼做了,還要再研究看看。
至於您提到的進場條件,
目前的問題是要怎麼在滿足buy時紀錄變數,
重覆進場倒不是問題,因為重覆進場也許會更好也說不定,
不過電腦回測寫不出來就很難確定只做一口好,還是連續進場比較好。
BUY=Ref(stochk(9,3),-1) >80;是每當前一根k的kd值的k>80就進場,
buy=cross(ref(stochK(9,3),-1),80);是前一根的k由下往上超越80時進場一次,
只是舉個例子而已,沒有很嚴格要求對錯,還讓您留言提醒,真是不好意思。
另外,若是您知道如何在滿足buy的條件時把數值寫入變數的話,
也請告知,謝謝。
x是會變動的
每變動一根k線
又會重新計算Open
所以要抓到你的第一個buy訊號的時間
才能設你要的停利位置
如果用
buy_time=exrem(barssince(buy_condition)<barssince(sell_condition),barssince(sell_condition)>barssince(buy_sellcondition));
stopprofit=valuewhen(buy_time,O,1)+Ref(ATR(14),-1);
不知道這樣對不對 ZHACK 發表於 12-11-6 00:11 static/image/common/back.gif
x是會變動的
每變動一根k線
又會重新計算Open
謝謝您的回覆,還沒有測試是否可行,
不過您用的barssince函數倒是提供了我一些想法,
我再來測試看看是否可行,謝謝。
頁:
[1]