賣出回補的點位有問題

  •   319 
  • 最後發表   Sagiter  2025 六月 11
Sagiter 發文於   2025/05/29

您好:請幫我確認程式中寫出買進後,計入_highP。只要高於_highP點則賣出。

為何如TIME1 202505262305005這筆成交後,TIME1 20250526233500這筆沒有賣出。

謝謝。

input: _ma20(20, "大趨勢MA20");

input: _ma200(200, "大趨勢MA200");

input: Percent(0.5);  setinputname(3,"均線糾結區間%");

input: XLen(10);  setinputname(4,"均線糾結期數");

input: Volpercent(30);  setinputname(5,"放量幅度%");//帶量突破的量是超過最長期的均量多少%

input: profit_point(100, "停利(點)");

 

var: _bigMA20(0), _bigMA200(0),_SMALLMA5(0), _SMALLMA10(0), _SMALLMA20(0);

 

var: _longCond(false), _shortCond(false);

variable: AvgHLp(0),AvgH(0),AvgL(0),_LOWP(0),_highP(0),flag_k1(0),flag_k2(0);

variable: RangeHigh(0);

variable: RangeLow(0);

SetTotalBar(200);

setbarBack(200,"60");

// 計算大趨勢均線 (60分k)

// 使用跨頻率函數 xf_XAverage 計算60分k下的均線

_bigMA20 = BollingerBand(Getfield("收盤價","60"), 20, 2); //"布林上軌";

_bigMA200 = xfMIN_EMA("60", close, _ma200);

value1=xfMIN_GetValue("60",_bigMA20,1);

value2=xfMIN_GetValue("60",_bigMA200,0);

value3=xfMIN_GetValue("60",_bigMA200,1);

value4=xfMIN_GetValue("60",_bigMA200,2);

condition1=close<value2 and value2<value3 AND value3<value4;

condition2=close<value2 ;

condition5=close<value1 and close<value2;

 

//定義均線糾結

 

AvgH = maxlist(_SMALLMA5,_SMALLMA10,_SMALLMA20);

AvgL = minlist(_SMALLMA5,_SMALLMA10,_SMALLMA20);

 

if AvgL > 0 then AvgHLp = 100*AvgH/AvgL -100;

//定義整理後突破

 

RangeHigh=highest(close[1],12);

RangeLow=lowest(close[1],12);

condition6=RangeHigh <  RangeLow * (1+ 0.5/100);

 

// 爆量1分K

 

Vars: volume_biggest_index(0);

 

volume_biggest_index = getOneKBiggestVolumeIndex();

//candlestick_1k_big = getOneKBiggestVolumeIndexBeforTimePART2(0);

value75=GetField("High", "1")[volume_biggest_index];

value76=GetField("Low", "1")[volume_biggest_index];

value77=MAXList(RangeHigh,value75);

value78=MInList(RangeLow,value76);

// 定義進場條件:大趨勢空頭排列且盤整區間成立時

// 計算小趨勢均線 (5分k)

// 

_SMALLMA5 = XAverage(close, 5);

_SMALLMA10 = XAverage(close, 10);

_SMALLMA20 = XAverage(close, 20);

condition3=NOT(Time>084500 and Time<091500);

condition4=NOT(Time>150000 and Time<151500);

 

 

// 當價格向下跌破盤整區間下界時進場做空

 

//IF condition5 and condition3 and condition4 and countIf(AvgHLp < Percent,XLen)>8 THEN BEGIN

IF condition5 and condition3 and condition4 and condition6 AND countIf(AvgHLp < Percent,XLen)>8 AND RangeLow>value76  THEN BEGIN

_shortCond=_SMALLMA5<_SMALLMA10 AND _SMALLMA10<_SMALLMA20 

AND volume > average(volume,60) * (1 + volpercent * 0.01) 

AND CLOSE CROSS Under value76 ;

END;

// 交易策略:符合條件時採用 SetPosition 指令進行操作

 

if _shortCond then BEGIN 

    SetPosition(-1, market);

_highP= value75;

END;

if Position <0 and Filled <0 AND Close > _highP then begin

{ 停損 }

SetPosition(0,market);

flag_k2=1;

end ;

TIME1 20250526230500.000000 close 21358.000000 value76 21343.000000 _highP 21372.000000 ATR 12.800000 flag_k2 1.000000 po -1.000000 fi -1.000000 

TIME1 20250526230500.000000 con5 TRUE con6 TRUE RHigh 21385.000000 RLow 21335.000000 AvgHLp 0.090822 

k1_number 1394.000000 k1_range 4.000000 getOneKBiggestVolumeIndex 18.000000 

TIME1 20250526231000.000000 close 21358.000000 value76 21343.000000 _highP 21372.000000 ATR 12.100000 flag_k2 1.000000 po -1.000000 fi -1.000000 

TIME1 20250526231000.000000 con5 TRUE con6 TRUE RHigh 21385.000000 RLow 21335.000000 AvgHLp 0.078550 

k1_number 1399.000000 k1_range 4.000000 getOneKBiggestVolumeIndex 23.000000 

TIME1 20250526231500.000000 close 21360.000000 value76 21343.000000 _highP 21372.000000 ATR 12.150000 flag_k2 1.000000 po -1.000000 fi -1.000000 

TIME1 20250526231500.000000 con5 TRUE con6 TRUE RHigh 21385.000000 RLow 21335.000000 AvgHLp 0.068655 

k1_number 1404.000000 k1_range 4.000000 getOneKBiggestVolumeIndex 28.000000 

TIME1 20250526232000.000000 close 21358.000000 value76 21343.000000 _highP 21372.000000 ATR 12.100000 flag_k2 1.000000 po -1.000000 fi -1.000000 

TIME1 20250526232000.000000 con5 TRUE con6 TRUE RHigh 21384.000000 RLow 21335.000000 AvgHLp 0.058275 

k1_number 1409.000000 k1_range 4.000000 getOneKBiggestVolumeIndex 33.000000 

TIME1 20250526232500.000000 close 21365.000000 value76 21343.000000 _highP 21372.000000 ATR 12.100000 flag_k2 1.000000 po -1.000000 fi -1.000000 

TIME1 20250526232500.000000 con5 TRUE con6 TRUE RHigh 21382.000000 RLow 21335.000000 AvgHLp 0.052396 

k1_number 1414.000000 k1_range 4.000000 getOneKBiggestVolumeIndex 38.000000 

TIME1 20250526233000.000000 close 21370.000000 value76 21343.000000 _highP 21372.000000 ATR 12.150000 flag_k2 1.000000 po -1.000000 fi -1.000000 

TIME1 20250526233000.000000 con5 TRUE con6 TRUE RHigh 21376.000000 RLow 21335.000000 AvgHLp 0.039379 

k1_number 1419.000000 k1_range 4.000000 getOneKBiggestVolumeIndex 43.000000 

TIME1 20250526233500.000000 close 21377.000000 value76 21343.000000 _highP 21372.000000 ATR 12.300000 flag_k2 1.000000 po -1.000000 fi -1.000000 

TIME1 20250526233500.000000 con5 FALSE con6 TRUE RHigh 21374.000000 RLow 21335.000000 AvgHLp 0.025641 

k1_number 1424.000000 k1_range 4.000000 getOneKBiggestVolumeIndex 48.000000  

 

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

這可能與你沒有揭露的函數getOneKBiggestVolumeIndex有關。

另外,_highP沒有用intrabarpersist宣告,也可能抓到的是上一根K棒的數值。

Sagiter 發文於   2025/05/29

謝謝你的回覆,可是依照PRINT的結果,_highP的值看起來是沒錯的。如下圖為指標狀況。為何紅圈處1不回補卻再

 

紅圈處2回補。另外我試著用成本價+50點就回補,也是出現第1次超過不回補要第2次超過才回補。看不出是哪裡寫錯。

附加文件

Sagiter 發文於   2025/05/29

我看出問題點了,只要將_shortCond=false;加入即可。因為我查print紀錄,都是等_shortCond程式才會回補。但是我還是不知道為何回補那段程式會跟_shortCond=false有關聯。請問有人清楚嗎?謝謝。

虎科大許教授 發文於   2025/05/29

若只從你提供的程式判斷,回補與_shortCond無關。只與Position <0 and Filled <0 AND Close > _highP這三個條件有關,你可以print看看這三個條件是否都是True。若有一個不是True,再針對那個條件看看是什麼原因造成。

XS小編 發文於   2025/06/11

Hello Sagiter,

 

小編補充,_shortCond 如果沒有改回 False 的話,只要符合條件時 SetPosition(-1, market); 都會執行。

當多個交易指令同時間執行時,策略會執行第一個運作到的交易指令,所以若 SetPosition(-1, market); 和 SetPosition(0,market); 同次被運算到的話,系統會執行SetPosition(-1, market);。

建議在進場時也加上部位控制。

發表回覆
Close