沒記錄到

  •   316 
  • 最後發表   阿林  2025 五月 12
阿林 發文於   2025/05/07

不好意思 請教一下 以下為我腳本

if barfreq <> "Min" or Barinterval <> 1 then RaiseRuntimeError("請設定頻率為1分鐘");

variable: barnumberoftoday(0);

if Date <> Date[1] then

   barnumberoftoday = 1

else

   barnumberoftoday += 1;

once (GetField("最高價", "D") >= GetField("收盤價", "D")[1]*1.06 and 

      low <= GetField("最高價", "D")*0.965 and high <> GetField("最高價", "D") ) begin

      count2 = barnumberoftoday;end;

 

我用print 請問為何count2有些股票會記錄不到

例如 3297在 0917分附近  3434 在0936分附近  6228在0935分附近 

因該記錄到數值才對 但print卻是0 但有些就很正常有記錄到 請問是為什麼呢 感謝

 

排序方式: 標準 | 最新
虎科大許教授 發文於   2025/05/07

沒看到你宣告這個變數,也許沒有符合once 的條件,所以沒被賦予數值。

阿林 發文於   2025/05/07

不好意思 我腳本是有宣告的 只是忘記貼過來

我也很確認上述那些股票有符合條件

但我是有發現這三檔在當時成立條件的時候

都被暫緩搓合 不知道跟這個有沒有關係呢

虎科大許教授 發文於   2025/05/07

緩撮只會影響交易指令,並不會影響變數。

阿林 發文於   2025/05/08

可是很奇怪 像今天5251 0906分 3434 0910分因該要記錄到的

也沒記錄到

以下是我完整腳本 看起來也沒問題啊

if barfreq <> "Min" or Barinterval <> 1 then RaiseRuntimeError("請設定頻率為1分鐘");

variable: barnumberoftoday(0);

variable: intraBarPersist count2(0);

if Date <> Date[1] then

   begin

    count2 = 0;

    end;

if Date <> Date[1] then

   barnumberoftoday = 1

else

   barnumberoftoday += 1;

once (GetField("最高價", "D") >= GetField("收盤價", "D")[1]*1.06 and 

      low <= GetField("最高價", "D")*0.965 and high <> GetField("最高價", "D") ) begin

      count2 = barnumberoftoday;end;

虎科大許教授 發文於   2025/05/08

你的Once結構可能在跑過去的歷史K棒就執行過了,所以今天盤中不會再執行。

阿林 發文於   2025/05/12

那請教許教授 要怎樣才可以讓Once 不要去跑過去的歷史k棒呢

虎科大許教授 發文於   2025/05/12

用IF結合變數控制每天只執行一次。變數在每天第一根K棒還原為預設值。

阿林 發文於   2025/05/12

我剛剛檢查 好像確實是這樣 昨天要是有達到我以下腳本條件的

都會記錄不出來 例如今天3027

once (GetField("最高價", "D") >= GetField("收盤價", "D")[1]*1.06 and 

      low <= GetField("最高價", "D")*0.965 and high <> GetField("最高價", "D") ) begin

      count2 = barnumberoftoday;end;

 

小弟愚笨 不知道許教授說的怎樣改

有勞許教授在多提點一下

虎科大許教授 發文於   2025/05/12

var: intrabarpersist hasOrdered(false);

if Date <> Date[1] then

   begin

      barnumberoftoday = 1;

      hasOrdered = false;

   end

else

   barnumberoftoday += 1;

if hasOrdered=false and GetField("最高價", "D") >= GetField("收盤價", "D")[1]*1.06 and low <= GetField("最高價", "D")*0.965 and high <> GetField("最高價", "D") then

   begin

      count2 = barnumberoftoday;

      hasOrdered=true;

   end;

 

阿林 發文於   2025/05/12

這樣我知道了 感謝許教授!!

發表回覆
Close