您好
目前執行的腳本是以五分鐘編寫,因應逐筆回測實際並非真正逐筆而是一分鐘 所以重新撰寫
但兩者回測(五分鐘逐筆/一分鐘不逐筆)同樣時間績效(購買時間及次數)還是不同
(依照小編的說法應該要能夠相同/回測中五分鐘逐筆等於一分鐘執行一次)
也或許是我編譯語法轉換沒有成功
因此想請教是否有其他設定 在不更改腳本的情況下 可以用五分鐘的腳本[Barinterval=5]
用一分鐘的雷達執行讓回測與實際執行相符
累計了許多問題 再麻煩小編
謝謝
您好
目前執行的腳本是以五分鐘編寫,因應逐筆回測實際並非真正逐筆而是一分鐘 所以重新撰寫
但兩者回測(五分鐘逐筆/一分鐘不逐筆)同樣時間績效(購買時間及次數)還是不同
(依照小編的說法應該要能夠相同/回測中五分鐘逐筆等於一分鐘執行一次)
也或許是我編譯語法轉換沒有成功
因此想請教是否有其他設定 在不更改腳本的情況下 可以用五分鐘的腳本[Barinterval=5]
用一分鐘的雷達執行讓回測與實際執行相符
累計了許多問題 再麻煩小編
謝謝
嗨 小編
現行腳本5分K
((high[5]+low[5]+close[5])/3)*volume[5]
getsymbolfield("tse.TW", "Close","5")[5]
改為1分K請問如何撰寫
Hello NICK TZ,
五分鐘逐筆 和 一分鐘不逐筆 並不相同。
五分鐘逐筆是每分鐘運算一次腳本,但使用的還是5分鐘頻率的資料。
而一分鐘不逐筆雖然也是每分鐘運算一次腳本,但使用的會是1分鐘頻率的資料。
舉例來說:
五分鐘逐筆 在 9:03 運算時使用open的話,取得的會是 09:00 開始的價格。(該根5分鐘Bar的開始價格)
而一分鐘不逐筆其得的會是 09:03 開始的價格。(該根1分鐘Bar開始的價格)
如果您在一分鐘不逐筆使用Getfield("Open", "5") 的話,就會和五分鐘逐筆一樣,取得 09:00 開始的價格。
所以您下面的範例,如果要使用在1分鐘頻率上的話,那麼應該要用 GetField 取得所需頻率 (5分鐘)。
((getfield("High", "5")[5] + getfield("Low", "5")[5] + getfield("Close", "5")[5]) / 3) * getfield("Volume", "5")[5]
getsymbolfield("tse.TW", "Close","5")[5]
運算出來的結果就會和5分鐘頻率逐筆洗價的結果相同。
謝謝小幫手
經過測試
"((getfield("High", "5")[5] + getfield("Low", "5")[5] + getfield("Close", "5")[5]) / 3) * getfield("Volume", "5")[5]"這個部分是沒問題的
"getsymbolfield("tse.TW", "Close","5")[5]"但這裡還是沒辦法一致
另外請教psy(10)的轉換語法
謝謝
Hello ,
小幫手這邊用 print(date, time, currentTime, getsymbolfield("tse.TW", "Close","5")[5]); 測試在5分鐘逐筆以及1分鐘非逐筆上,兩者currenttime相同時取得的資訊會是相同的。
您可以實際print出來比較,或是改用指標腳本直接畫在圖上。
需要麻煩您告知您是如何使用讓小幫手研究。
PSY內建函數如下:
input: Length(numeric);
PSY = 100 * CountIf(Close > Close[1], Length) / Length;
您只需要改成您要的頻率即可,舉例來說5分鐘頻率的話:
input: Length(numeric);
PSY = 100 * CountIf(getfield("Close", "5") > getfield("Close", "5")[1], Length) / Length;
網站上有教學區,裡面有XS語法的基礎和應用可以閱覽。
哈瞜 小幫手
我這邊測試的方法是
一分鐘不逐筆
if getSymbolField("tse.TW", "Close","5")>getfield("close", "5")
then ret=1;
五分鐘逐筆
if getsymbolfield("tse.TW", "Close","5")>close then
ret=1;
出場
if time=133000 then
用指數測試
同樣區間結果不相同 ret=1;
PSY = 100 * CountIf(getfield("Close", "5") > getfield("Close", "5")[1], Length) / Length;
編譯時說Length 在警示上跟指標型態不同
我是需要用在警示上
Hello NICK TZ,
您出場腳本的time在5分鐘頻率會回傳該根Bar開始的時間,所以133000會在13:30~13:35 這段時間內都符合因此連續觸發。
建議您可以改成 getfield("Time", "1") 或 currenttime,且5分鐘頻率出場時也需要用逐筆洗價,兩者就會相同。
附上回測報告供您參考。
input: Length(numeric);
PSY = 100 * CountIf(getfield("Close", "5") > getfield("Close", "5")[1], Length) / Length;
這只能用在函數腳本上。
如果您不想寫函數腳本想直接撰寫在警示或指標腳本的話,可以這樣寫:
input: Length(10);
var: _psy(0);
_psy = 100 * CountIf(getfield("Close", "5") > getfield("Close", "5")[1], Length) / Length;
網站上有教學區,裡面有XS語法的基礎和應用可以閱覽。
感謝小幫手
psy的部分我再試試看
兩者不同的部分我去進逐筆看過進場時間
是大部分相同 還是有少分不同
所以績效才會有差異
13 評論