請問如何延後進場

  •   554 
  • 最後發表   SHANG  2022 六月 08
SHANG 發文於   2022/05/31

小幫手您好,想請問如果延後開盤(譬如9.02開盤)我要如何讓他延遲1分鐘才進場呢,

想到邏輯打結,所以來請教小幫手,下列的腳本反而9.03分後不會再觸發進去,是完全過濾掉

原本是9點開盤 9.01進場條件 但如果延後開盤的話9.02分開盤 就會變直接進去,

但我想了其他方法9點~9.02分量=0的話,也是直接過濾掉(是不是沒開盤就會讀不到資料)

想好久都想不出來要怎麼讓他延後觸發進場 XS好像也沒有類似timeout的指令

爬文也是以平倉為條件觸發延後進場or休息 

會這樣想是因為我想避開第一根1分K的黑K,

但延後開盤的話(或是緩漲緩跌)我原本以時間為條件控制的腳本就會變不適用

就會買在9.02分開盤的頭 要是直接往下殺我就會賠好幾檔 ,

但回測看不出這些問題,因為回測都是以單根K的收盤價為主

試了一些我的簡單想法似乎都沒辦法解決,只好來請教專業的

 

還有請教 IsSessionFirstBar 這個指令

 

if IsSessionFirstBar  then begin        //開盤第一根  

value105 = open;  

value106 = high;  

value107 = low;  

value108 = close;  

end;   

這樣寫可以取得第一根開盤的價位是對的嗎?還是要多getfield("Date") <> getfield("Date")[1]這條件判斷?

 ///////////分隔線//////////

if barfreq<> "Min" or barinterval <> 1 then return; 

if getfield("Date") <> getfield("Date")[1]  then begin        //開盤第一根  

value105 = open;  

value106 = high;  

value107 = low;  

value108 = close;  

end;   

if currentTime>090200 and value105 = GetField("開盤價", "D") and position=0 and getfield("Date") <> getfield("Date")[1]  then begin

if currenttime < 090310  then return;

end; 

 

抱歉問題有點多 再麻煩小幫手了 謝謝

排序方式: 標準 | 最新
GammaCEO 發文於   2022/05/31

如果是一分K那直接宣告一個變數trigger去控制

variable: intrabarpersist trigger(0);

if condition1 then trigger=currentbar;//←進場條件觸發

if currentbar >= trigger+1 then ret=1;//←延遲一分鐘後進場

//如果不是一分K,那就把currentbar改用時間函數去控制。

貓老大 發文於   2022/06/01

我的作法是判斷 Volume, 只要 Volume = 0 都表示還沒開張, 直接 return

// 是否當日第一根K
var: isSFirstBar (False), SFirstBar (0), isSessionOpened (False);
var: dayOpen (0);
if isSessionFirstBar then
 begin
  // 當日第一根K
  SFirstBar = CurrentBar;

  isSessionOpened = Volume > 0;

  dayOpen = Open;
 end;
if not isSessionOpened then
 begin
  if Volume = 0 then
   return;

  // 當日真正開盤K
  isSessionOpened = True;
  SFirstBar = CurrentBar;
  dayOpen = Open;
 end;
isSFirstBar = (SFirstBar = CurrentBar);

 

 

  • 按讚來自於
  • clse1607
SHANG 發文於   2022/06/01

謝謝2位大神熱心解答,小弟感激不盡來嘗試看看,謝謝你們

SHANG 發文於   2022/06/04

if currentTime>090200 and currentTime<090310 and dayOpen = GetField("開盤價", "D") and position=0 then return;

感謝貓老大的教學定義當日第一根K,我已經算是解決這個問題了,

雖然不夠嚴謹(要是9.00開盤到9.02還=開盤價的話也會觸發(機率非常低),但可以解決大部分問題感激不盡 

至於GammaCEO大大提供的+1方法也很不錯,只是我整合邏輯中可能有問題,還需要時間去檢查,謝謝大大們的方法,小弟非常感謝

我原本的 if IsSessionFirstBar  then begin 這個反而沒有貓老大的效果 所以我一直弄不出來

真的非常謝謝兩位讓我看到不同的寫法  謝謝

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

Hello SHANG,

 

關於開盤後的第二根Bar,您可以參考 GammaCEO 和 貓老大的回覆。

利用成交量為0來判斷是否有沒有開盤是個簡單的判斷法。

舉例來說,使用1分鐘頻率時 time = 090200 and volume[1] = 0 and volume[2] = 0 條件符合的話,就是發生了開盤前兩根Bar成交量為0的狀況。

 

您可以參考 isSessionFirstBar 的說明,此函數會回傳該根Bar是不是開盤第一根Bar。

並不需要另外加上 getfield("Date") <> getfield("Date")[1] 的條件。

 

發表回覆
Close