2009年1月16日 星期五

延遲進場時間

這個方式主要是利用 BarNumber 這函數

在K線圖最左邊的那一根K線,BarNumber等於1

往右一根,BarNumber等於2,...以此類推

通常在滿足進場條件式,會直接用 Buy 這指令直接買進。

不過若是賣訊號成立時,不想馬上進場,而想延遲一下。

就需要用到BarNumber了

在策略中宣到一個變數去儲存BarNumber值。

當訊號成立,變數紀錄BarNumber

然後就看要拖多久

在1K,BarNumber差1,就是差1分鐘,差2,就是差2分鐘.....

5k,BarNumber差1,就是差5分鐘,差2,就是差10分鐘.....

所以要注意策略跑得時間週期,和想要延遲的時間

如果策略在5分鐘K線跑,然後要延遲1分鐘進場。抱歉我不會~教我~


現在直接用一個策略來解釋比較清楚。

引用上一篇文章的策略

週期改5k,交易時間是上午9點到下午1點之間

突破前10根K線高點作多,跌破前10根K線低點放空。

30點停損,50點停利,每天下午1點半平倉。


程式碼如下:一樣別亂用,用了賠錢也別找我算帳!!!

if true then begin
{*******************************************************}
if time > = 0900 and 1300 > = time then begin

if close cross over Highest(high[1],10) then begin
buy ("Buy") next bar at market;
end;
if close cross under Lowest(Low[1],10) then begin
sell ("Sell") next bar at market;
end;

end;
{*******************************************************}
end;

{********************Day End Exit********************}
if marketposition=1 and time = 1330 then
exitlong("ExitB") next bar at market;
if marketposition=-1 and time = 1330 then
exitshort("ExitS") next bar at market;

{********************Stop Loss********************}
if marketposition=1 then begin
exitlong("StopB") next bar at entryprice(0)-30 stop;
exitlong("EarnB") next bar at entryprice(0)+50 Limit;
end;
if marketposition=-1 then begin
exitshort("StopS") next bar at entryprice(0)+30 stop;
exitshort("EarnS") next bar at entryprice(0)-50 Limit;
end;


以上策略在2009.01.08的進場點如下圖





在這一天,一共交易3筆。進場時間分別是0955,1030,1155

現在我要把進場時間延遲10分鐘。

所以策略要改寫一下。改成下面這樣...

vars:BuySignalBar(0),SellSignalBar(0);

if true then begin
{*******************************************************}
if time > = 0900 and 1300 > = time then begin

if close cross over Highest(high[1],10) then begin
BuySignalBar=barnumber;
end;
if barnumber-BuySignalBar=2 then begin
buy ("Buy") next bar at market;
end;

if close cross under Lowest(Low[1],10) then begin
SellSignalBar=barnumber;
end;
if barnumber-SellSignalBar=2 then begin
sell ("Sell") next bar at market;
end;

end;
{*******************************************************}
end;

{********************Day End Exit********************}
if marketposition=1 and time = 1330 then
exitlong("ExitB") next bar at market;
if marketposition=-1 and time = 1330 then
exitshort("ExitS") next bar at market;

{********************Stop Loss********************}
if marketposition=1 then begin
exitlong("StopB") next bar at entryprice(0)-30 stop;
exitlong("EarnB") next bar at entryprice(0)+50 Limit;
end;
if marketposition=-1 then begin
exitshort("StopS") next bar at entryprice(0)+30 stop;
exitshort("EarnS") next bar at entryprice(0)-50 Limit;
end;


利用BuySignalBar和SellSignalBar這兩個變數儲存BarNumber

當進場條件達到時,BuySignalBar或是SellSignalBar紀錄BarNumber

但不下單。

然後用barnumber減去BuySignalBar(或是SellSignalBar)決定

延遲幾根K線進場。

上面策略是barnumber-BuySignalBar=2,延遲兩根K線,也就是10分鐘。

看看這樣在2009.01.08的成交狀況變怎樣





如上圖,本來的第一筆交易進場時間是0955

現在第一筆變成了1005成交了

至於的交易,因為停利時間變得不一樣,所以無法參考了。

但已經確定成交時間已經被延遲了兩根K線了。


個人覺得這延遲進場應該要當作一個策略來看。

突破後Next Bar進場...這樣是一個策略

突破後延遲10分鐘進場...這樣是另一個策略

就算突破點一樣,也不應該當作同一策略。

如同上面的敘述。

當天第一筆交進場被延遲後,出場點一定會改變。

出場點改變了,當天的第二筆交易也會跟著改變。

再來,作一個假設。

如果某天。0900時出現進場訊號,一般來說0905會進場

若是有延遲10分鐘,那進場時間會變成0915

若是,0900突破訊號出現,BuySignalBar紀錄當時的BarNumber。

然後,0905又出現一次突破訊號呢??

BuySignalBar又會紀錄一次BarNumber喔。

所以本來是0900成立,Next Bar進場

因為延遲,變成0910的Next Bar進場

但中途0905進場又條件成立一次

延遲到0915的Next Bar進場...

一個延遲,所有的進場點都會變亂了。

所以這個延遲應該算是一種策略吧...
HEMiDEMi Technorati Del.icio.us MyShare?犖?貊惜 Yahoo