瘋狂自己買進,賣出,買進,賣出,有人也這樣嗎?是我的電腦瘋了,還是我瘋了?

  •   384 
  • 最後發表   WinnerC  2022 十月 03
WinnerC 發文於   2022/09/25

以下是20220922 2:00 - 2:10 的交易LOG

 

先說明,我的腳本有限制交易時間間隔為5分鐘以上,之前執行也沒問題,腳本也沒改,跑回測也不會這樣。

 

實單交易就是這樣。

 

怕怕了~~~~~

 

20220922 02:00:04.770 小型台指近月 賣出成交 成交時間:2022/09/22 02:00:04.000 (賣出) 數量:1 價格:14406

20220922 02:05:00.343 小型台指近月 賣出成交 成交時間:2022/09/22 02:05:00.000 (賣出) 數量:1 價格:14334

20220922 02:08:46.897 小型台指近月 買進成交 成交時間:2022/09/22 02:08:46.000 (買進) 數量:1 價格:14401

20220922 02:08:48.397 小型台指近月 賣出成交 成交時間:2022/09/22 02:08:48.000 (賣出) 數量:1 價格:14399

20220922 02:08:50.403 小型台指近月 買進成交 成交時間:2022/09/22 02:08:50.000 (買進) 數量:1 價格:14401

20220922 02:08:50.811 小型台指近月 賣出成交 成交時間:2022/09/22 02:08:50.000 (賣出) 數量:1 價格:14399

20220922 02:08:52.351 小型台指近月 買進成交 成交時間:2022/09/22 02:08:52.000 (買進) 數量:1 價格:14402

20220922 02:09:18.747 小型台指近月 賣出成交 成交時間:2022/09/22 02:09:18.000 (賣出) 數量:1 價格:14400

20220922 02:09:21.756 小型台指近月 買進成交 成交時間:2022/09/22 02:09:21.000 (買進) 數量:1 價格:14403

20220922 02:09:24.654 小型台指近月 賣出成交 成交時間:2022/09/22 02:09:24.000 (賣出) 數量:1 價格:14400

20220922 02:09:25.111 小型台指近月 買進成交 成交時間:2022/09/22 02:09:25.000 (買進) 數量:1 價格:14402

20220922 02:09:29.923 小型台指近月 賣出成交 成交時間:2022/09/22 02:09:29.000 (賣出) 數量:1 價格:14400

20220922 02:09:39.431 小型台指近月 買進成交 成交時間:2022/09/22 02:09:39.000 (買進) 數量:1 價格:14405

20220922 02:09:40.766 小型台指近月 賣出成交 成交時間:2022/09/22 02:09:40.000 (賣出) 數量:1 價格:14398

 

排序方式: 標準 | 最新
musashi 發文於   2022/09/25

回測和實際交易不同,通常都是腳本進出場條件判斷問題才會連續交易,用print把每個tick都印出來找看看吧

WinnerC 發文於   2022/09/26

不會的,

1. 腳本有交易間隔時間控制

2. 有部位不會再建新倉,必須前單平倉出場後才有再進場的可能

3. 查驗那一段時間,並未碰觸停損價格,部位也不應該平倉

4. 進場及出場時間都在2分鐘左右,台指期點數也不超過10點(台指期停損點數動輒40點以上),不應該平倉出場,造成反覆交易

ahgi 發文於   2022/09/26

本來想說用程式交易讓電腦自己跑,可以避開人性,也不會這麼累,結果變成更要注意會不會亂下單了,用程式交易之後我感覺變得比以前更累

musashi 發文於   2022/09/26

有沒有可能是自訂變數在進出場後未重置?

WinnerC 發文於   2022/09/26

Dear,

我的期望是單根5分K不要重複進場,目前的程式片段如下:

var: Quit_in_interval(0); //交易間隔分鐘

If BarFreq = "Min" then Quit_in_interval=BarInterval+1;   //如果是5分K,應該間隔6分鐘

 

//開單條件程序

if Position = 0 

and Filled = 0 

and in_confirm  //進場條件觸發

and (currentDate>Last_Buy_Date or  //夜盤跨日

currentTime >= timeadd(Last_Buy_Time, "M", Quit_in_interval))//同一天相隔上次進場超過6分鐘

then //多方買進操作程序

begin

SetPosition(1);{ 買進1張 }

Last_Buy_date=currentDate; //紀錄進場日期

Last_Buy_Time=currentTime; //紀錄進場時間

end;

 

這樣對嗎? 還是有更好的方法呢? 謝謝。

musashi 發文於   2022/09/26

你的Last_Buy_Time變數有加上intraBarPersist嗎?  因逐筆交易而改變的變數建議加上intraBarPersist Last_Buy_Time,不然可能發生Last_Buy_Time是上一根K棒的值。

WinnerC 發文於   2022/09/26

Dear Musashi,

我來試試看,謝謝。

Last_Buy_Time=currentTime, 是不是紀錄交易時的電腦時間呢?電腦會自動網絡校時,理論上不應該紀錄上一根K棒的時間呀⋯⋯

我寫入print來測看看,謝謝

WinnerC 發文於   2022/09/26

1. Last_Buy_Time變數宣告時,改用 var: intraBarPersist Last_Buy_Time(0);

     回測的結果是一樣沒有重複交易的,事實上本來的回測也沒有重複交易,實單交易是有的 。

2. 改成下列的寫法:

var: intrabarpersist count(0),

condition1 = 進場條件;

if condition1 and count <> currentbar then begin

setposition(1, market);

count = currentbar;

end;

回測結果還是一模一樣的(沒有重複交易)。

 

 

 

以下是另一個策略在那一段時間的交易紀錄。

 

20220922 02:05:00.343 小型台指近月 賣出成交 成交時間:2022/09/22 02:05:00.000 (賣出) 數量:1 價格:14334

20220922 02:08:46.897 小型台指近月 買進成交 成交時間:2022/09/22 02:08:46.000 (買進) 數量:1 價格:14401

20220922 02:08:48.397 小型台指近月 賣出成交 成交時間:2022/09/22 02:08:48.000 (賣出) 數量:1 價格:14399

20220922 02:08:50.403 小型台指近月 買進成交 成交時間:2022/09/22 02:08:50.000 (買進) 數量:1 價格:14401

20220922 02:08:50.811 小型台指近月 賣出成交 成交時間:2022/09/22 02:08:50.000 (賣出) 數量:1 價格:14399

20220922 02:08:52.351 小型台指近月 買進成交 成交時間:2022/09/22 02:08:52.000 (買進) 數量:1 價格:14402

20220922 02:09:18.747 小型台指近月 賣出成交 成交時間:2022/09/22 02:09:18.000 (賣出) 數量:1 價格:14400

20220922 02:09:21.756 小型台指近月 買進成交 成交時間:2022/09/22 02:09:21.000 (買進) 數量:1 價格:14403

20220922 02:09:24.654 小型台指近月 賣出成交 成交時間:2022/09/22 02:09:24.000 (賣出) 數量:1 價格:14400

20220922 02:09:25.111 小型台指近月 買進成交 成交時間:2022/09/22 02:09:25.000 (買進) 數量:1 價格:14402

20220922 02:09:29.923 小型台指近月 賣出成交 成交時間:2022/09/22 02:09:29.000 (賣出) 數量:1 價格:14400

20220922 02:09:39.431 小型台指近月 買進成交 成交時間:2022/09/22 02:09:39.000 (買進) 數量:1 價格:14405

musashi 發文於   2022/09/27

print要印出每個細節,並且考慮腳本運算時間順序,給你參考我print的方式,這樣比較清楚問題點在哪裡

        //▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼
        print   (   file("D:\SysJust\XQLite\XS\Print\監控\"),
                    "   ■-date ",       numtostr(date,      0),
                    "   ■-time ",       numtostr(time,      0),
                    "   ■-currentTime ",numtostr(currentTime,       0),
                    "   ■-close ",      numtostr(close,     2),
                    "   ■-Position ",   numtostr(Position,      0),
                    "   ■-Filled ",     numtostr(Filled,        0),


                    "   ■-Last_Buy_Time ",  numtostr(Last_Buy_Time,     0),
                    "   ■-in_confirm ",     in_confirm,
                    "   ■-Last_Buy_Date ",  numtostr(Last_Buy_Date,     0),
        "");//▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲  

if Position = 0 
and Filled = 0 
and in_confirm  //進場條件觸發
and (currentDate>Last_Buy_Date or  //夜盤跨日
currentTime >= timeadd(Last_Buy_Time, "M", Quit_in_interval))//同一天相隔上次進場超過6分鐘
then //多方買進操作程序
begin
    SetPosition(1);{ 買進1張 }
    Last_Buy_date=currentDate; //紀錄進場日期
    Last_Buy_Time=currentTime; //紀錄進場時間

        //▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼
        print   (   file("D:\SysJust\XQLite\XS\Print\進場\"),
                    "   ■-date ",       numtostr(date,      0),
                    "   ■-time ",       numtostr(time,      0),
                    "   ■-currentTime ",numtostr(currentTime,       0),
                    "   ■-close ",      numtostr(close,     2),
                    "   ■-Position ",   numtostr(Position,      0),
                    "   ■-Filled ",     numtostr(Filled,        0),


                    "   ■-Last_Buy_Time ",  numtostr(Last_Buy_Time,     0),
                    "   ■-in_confirm ",     in_confirm,
                    "   ■-Last_Buy_Date ",  numtostr(Last_Buy_Date,     0),
        "");//▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲  
end;

WinnerC 發文於   2022/09/27

謝謝您,我來追蹤看看。

顯示更多回應 發表回覆
Close