求教~關於庫存股交易程式碼的正確性?

  •   138 
  • 最後發表   XQYi  2024 五月 23
XQYi 發文於   2024/05/22

關於庫存股的幾種交易狀況模式

1.庫存股達獲利5%後平倉

2.今日漲幅>=6%時先賣出、漲幅跌回<=3%再買回做當沖

3.今日價格高於所計算的ATR上通道時賣出,跌回下通道時再買進做當沖

程式碼如下,請前輩大神指教是否正確?

input: Length(6,"ATR天數"),ATN(2.25,"ATR除數"),A1(2,"檔位"); 

value1 = Average(TrueRange, Length); 

value2=open-low; 

value3=high-open; 

value4=high-low; 

value5=value2/(value4+0.0001); 

value6=1-value5; 

 

value7=open-open*0.00015-(value1*value5)/ATN; 

condition1=close <= value7;//close 

condition3=close<= AddSpread(openD(0), -A1)  ; 

 

value8=open+open*0.00015+(value1*value6)/ATN; 

condition2=close >= value8;//close 

condition4= close >= AddSpread(openD(0), A1) ; 

 

input:P1(10,"操作價位L"),P2(500,"超作價位H"),X1(5,"獲利%停利"),X2(6,"今日漲幅%>");

 

 

//判斷買進

condition91 = condition3 ;

//判斷賣出

condition92 = condition4 ;

  

//----------------------------庫存交易變化

if position<>0 and filled<>0 then begin

value95=100 * (Close - FilledAvgPrice) / FilledAvgPrice; //停利停損%

 

//1S

if filled=1 and value95 >=X1  then setposition(0,filledAvgPrice*(1+(x1/100)),label:="獲利%停利");

 

//2S

if filled=1 and close >= close[1]*X2 then begin

setposition(position-1,GetField("收盤價","Tick"),label:="漲幅6%先賣");

value42=GetField("收盤價","Tick");

end;

 

//3S

if filled=1 and condition92  then begin

setposition(position-1,GetField("收盤價","Tick"),label:="ATR上先賣");

value46=GetField("收盤價","Tick");

end;

 

 //2B

if filled=-1 and value42 <=value42*0.97  then setposition(position+1,GetField("收盤價","Tick"),label:="漲幅6先賣後的買回");

 

//3B

if filled=-1 and condition91  then setposition(position+1,GetField("收盤價","Tick"),label:="ATR上賣出後ATR下買回");

end;

排序方式: 標準 | 最新
虎科大許教授 發文於   2024/05/22

提供兩點建議給你參考:

(1)用value42及value46記錄送出停利單的價格,在逐筆洗價時會有問題。改成:

var: intrabarpersist S2(0), intrabarpersist S3(0);

然後將value42=GetField("收盤價","Tick");改成S2=c;

將value46=GetField("收盤價","Tick");改成S3=c;

在盤中,GetField("收盤價","Tick")就是c,不用那麼麻煩寫那麼長的陳述式。

(2)S1、S2分別用IF處理,在開盤就超過6%獲利時會有問題(會先停利,而非處理漲幅6%先賣)。建議按照條件嚴苛順序,用Switch Case 處理。

XQYi 發文於   2024/05/22

感謝教授

1.已改Var方式

2.GetField("收盤價","Tick")是怕自己混淆, 因Close 感覺太多地方有著不同的意思 

3.庫存因為大多是可能也有虧損,可能今日漲停都未能獲利,所以做一個冒險當沖回補的交易(ATR也是)

4.Switch Case 還不是很熟悉怕弄錯了

XQYi 發文於   2024/05/23

 //2B

if filled=-1   then setposition(position+1,GetField("收盤價","Tick"),label:="漲幅6先賣後的買回");

 

if filled=-1  這個地方可能錯了,賣出後沒下委買單,可能要改為if filled=0 ?

如果是,真的希望XQ能夠用更直覺式的名稱來辨別使用position、filled在不同時機下的角色能正確使用!

發表回覆
Close