進場時變數記錄到的值的變化

  •   197 
  • 最後發表   無情卻慈悲  2022 十月 20
無情卻慈悲 發文於   2022/10/19

我想請問一下,以下腳本在進單時所記錄的當下低點“red_low",在print時為何都會此被記錄的低點的值都不一樣?

在if position = 0 and Filled = 0 成立後才進單才記錄此低點,此時的得到的低點的值不是已經被固定了嗎?怎麼會在print時都不一樣,感謝。

還有,既然已經if position = 0 and Filled = 0 了,接下來print出來的成本與部位應都是有值的才是,為何仍是0呢?

■腳本

if close[3] > open[3] and close[2] > open[2] and close[1] < open[1] 

then begin

  condition1= true;

end;

var:red_low(0); //進場低點

//多單

if position = 0 and Filled = 0

and condition1 = true

and close > open       

then begin

SetPosition( 1, MARKET,label:="多單進場") ;

red_low = low ;

Print(file("C:\SysJust\XQLite\XS\Print\"),NumToStr(date,0),NumToStr(time,0),"《",SymbolName,"》","多單進場","成本",NumToStr(FilledAvgPrice,0),"部位",NumToStr(position,0),"filledfilled",filled);

print(file("C:\SysJust\XQLite\XS\Print\"),"時間:",NumToStr(time,0),"《",SymbolName,"》","進場紅K低點",red_low,"red_low_time",red_low_time);

end;

 

■以下為print出來的文字:

20221019 101100 《 小型台指近月 》 多單進場 成本 0 部位 0 filledfilled 0.000000 

時間: 101100 《 小型台指近月 》 進場紅K低點 13093.000000 

20221019 101400 《 小型台指近月 》 多單進場 成本 0 部位 0 filledfilled 0.000000 

時間: 101400 《 小型台指近月 》 進場紅K低點 13102.000000 

20221019 102200 《 小型台指近月 》 多單進場 成本 0 部位 0 filledfilled 0.000000 

時間: 102200 《 小型台指近月 》 進場紅K低點 13097.000000 

20221019 102800 《 小型台指近月 》 多單進場 成本 0 部位 0 filledfilled 0.000000 

時間: 102800 《 小型台指近月 》 進場紅K低點 13116.00000

 

20221019 104100 《 小型台指近月 》 多單進場 成本 0 部位 0 filledfilled 0.000000 

時間: 104100 《 小型台指近月 》 進場紅K低點 13094.000000 

排序方式: 標準 | 最新
XQ小幫手 發文於   2022/10/19

Hello 無情卻慈悲,

 

您的腳本print是被包在進場條件裡,所以每次進場條件符合時都會執行 red_low = low 接著 print,那麼print出來的自然是新的值。

條件中 position = 0 and filled = 0 代表著沒有部位庫存,那麼自然 print 出來的數值會是0。

簡單來說,您的腳本是這樣:

if 部位 = 0 and 庫存 = 0 and 進場條件 Then

    買進1口

    更新red_low的值

    印出成本部位庫存  //沒有庫存時,自然印出0

    印出時間和red_low 的值  //red_low才更新,那麼自然印出新的red_low值

    end;

要成交後,庫存才會有變化,建議您可以嘗試將print移出 if ... end; 區塊。

另外需注意,在資料讀取筆數時條件符合也會執行 if ... end 區塊內的腳本,但不會交易。

 

無情卻慈悲 發文於   2022/10/19

以上解說我已了解,但我還是想請小幫手幫我找一下同樣的腳本裡的問題,

我有附上策略腳本。

主要說明一下,如下圖,今日2022/10/19 下午3點20進多單,進單的同時有記錄下當根K棒的低點。

但後面有寫跌破該記錄的低點就停損,但明明已跌破了卻沒執行,想請小幫手幫我看一下,我記錄K棒低點是否有問題?

 

 

 

XQ小幫手 發文於   2022/10/20

Hello 無情卻慈悲,

 

您的腳本順序為 進出場 => 停損 => 變數歸0。

上面小幫手回覆過,在當次執行中 filledavgprice 還是0,所以觸發進場後 red_low 更新為 low 且 print 出來後,在 變數歸0 時又被歸0。

既然 red_low 是 0,那之後的停損自然不會執行。

建議您可以不要把print寫在條件哩,每次執行都print出資訊,會比較容易找出問題點,以及在控制進出場和停損時都要有filled 來控制。

發表回覆
Close