停損問題:跌破進場K低點出場

  •   602 
  • 最後發表   無情卻慈悲  2022 十月 07
無情卻慈悲 發文於   2022/09/29

你好,

我一個規則是 : 停損是股價跌破進場K低點出場

所以我在進單時,有同時寫一個變數來記錄進場那根K棒的最低點,

但一但策略有先停止,或是隔再重新啟動的話,那麼這個變數所記錄的進場那根K棒的最低點就會是0,

請問我怎麼改可以讓在重新啟動策略後,仍能抓得到進場那根K棒的最低點呢?

 

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

//多單

if position = 0 

and conditon1

then begin

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

red_low = low ;

end;

//停損

if  close cross Under red_low

then begin

SetPosition( 0, MARKET,label:="停損出場") ;

end;

 

 

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

Hello 無情卻慈悲,

 

變數的數值不會保存上次策略運算的結果,每次啟動時都會從預設的數值開始。

您可以參考自動交易的策略部位計算功能,將策略設定程從上次啟動的時間開始運算,這樣變數就會是那段時間運算的結果。

這功能是讓策略模擬從設定的時間開始運作到當下的狀況。

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

你好,我補充發問,有開逐筆洗價,

(1)if position = 0  才會print,

目前的圓剛的position已經是1了,為何還會一直print出來?

 

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

//多單

if position = 0 

and condition1 = true

and close    > open        //1紅K

then begin

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

red_low = low ;

print("時間:",NumToStr(time,0),"《",SymbolName,"》","進場紅K低點",red_low);

end;

 

(2)有關進場紅K低點(變數是red_low),

如下圖,

我在print時,為何一個是抓的到數值,一個會是0呢?

 

LOG與腳本的檔案如下 :

https://drive.google.com/drive/folders/1dDh_SDPfkvkyucri8TP9D6X2z2EWYJVM?usp=sharing

 

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

Hello 無情卻慈悲,

 

1. 您當下的部位是多少,跟您啟動策略時的預讀筆數運算沒有關聯。

圖中可以看到執行時間都是 11:39:19.687 但後面印出的時間都不相同,可以看出這是在資料遇讀筆數運算的的狀況下。

如果您設定為依庫存的話,庫存會在資料讀取筆數運算完畢後才調整,此時position和filled才會是1。

如果是依腳本計算的話,庫存則會是0開始,視您有沒有設定策略部位計算起點開始作調整。

除了有設定策略部位計算起點以外,預讀筆數中的運算 部位庫存基本上都會是0。

 

2. 您的腳本中有

if FilledAvgPrice =  0 

then begin

red_low = 0 ;

end;

這行,而這行的部分在多單條件設定 red_low 之後。

 

FilledAvgPrice 是要在收到成交回報之後才會有數值,所以您這種寫法會在多單條件符合時 red_low 紀錄數值,而此時腳本還未下單也未成交,所以filledavgprice = 0。

到了下面的

if FilledAvgPrice =  0 

then begin

red_low = 0 ;

end;

這段 red_low 又會被改為0,所以成交之後print出的數值都是0。

另外需注意,position是要在該次腳本執行完畢後才會改變。

建議您可以將 red_low = 0 ; 放在出場的時候就不會有這個狀況。

 

發表回覆
Close