在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進場...
一個延遲,所有的進場點都會變亂了。
所以這個延遲應該算是一種策略吧...