close
From: 阿政


固定金額停利停損:

當整體部位的最大獲利金額到達*10時,產生平倉所有部位的委託
setstopposition;
SetProfitTarget(entryprice*10);

當個別部位的最大獲利金額到達*10時,產生平倉該個別部位的委託
setstopcontract;
SetProfitTarget(entryprice*10);


當整體部位的最大虧損金額到達*10時,產生平倉所有部位的委託
setstopposition;
setstoploss(entryprice*10);

當個別部位的最大虧損金額到達*10時,產生平倉該個別部位的委託
setstopcontract;
setstoploss(entryprice*10);

固定百分比(%)停利停損:
Value1= EntryPrice(0)*0.01*pointvalue; //以停損設在進場價的1%為例
setstopcontracts;
setstoploss(Value1);

百分比停損

無法如所預期的運作的原因其實就在 EntryPrice(0) 的取得時間是在進場K棒的結束,而沒取得的時候...它拿了 0 來當做 EntryPrice。如果你打算使用日線的策略又想做好停損的控制,就會知道這個東西的重要性了。

既然問題出在 EntryPrice 取得的時間無法及時的話,只有走向打開 IntrabarOrderGeneration 一途了,也就是啟動 This bar 模式,但是如果在原始的策略理就直接打開 IOG 的話,恐怕程式的運作又會出現不是我這笨笨小腦袋所想的意外狀況,請參考:我在凱衛討論區提出的 IOG 疑問

為了要在已經發生進場但K棒尚未結束時及時取得 EntryPrice,開啟 IOG 成了必須。但是我不要讓原本的策略開啟 IOG,因此我就只好把進場價百分比停損的這個部分,另外做一個訊號,在這個部分開啟 IOG,而原始的策略則不開,同時避免 MC 在還沒取得 EntryPrice 的時候就拿個零來塞,如下:

[IntrabarOrderGeneration = True];
Input:StopPercent(0.01);

if EntryPrice(0)<>0 then begin
Value1= EntryPrice(0)*StopPercent*PointValue;
setstopcontract;
setstoploss(Value1);
end;

終於,我們得到這樣的效果了!進場的當根可以得到停損的控制,又不會亂搞。

百分比停損1

只是,只要圖表上所放的訊號,其中一個有開啟 IOG 的話,回測的時候務必開啟"細部回測",而要細部回測到 Tick 的話,你所擁有的電腦,恐怕就要夠力才不會讓人想哭了 XD 。
arrow
arrow
    全站熱搜

    David 發表在 痞客邦 留言(0) 人氣()