我想寫一個多次到頂後突破時,同時滿足周轉率以及大戶買超金額的自動交易,我將XS的多次到頂後突破指標改寫後,回測沒有滿足的條件出現,不知道要如何調整? 是否有大神可以幫忙看一下? 剛進來學習,還在摸索中,謝謝!!
//到頂突破
var: TouchTop(0);
var: Tuneoverratio(0);
var: Largeaccountmoney(0);
var: ConditionEntryTop(false);
var: ConditionEntryTuneover(false);
var: ConditionEntryLargeAccount(false);
var: ConditionEntryAll(false);
vars:
holdingReturn(0), // (currentPrice - avgEntryPrice_) / avgEntryPrice_ * 100
entryDate_(0), // FilledEntryDate adapter
currentDate_(0), // Date adapter
avgEntryPrice_(0), // FilledAvgPrice adapter
ConditionExitProfit(false),
ConditionExitLoss(false),
ConditionExitTime(false),
ConditionHasPosition(false),
ConditionExit1(false),
ConditionExit2(false),
ConditionExit3(false);
input:HitTimes(3); setinputname(1,"設定觸頂次數");
input:RangeRatio(1); setinputname(2,"設定頭部區範圍寬度%");
input:Length(20); setinputname(3,"計算期數");
settotalbar(Length + 3);
variable: theHigh(0); theHigh = Highest(High[1],Length); //找到過去其間的最高點
variable: HighLowerBound(0); HighLowerBound = theHigh *(100-RangeRatio)/100; // 設為瓶頸區間上界
variable: TouchRangeTimes(0); //期間中進入瓶頸區間的低點次數,每跟K棒要歸0
//回算在此區間中 進去瓶頸區的次數
TouchRangeTimes = CountIF(High[1] > HighLowerBound, Length);
if TouchRangeTimes >= HitTimes and ( q_ask> theHigh or close > theHigh) then TouchTop=1;
//周轉率
if barfreq = "Tick" or barfreq = "Min"
then raiseruntimeerror("不支援此頻率");
if GetField("發行張數(張)") <> 0 then begin
Tuneoverratio = GetField("成交量", "D") / GetField("發行張數(張)") * 100;
end;
//大戶金額
{大戶買賣力(金額)是特大單金額+大單金額,資料為開盤迄今的累計
支援商品:台(股票)}
value1 = GetField("賣出特大單金額","D") + GetField("賣出大單金額","D");
value2 = GetField("買進特大單金額","D") + GetField("買進大單金額","D");
Largeaccountmoney = value2 - value1;
// 進場條件
ConditionEntryTop = TouchTop=1;
ConditionEntryTuneover = Tuneoverratio >= 0.005;
ConditionEntryLargeAccount = Largeaccountmoney > 20;
ConditionEntryAll = ConditionEntryTop and ConditionEntryTuneover and ConditionEntryLargeAccount;
If ConditionEntryAll Then
Begin
Buy(1, MARKET, label:="進場觸發");
Alert("符合進場條件,已買進 1 張");
End;
// 出場條件
ConditionExitProfit = holdingReturn >= 5;
ConditionExitLoss = holdingReturn <= -1.5;
ConditionExitTime = entryDate_ < currentDate_ and currentDate_ - entryDate_ >= 2;
ConditionHasPosition = Position > 0;
ConditionExit1 = ConditionHasPosition and ConditionExitProfit; // 停利
ConditionExit2 = ConditionHasPosition and ConditionExitLoss; // 停損
ConditionExit3 = ConditionHasPosition and ConditionExitTime; // 持有超過兩天平倉
If ConditionExit1 Then
Begin
Sell(1, MARKET, label:="達到停利,出場");
Alert("持倉報酬率達到 5%,已賣出 1 張");
End;
If ConditionExit2 Then
Begin
Sell(1, MARKET, label:="達到停損,出場");
Alert("持倉報酬率低於 -1.5%,已賣出 1 張");
End;
If ConditionExit3 Then
Begin
Sell(1, MARKET, label:="持倉超過兩日平倉");
Alert("持有超過 2 天,平倉已執行");
End;
8 評論