請教各路大神,如果我想在某條件滿足後,延遲5分鐘,再次檢查相同條件還是滿足,再做setposition,程式該怎麼寫呢?
頻率是日線,謝謝
請教各路大神,如果我想在某條件滿足後,延遲5分鐘,再次檢查相同條件還是滿足,再做setposition,程式該怎麼寫呢?
頻率是日線,謝謝
符合條件時,記錄當下的Tick時間,然後用TimeDiff判斷目前時間與之前符合條件的時間差有沒有超過5分鐘,若有,再次判斷條件是否符合,若符合就下單。
請教許教授,
按照您的思路,我在程式一開始宣告一個變數,並在第2行給初始值0,然後在condition1=true 時(表示初次滿足條件),設定outtime = currenttime,然後在時間>=5分鐘後,執行setposition。
例如:
var: outtime(0);
outtime = 0;
if condition1 then
begin
if outtime = 0 then outtime = currenttime;
if timediff(currenttime, outtime,"M") >=5 then setposition(1, close);
end;
我的疑問是,每一次tick跳動時,都會去執行第2行的outtime = 0,反而讓每次進入if condition1都當第一次滿足條件嗎?
還是outtime不要給初值0?
var: intraBarPersist outtime(0); var: intraBarPersist checked(false); if isFirstCall("RealTime") then begin outtime = 0; checked = false; end; if condition1 and checked=false then begin outtime = GetField("時間", "Tick"); checked = true; end; if condition1 and position = 0 and checked = true and timediff(GetField("時間", "Tick"), outtime,"M") >= 5 then setposition(1, close);
感謝許教授推薦使用 isFirstCall("RealTime") 這個新的函數,對於當日初次給值太有幫助了。
XQ說明網址: xs函數「isfirstcall」說明
其中有一句看了不是很懂:不會因為在盤中啟動腳本,才在即時區間的第一次洗價為 true,即時區間的第一次洗價要使用 isfirstcall("Realtime")。
若我在盤中才啟動腳本,那麼isfirstcall("Realtime") 直接就會判斷成true的意思嗎?
盤中啟動策略, isfirstcall("Realtime")會在啟動策略之後,即時價格進來的第一個Tick時為True,其他情況(包括開盤後)都是False。
許教授您好,
我試著用您的範例加到我的程式裡並執行了1個月,後來發現 timediff(GetField("時間", "Tick"), outtime,"M") 永遠都是0,
原因是GetField("時間", "Tick") 和 outtime在每一個tick 都相同。
這是否表示,checked 在每次洗價都會被先更新成false,進而outtime 每次也跟著更新新的時間?
這樣代表intraBarPersist 沒有作用嗎?
(1)condition1 and checked=false 時,記錄outtime,這個時間由於checked = true不會再被記錄,除非condition1=true及 checked=false 條件再次符合。後面任何Tick的時間(除了第一個Tick,因為時間與outtime相同,所以時間差距是0)都大於outtime,時間差距不會等於0。
(2)checked有用intraBarPersist宣告,除非你在程式其他地方有讓它等於false,不然outtime不會被更新。
7 評論