請問在回測的時候要如何撰寫移動出場

  •   1.4K 
  • 最後發表   小卡  2019 七月 02
小卡 發文於   2018/02/22

執行回測的時候有辦法知道買進的價位或日期嗎?

舉個簡單例子最高點回跌30%停損停利, 可是在回測的時候沒辦法知道買進的日期或價位

 

排序方式: 標準 | 最新
XQ小幫手 發文於   2018/02/22

Hi 小卡,

您好,回測報告的走勢圖與明細表上應該會揭示才對,若仍有問題,

請提供進、出場腳本的完整程式碼,與回測報告與回測設定,

以利小編分析問題的原因,謝謝。

小卡 發文於   2018/02/22

Hi 小幫手,

我是想問出場的腳本, 有辦法知道進場的資訊嗎?

因為跑回測的時候, 這個資訊是進場腳本觸發的..

 

舉個例子, 我要做到進場後的最高點回跌30%停損停利

那我回測的出場腳本要如何撰寫呢?

XQ小幫手 發文於   2018/02/22

Hi 小卡,

您好,這部分需要自行撰寫,使用變數去紀錄進場當下的價格與日期即可,如下版友分享範例文章,以上說明,謝謝。

使用策略雷達做到 KD金叉向上進場;KD死叉向下,且停損10點出場

小卡 發文於   2018/02/22

Hi 小幫手,

進出場使用同一個腳本

變數是可以共用的是這樣嗎?

若使用不同的腳本, 宣告的變數可以互相吃到嗎?

 

小卡 發文於   2018/02/22

Hi 小幫手, 

我使用範例的方式, 宣告變數紀錄進場價格 (_Buy_Price_x )

但是看起來變數在出場的時候會變成0, 出場的迴圈永遠都不會ret=1 

 

Input: _BuyOrSell(0), Percent(0.3);

 

SetInputName(1, "買進=1;賣出=0");

SetInputName(2, "出場價位(賣出)");

 

Vars: _Buy_Price_x(0);

 

if _BuyOrSell = 1 then

begin 

if getsymbolfield("tse.tw","收盤價") > average(getsymbolfield("tse.tw","收盤價"),10)[1] then begin

value4=GetField("總市值");

value5=average(value4,600);

if value4[1]<value5[1]*0.7

and close=highest(close,10)

then condition1= true;

end;

 

if condition1 then begin

_Buy_Price_x = close;

ret=1;

end;

end

else

begin

if close < (_Buy_Price_x * (1-Percent)) then ret = 1;

 

end;

XQ小幫手 發文於   2018/02/22

Hi 小卡,

待小幫手查看後再向您說明,謝謝。

XQ小幫手 發文於   2018/02/23

進出場使用同一個腳本

變數是可以共用的是這樣嗎?

若使用不同的腳本, 宣告的變數可以互相吃到嗎?

進出場使用同一個腳本,變數不能共用唷~

使用不同的腳本,宣告的變數也不能互相吃到~

 

小幫手供您參考的範例文章中,有以下的撰寫邏輯:

進場腳本比較單純,條件觸發即進場,

出場腳本需要先撰寫進場的策略,當進場策略觸發時,記錄相關資訊,以供出場腳本進行運算。

 

以上說明,謝謝。

XQ小幫手 發文於   2018/02/23

我使用範例的方式, 宣告變數紀錄進場價格 (_Buy_Price_x )

但是看起來變數在出場的時候會變成0, 出場的迴圈永遠都不會ret=1 

您的寫法不太對,問題的原因在於

判斷為進場腳本的輸入參數放的地方不正確,應該要放在進場佈單的判斷,也就是進場 ret = 1; 處,

 

修改後的範例腳本跑出來有交易筆數如下圖:

 

所以小幫手修改後的範例腳本如下,供您參考,謝謝:

Input: _BuyOrSell(0), Percent(0.3);

SetInputName(1, "買進=1;賣出=0");
SetInputName(2, "出場價位(賣出)");

Vars: _Buy_Price_x(0);


if getsymbolfield("tse.tw","收盤價") > average(getsymbolfield("tse.tw","收盤價"),10)[1] then begin
    value4=GetField("總市值");
    value5=average(value4,600);

    if value4[1]<value5[1]*0.7 and close=highest(close,10)   then condition1= true;
end;

if condition1 then begin
    _Buy_Price_x = close;
    if _BuyOrSell = 1 then  ret=1;
end;

if close < (_Buy_Price_x * (1-Percent)) then ret = 1;

 

以上說明,謝謝。

河馬 發文於   2018/03/03

 

進出場使用同一個腳本,變數不能共用唷~

使用不同的腳本,宣告的變數也不能互相吃到~

小幫手你好

我最近看到這篇文章的討論,關於你在上面的回覆,我不是很明白想要請教。

1.進出場使用同一個腳本,變數不能共用

    我的疑問,既然是同一個腳本,裡面的變數一定是相同的,如何進出場不共用變數?  意思能否再詳細說明。

    如果是進場段與出場段不能用同一變數,但上方的程式碼為了記錄進場價,在進出場段也都有用到_Buy_Price_x的變數

2.使用不同的腳本,宣告的變數也不能互相吃到

    以版友的範例文章來說,如果改寫成KD金叉進場及KD死叉出場2個腳本

    在設定策略雷達的時候,如果在進場策略的腳本中用了k cross over d,那用在出場策略的腳本就不能用 k cross under d 對嗎?

 

以下還有問題請教,

1.範例是用變數紀錄進場價格,我想記錄買進的日期、商品代號或名稱該如何寫?

2.感覺腳本是套進每支商品獨立計算,如果我想計算同一策略下,所有商品總共買進了多少錢有辦法嗎?

請小幫手指教,謝謝

XQ小幫手 發文於   2018/03/06

Hi 河馬,

待小幫手查看後再向您說明,謝謝。

顯示更多回應 發表回覆
Close