自動觸發兩次

  •   472 
  • 最後發表   無情卻慈悲  2020 八月 18
無情卻慈悲 發文於   2020/08/10

您好,

我想問一個問題,我有一個現股當沖的策略,自動警示後下單這沒問題,但是若是觸發停損(賣出)時會觸發兩次,見附圖。

然後多觸發的一次竟會變成「進場單(買進)」,可否麻煩幫我看一下到底哪裡出問題了呢?

PS:如果看不到我的附圖,可以點此下圖片網址 :

https://prnt.sc/twwjjj

https://prnt.sc/twwjw5

https://prnt.sc/twwjzy



我的程式碼如下:

if barfreq<>"Min" or barinterval<> 1 then raiseruntimeerror("腳本只適用於1分鐘線");

 

variable:H30(0),L30(0),barcount(0),_cost(0),_stock(0),_gainprice(0),_lossprice(0);

input:gain(1,"停利%");

input:loss(1.1,"停損%");

 

if date <> date[1] then barcount=1 else barcount+=1;

 

if barcount = 30 then 

begin

H30 = highest(high,30);//前30分鐘的最高價

L30 = lowest(low,30);//前30分鐘的最低價

end;

 

if close > H30 and close < H30*1.005

 and Time > 093000 and Time < 131000

 and _stock=0

then begin

//做多進場

_cost = close ;//30.1

_gainprice = _cost*(1+gain/100);

_lossprice = _cost*(1-loss/100);

_stock =1;

ret=1;

Print(Time,"做多進場:","成本價:",_cost,"庫存",_stock,"close",close,"_gainprice",_gainprice,"_lossprice",_lossprice);

end;

 

 

//多單停利

if  _stock = 1

and close > _gainprice

then begin

_stock =0;

ret = 1;

Print(Time,"多單停利:","成本價:",_cost,"庫存:",_stock,"close",close,"_gainprice",_gainprice);

end;

 

//多單停損

if _stock =1

and close < _lossprice

then begin

_stock = 0;

ret = 1;

Print(Time,"多單停損","成本價:",_cost,"庫存:",_stock,"close",close,"_lossprice",_lossprice);

end;

 

 

附加文件

排序方式: 標準 | 最新
XQ小幫手 發文於   2020/08/12

無情卻慈悲大 您好

小幫手覺得,可能的問題在於您的「進場」、「出場」策略,

沒有設定「開關」所導致這個問題,

這造成的後果就可能出現您碰到的狀況

您可以參考這篇文章的撰寫方法試看看買進賣出策略

我也有幫您修改了一下,只是或許是您的條件較為嚴苛or(今天的盤勢實在太爛zzz) 

所以一個早上並未觸發,

先提供給您試看看,如果還有問題,我們再一起來討論。

附加文件

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

非感感謝,我會再試一下再跟您說 ^^

  • 按讚來自於
  • b24524658
無情卻慈悲 發文於   2020/08/12

小幫手您好,

我試了一下您改的,發現我的問題所在了,但是仍有一點想請教,您跑模擬盤時會自動「停利」成功嗎

我試的時候如下圖,已經達1%停利標準了仍未觸發,是否可能是什麼原因呢?。

 

第二個問題:

假設以我的而言,設有自動進場與出場的兩個雷達,當觸發自動進場並下單成功後,我停止雷達後再啟動雷達,對剛剛已成效的單而言,就無法自動停利或停損了呢?

另我停止雷達後再啟動雷達,「變數」就是會重新歸0?例如我停止雷達前的_cost變數存下來的成本價。

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

無情卻慈悲大 您好

Q1:問題仍存在

A: 我之後在做測試,也有遇到同樣的問題,所以我有幫您在做調整

Q2:假設以我的而言,設有自動進場與出場的兩個雷達,當觸發自動進場並下單成功後,我停止雷達後再啟動雷達,對剛剛已成效的單而言,就無法自動停利或停損了呢?

另我停止雷達後再啟動雷達,「變數」就是會重新歸0?例如我停止雷達前的_cost變數存下來的成本價。

A: 是的,如果您中途關掉雷達您一開始進場紀錄的數字就會消除,所以無法沿用原本的雷達

 

以下附檔為我幫您再次修改後的腳本,我目前用回測來看

看起來是正常的,EX 亞光3019 5/7 10:38 進場 5/7 11.15 出場 報酬率1.37%

再提供給您試看看

附加文件

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

感謝小幫手,我目前測試跑單中。

另請教一下,

我是否該怎麼改,讓「同一支股票」成交後但未出場前,不要讓條件符合時又觸發一次訊號造成重覆下單呢?

 假設已下一筆單了且_stock = 1且還沒出場,但第二次可進場點位到了要觸發訊號會遇上 if  _stock = 0...., 應該不會觸發下單才對啊?

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

無情卻慈悲大 您好

如果照我們以上這個策略有設定_stock = 1的,

應該是不會發生重複下單的問題的,

請問您是使用我今天撰寫的修改版 還是有遇到這樣的問題嗎?

 

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

HI,謝謝小幫手的回覆,

我是用您改的版本,只是把進場點改成均價點位,如:

if _stock = 0 and GetQuote("漲跌幅")<=2.5

and close crosses above GetField("均價")+10 

then begin

if _BuyOrSell=1

then begin

_stock = 1;

_cost = close ;

_lossprice = _cost - _loss;//停損價位

Ret=1;

retmsg ="多單進場";

Print(Date,Time,"多單進場:","均價:",GetField("均價"),"_cost:",_cost,"close:",close);

end;

end;

 

但發現若是盤整時,會一直觸及點位,造成每分鐘都下單一次。

而我下單內容是設定「每根K棒觸發一次」,如果仍要維持「每根K棒觸發一次」的話,是否可以在程式碼中做控制只下單一次,等出場再重新下單呢?

 

 

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

我用的是小幫手給的版本測試,一樣會一直重覆下單。

是否可以在程式碼中做控制只下單一次,等出場再重新下單呢?

下單設定是勾逐筆洗價,單次k棒觸發。

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

if barfreq<>"Min" or barinterval<> 1 then raiseruntimeerror("腳本只適用於1分鐘線");

variable:H30(0),L30(0),barcount(0),_cost(0),_stock(0),_gainprice(0),_lossprice(0);

input:gain(1,"停利%");

input:loss(1.1,"停損%");

if date <> date[1] then barcount=1 else barcount+=1;

if barcount = 30 then 

begin

H30 = highest(high,30);//前30分鐘的最高價

L30 = lowest(low,30);//前30分鐘的最低價

end;

if close > H30 and close < H30*1.005

 and Time > 093000 and Time < 131000

 and _stock=0

then 

begin

//做多進場

_cost = close ;//30.1

_gainprice = _cost*(1+gain/100);

_lossprice = _cost*(1-loss/100);

_stock =1;

if _buyorsell=1 then

ret=1;

Print(Time,"做多進場:","成本價:",_cost,"庫存",_stock,"close",close,"_gainprice",_gainprice,"_lossprice",_lossprice);

end;

//多單停利

if  _stock = 1

and close > _gainprice

then begin

 

_stock =0;

 

ret = 1;

 

end;

Print(Time,"多單停利:","成本價:",_cost,"庫存:",_stock,"close",close,"_gainprice",_gainprice);

//多單停損

if _stock =1

and close < _lossprice

then 

begin

 

_stock = 0;

 

if _buyorsell=2 then 

ret = 1;

 

end;

Print(Time,"多單停損","成本價:",_cost,"庫存:",_stock,"close",close,"_lossprice",_lossprice);

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

無情卻慈悲大 您好

請您再檢視下小幫手上方給您的檔案,

其中這一段

//多單停利

if  _stock = 1 and close > _gainprice then 

begin

_stock =0;

if _buyorsell=2 then 

ret = 1;

end;

我是有修正過的,必須加入條件if _buyorsell=2 then 

才不會有您說的重複買進的問題,

請您再確認一下 感謝

 

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

您好,我今早使用您的版本,一字不改的下單,一樣重覆買進20多次 ,而且也沒自動停損。

下單有設逐筆洗價,但應程式會控制才對,再麻煩您一下!!!

以下是您提供的版本。

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

if barfreq<>"Min" or barinterval<> 1 then raiseruntimeerror("腳本只適用於1分鐘線");

variable:H30(0),L30(0),barcount(0),_cost(0),_stock(0),_gainprice(0),_lossprice(0);

input:gain(1,"停利%");

input:loss(1.1,"停損%");

 

if date <> date[1] then barcount=1 else barcount+=1;

if barcount = 30 then 

begin

H30 = highest(high,30);//前30分鐘的最高價

L30 = lowest(low,30);//前30分鐘的最低價

end;

 

if close > H30 and close < H30*1.005

 and Time > 093000 and Time < 131000

 and _stock=0

then 

begin

//做多進場

_cost = close ;//30.1

_gainprice = _cost*(1+gain/100);

_lossprice = _cost*(1-loss/100);

_stock =1;

 

if _buyorsell=1 then

ret=1;

Print(Time,"做多進場:","成本價:",_cost,"庫存",_stock,"close",close,"_gainprice",_gainprice,"_lossprice",_lossprice);

end;

 

//多單停利

if  _stock = 1

and close > _gainprice

then begin

_stock =0;

ret = 1;

end;

Print(Time,"多單停利:","成本價:",_cost,"庫存:",_stock,"close",close,"_gainprice",_gainprice);

 

//多單停損

if _stock =1

and close < _lossprice

then 

begin

_stock = 0;

if _buyorsell=2 then 

ret = 1;

end;

Print(Time,"多單停損","成本價:",_cost,"庫存:",_stock,"close",close,"_lossprice",_lossprice);

 

顯示更多回應 發表回覆
Close