想寫一個以觸發條件時的收盤價為基準,100點後停利的程式

  •   51 
  • 最後發表   Chun Yi  4 天前
Chun Yi 發文於   2025/04/15

小幫手您好!!!

小弟目前才剛接觸程式交易

想寫一個以MA5跟MA20黃金交叉後

以該黃金交叉後的收盤價為基準

超過該收盤價的100點後停利

例如台積電期貨(全)的5分K

目前的草稿如下:

If  average(close,5)[1] < average(close,20)[1] and average(close,5) > average(close,20)

then

  begin

    value1=close

    buy(1,market)

  end;

if price > value1 + 100

then sell(1,market)

目前因為工作性質的關係,在離島出差

也不方便攜帶筆電

回台灣也要一個多月後

可是這個程式碼在我心裡一直想了好幾天

好想測試知道對不對

有感覺似乎某些地方可能有點怪

好像有點知道是哪裡出問題,但自己又說不太上來

請小幫手不吝指教Orz

排序方式: 標準 | 最新
虎科大許教授 發文於   2025/04/15

If position=0 and average(close,5) cross over average(close,20) 
then buy(1,market);
if position=1 and filled=1 and c > filledAvgPrice + 100
then sell(1,market);

Chun Yi 發文於   2025/04/16

教授不好意思,我不是要以取得商品的交易成本為基準

我是想以條件成立時的收盤價為基準

條件成立的當下是先丟市價單

不用管它成交的價格為何

但當要出場時,是以該收盤價加100點來出場

所以我的問題是該如何叫出成立條件時的收盤價那個數字

另外我預估之後也不會在條件成立時手上不會完全沒有部位

所以不太能夠用是否有部位作為判斷><

謝謝教授與小幫手的不吝指教><

虎科大許教授 發文於   2025/04/16

若你是使用逐筆洗價,則該K棒還沒收盤時就可能符合條件。若是非逐筆洗價,則直接在觸發訊號時記錄價格。

這個問題不難處理,但請先說明你使用的頻率以及是否勾選逐筆洗價。不同的情境,處理的方式也不同。

Chun Yi 發文於   2025/04/16

了解,剛剛想了一下

可能進場是非逐筆,但出場要逐筆= =

不過我有想一些草稿,請教授指教

以下是非逐筆的草稿(5分K):

condition1=average(close,5)[1] < average(close,20)[1] and average(close,5) > average(close,20)

if condition1 then

  begin

    value1=close 

    buy(1,market)

  end;

if close > value1+100

then sell(1,market)

 

以下為逐筆的草稿(5分K):

condition1=average(close,5)[2] < average(close,20)[2] and average(close,5) [1]> average(close,20)[1]

if condition1 then

  begin

    value1=close[1]
    buy(1,market)

  end;

if price >= value1 + 100 

then sell(1, market)

不知道還有沒有更好的寫法><

虎科大許教授 發文於   2025/04/16

if barFreq<>"Min" or barinterval<>5 then raiseRunTimeError("限用5分鐘");
var: intraBarPersist myC(0);
var: intraBarPersist myTime(0);
if Time<>myTime then
    begin
        If position=0 and filled=0 
            and average(c[1],5) cross over average(c[1],20) then
            begin
                buy(1,market);
                myC=c[1];
            end;
        myTime=Time;
    end;
if position=1 and filled=1 
    and c>myC+100 then sell(1,market);

Chun Yi 發文於   2025/04/16

太感動了T_T

謝謝教授Orz

Chun Yi 發文於   2025/04/16

許教授不好意思,我剛剛爬了不少文

發現非洗價的模式是比教適合我的策略

可是又擔心如果某5分K棒的最高價有超過MyC+100

但是收盤價可能沒有MyC+100

然後從此行情就掉下去了,單子都出不去

想請問可以用FastHighest(,)搜尋過去的最高點嘛

當最高點超過100點後,馬上送出市價賣單

括弧內的第一個我知道要打High,第二個依XQ官網的說明,要打期數,我就不太懂了;

或者成交後,馬上送出賣單委託sell(1,MyC+100)

甚至是停損單,(假設停損也是100點)

不知道停損單該如何撰寫

謝謝許教授與小幫手的指教Orz

虎科大許教授 發文於   2025/04/16

(1)過去N期的最高價可用highest(h[1],N)抓到。

(2)任何時候XQ只接收一張委託單在外面,也就是說,你無法在買進之後,同時送出停利與停損的委託單。

(3)停損單無法先送出,必須等到符合停損條件時,再送出sell(1, market)。

Chun Yi 發文於   2025/04/17

請問許教授,程式裡面一開始宣告MyTime

以及Time不等於MyTime時

最後Time=MyTime

請問這些程式碼的意義為何

我翻了李經理出的書、還有網站上的函數列表都還是找不到><

還請許教授不吝指教

虎科大許教授 發文於   2025/04/17

讓K棒第一個Tick進入if裡面,然後讓myTime=Time,這樣的話,同一根K棒的其他Tick洗價,就不會再進入if。

顯示更多回應 發表回覆
Close