自動交易當日或隔日出場的問題

  •   769 
  • 最後發表   王小光  2023 八月 30
王小光 發文於   2023/08/01

我找了相關的文章沒找到當日或隔日出場的相關語法

想請小幫手幫我解答一下

條件:

1.當天進場後尾盤沒有漲停,1323市價出場

2.當天進場後有鎖漲停,隔天跌破1分K 5MA出場

value1=average(getfield("收盤價","1"),5);

value2=getfield("漲停價");

If entermarketclosetime(2) and close<value2 and position=1 and filled=1

then begin

setposition(0,market);

請教小幫手條件二的隔日出場條件要怎麼寫

 

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

Hello 王小光,

 

您可以用 FilledRecordDate 搭配 FilledRecordCount 來取得最新一筆交易的日期。

只要當此日期不等於當下的日期就相當於換日。

舉例來說:

if position <> 0 and filled <> 0 and FilledRecordDate(FilledRecordCount) <> date then setposition(0, market);

這樣就會在換日時將商品出清。

  • 按讚來自於
  • BBD9650
王小光 發文於   2023/08/04

Filledrecorddate跟Filledrecordcount這兩個函數只要我策略有中斷是不是就抓不到成交日期?

XQ小幫手 發文於   2023/08/08

Hello 王小光,

 

目前 FilledRecordDate 和 FilledRecordCount 只會保存該次策略執行的紀錄。

如果您是設定為依庫存的話,策略中斷再啟動時Filledrecorddate抓到的會是啟動當下的日期。

因為系統是在啟動時補上一筆虛擬的交易,將策略的部位、庫存和成本調整和帳戶裡的庫存成本相同。

 

  • 按讚來自於
  • BBD9650
王小光 發文於   2023/08/14

value1=average(getfield("收盤價","1"),5);

value2=getfield("漲停價","D");

 

condition1=GetSymbolInfo("買賣現沖")=true;

 

if

close=value2 and volume[1]>300 and close<50 and close>20 and condition1 and

position=0 and filled=0

then begin

setposition(1,market);

end;

 

if

date=date[1] then begin

if

currenttime>=132300 and close<value2 then begin

setposition(0,market);

end;

end else begin

if

close<value1

then setposition(0,market);

end;

 

HI 小幫手

我遇到一個問題,在date=date[1]這段後面我想做的是

當1323時且收盤價不是漲停價時,平倉有部位的部分

不過我回測後都發現

在當日個股有漲停打開時就會賣出

想請小幫手幫我看看我是哪邊有寫錯呢?

XQ小幫手 發文於   2023/08/16

Hello 王小光,

 

您的出場條件有2個,除了上述的以外另一個是收盤價小於近5分鐘平均。

應該是觸發了這個 (如果前四分鐘都是漲停,當根Bar打開時5分鐘平均一定會大於當根收盤價) 條件所導致。

建議您可以在腳本中加上print函數將相關訊息印出確認。

王小光 發文於   2023/08/16

Hi 小幫手

If...then begin 

end else begin

我的認知這段函數是

如果...執行then begin 下面的條件,如果不是...執行else begin下面的條件

套用上述的條件

如果date=date[1]執行

If currenttime>=132300 and close<value2

.....

如果date<>date[1]執行

If close<value1

....

這樣對嗎?

XQ小幫手 發文於   2023/08/21

Hello 王小光,

 

If...then begin 

...

end else begin

...

是如同您說的那樣沒錯。

小幫手建議您可以在腳本中兩個出場執行時加上 print,這樣就可以看出是哪個條件觸發。

舉例來說:

if date=date[1] then begin

    if currenttime>=132300 and close<value2 then begin

        setposition(0,market);

        print(date, time, "條件A觸發");

        end;

end else begin

    if close<value1 then begin

        setposition(0,market);

        print(date, time, "條件B觸發");

        end;

    end;

 

這樣就可以簡單明確的看出是哪個條件觸發的。

 

另外您的條件 date = date[1] 如果是在分鐘頻率的話基本上很難觸發小幫手標示的條件A,因為當 13:23 時前一根分鐘Bar大多不會跨日。

而相對的若使用日頻率的話則是只會進入判斷條件B的部分,因為前一根Bar一定會換日。

王小光 發文於   2023/08/25

Hi小幫手

我用FilledRecordDate(FilledRecordCount)回測時,發生錯誤訊息:取得成交紀錄資訊時,索引值超出範圍

以下是我的腳本

value1=average(getfield("收盤價","5"),5);

value2=getfield("漲停價","D");

value3=GetSymbolField("TSE.TW","收盤價","D");

value4=average(value3,5);

condition1=GetSymbolInfo("買賣現沖")=true;

condition2=FilledRecordDate(FilledRecordCount)<>date=true;

condition3=FilledRecordDate(FilledRecordCount)<>date=false;

 

if

value3>value4

then begin

 

if

close=value2 and volume[1]>300 and close<50 and close>20 and condition1

and position=0 and filled=0

then begin

setposition(1,market);

end;

 

if

condition2

then begin

if

close<value1 then setposition(0,market);

end;

 

if

condition3

then begin

if

close<value2 and currenttime>=132300 then setposition(0,market);

end;

 

end;

 

XQ小幫手 發文於   2023/08/30

Hello 王小光,

 

FilledRecordCount 會是這次策略啟動開始的成交紀錄。

所以這次策略沒有任何交易的話,該數值會為0。

FilledRecordDate 的參數要從1開始,推測是此原因導致策略失敗。

您可以在腳本中先判斷 FilledRecordCount 是否為0,不為0的話才給 FilledRecordDate 使用。

發表回覆
Close