不會觸發也不會出場,它想觸發才會觸發(我快瘋了!!!)

  •   640 
  • 最後發表   無情卻慈悲  2020 九月 09
無情卻慈悲 發文於   2020/08/14

小幫手您好,

我有一段code其實羅輯上很簡單明白,但就是不會觸發,可以幫我看一下嗎?

 下單設定為單根K棒觸發+逐筆洗價

1.會無法自動觸發的原因,我找到了,如果_stock 沒有一開始再寫一行「_stock = 0」它就不會觸發訊息,但我覺得很奇怪,一開始宣告變數的初始值它就是0了,不是嗎?為何要再寫一從_stock = 0才是0?

2.觸發了下單了,但停損停利就是不會觸發。

3.重點來了,還沒平倉前,有觸發的話仍會下單,造成無法維持在一口單的狀態。(記錄庫存的變數 _stock=1或0,會只存在同個商品的每筆單中嗎,同商品的第二個訊號出現時則 _stock仍是初始狀態是0嗎?)

 

再麻煩您一下,小幫手。

 

摘錄如下:

vars:_cost(0),_stock(0),_gainprice(0),_lossprice(0);

input:_BuyOrSell(1,"1進場,0出場");

input:_gain(10,"停利點數");

input:_loss(10,"停損點數");

 

//===============================================.

//_stock = 0;

 

//多單進場

if  _stock = 0 and close > high[1] then

//and Volume > Volume[1]

begin

_stock = 1 ; ////////////////

_cost = close ;

_gainprice = _cost + _gain;   //停利價

_lossprice  = _cost - _loss;  //停損價

if _BuyOrSell=1 then  ret=1;

retmsg ="多單進場";

Print(Date,Time,"多單進場:","_stock",_stock,"_cost:",_cost,"close:",close,"_gainprice",_gainprice,"_lossprice",_lossprice);

end;

 

//多單停利

if  _stock = 1 and close > _gainprice then //停利

begin

_stock = 0 ; ////////////////

if _BuyOrSell=0then ret=1;

retmsg ="多單停利";

Print(Date,Time,"多單停利:","_cost:",_cost,"close:",close);

end;

 

//多單停損

if  _stock = 1 and close < _lossprice then   //停損

begin

_stock = 0 ; ////////////////

if _BuyOrSell=0 then ret=1;

retmsg ="多單停損";

Print(Date,Time,"多單停損:","_cost:",_cost,"close:",close);

end;

 

 

 

 

 

 

 

 

排序方式: 標準 | 最新
無情卻慈悲 發文於   2020/08/17

請問小幫手,可以幫我看一下嗎?

XQ小幫手 發文於   2020/08/17

無情卻慈悲大 您好

小幫手下午時有幫您測試過,

腳本的撰寫基本上是沒有問題,

用回測功能可以看出正常的進出場,

_stock = 0是不用在一開始加的,這個本來就會是0沒錯

如果您是想要只維持一點的話,需要勾選「啟動後只觸發一次」,

如果是K棒內單次觸發,會發生像您說的連續出發情況,

而我也會在明天盤中時間在幫您試看看是否能正常運行。感謝

 

無情卻慈悲 發文於   2020/08/17

_stock = 0是不用在一開始加的,這個本來就會是0沒錯

→我今日又試,在不用追加_stock = 0情況下,是會觸發的,但用一段時間後,有手動停止策略後又重新啟動,又不會觸發了,我覺得非常非常奇怪,時好時壞,然後我又手動再追加_stock = 0則又可以觸發了,所以我在懷疑這個_stock 變數它的壽命到底是存在多久?每進入下一k棒時,這個_stock是重新初始化變成0還是?非常奇怪。(我寫此回覆時正在跑夜盤,都不會觸發)

然後若有觸發下單成功的話,重覆觸發的事一直發生,上一單未平倉則下一單若符合條件則又會下新單,沒有正常過,同樣的腳本。

另,我股票當沖用的變數命名也是 _stock = 0 ,這應不會相互影響吧?

 ▼如下圖,一定要手動讓_stock = 0才會觸發,而且舊單未平倉仍會持續有新下單 。

 

▼我又做另一個測試,如下圖把觸發下單的_stock=1暫時先拿掉,就可以正常觸發了,但是為何?很怪!

 

無情卻慈悲 發文於   2020/08/17

另外,您說用回測功能可以看出正常的進出場,

_stock = 0是不用在一開始加的,這個本來就會是0沒錯

→我也有試過,但我發現回測時我有在腳本中加了尾盤出場,

但他回測時仍會「留倉」,這個我也想請教一下是為何會這樣?

if  _stock=1 and Time=134300 or Time = 035000 then

begin

_stock=0 ; 

if _BuyOrSell=0 then  Ret=1;

retmsg ="尾盤出場";

end;

 

無情卻慈悲 發文於   2020/08/17

我測超久,發現從頭到尾都是變數_stock的問題,讓我許多if不作用,也難怪沒有觸下下單或自動出場。但就是不知為何啊???

我晚上自行另寫一段code來試,發現真的不會觸發,要追加一段 _stock = 0才會馬上觸發,這很奇怪,變數一開始初始化不就是0了嗎?所以我懷疑變數它的存活週期規則到底是啥?

variable:_stock(0);

// _stock = 0

if _stock=0 then 

begin 

_stock=1;

ret=1;

Print(Date,Time,"_stock",_stock);

end;

 

好,就算要我再加 _stock = 0 我也可以,只是這樣子重覆下單的問題仍無法解決啊?

小幫手再麻煩您了!

無情卻慈悲 發文於   2020/08/18

 8/18早上9:20補充 :

整晚都不觸發,我放著直到早上開盤,他又觸發了....

所以現在是夜盤都比較有問題嗎?

同樣的腳本說。

 

雖是觸發了,但仍不會自動進出場,也會重覆下單,這兩點都一樣無法解決。

XQ小幫手 發文於   2020/08/18

無情卻慈悲大 您好

是否能夠請您提供策略雷達的相關資料匯出後上傳

記得要勾選"匯出策略雷達所包含的自訂腳本"

方便小幫手了解您實際遇到的情況

無情卻慈悲 發文於   2020/08/18

您好,匯出如附件,

您看是否齊全。

附加文件

XQ小幫手 發文於   2020/08/18

您好

請參照以下附圖來匯出檔案,

為何需要匯出檔,是因為當您的語法沒問題時,有可能是下單設定那邊有誤

匯出檔的附檔名應該為DSRX FILE (.dsrx)  再請您幫我上傳一下

感謝

附加文件

無情卻慈悲 發文於   2020/08/18

我重新匯出了 感謝小幫手的幫忙!

附加文件

顯示更多回應 發表回覆
Close