大概理解您的意思,不過還是想以一個例子來理清一下思路:
1、假設周期是15分鐘周期,M代表的是7分鐘,d代表的是3分鐘,第一根bar的收盤價是9:15分鐘。
2、基于上述假設,建倉清倉周期時間點分別是9:22,9:29,依此類推,每次加7分鐘是吧。
3、在9:25分鐘的時候,以市價買入一手建倉。
4、那么請問,您的策略是否涉及加倉,也就是當前有多頭持倉的情況下,下一個多頭建倉的時間點是9:32分鐘。
5、在9:25分鐘的時候買入建倉了,那么在9:29分鐘之前,若價格沒有達到損失或者盈利百分比就會在9:29進行市價平倉,是吧。
6、若9:29平倉了,那么會在9:32再次多頭進場是吧,然后再循環(huán)平倉建倉進行下去是吧
?
大概理解您的意思,不過還是想以一個例子來理清一下思路:
1、假設周期是15分鐘周期,M代表的是7分鐘,d代表的是3分鐘,第一根bar的收盤價是9:15分鐘。
2、基于上述假設,建倉清倉周期時間點分別是9:22,9:29,依此類推,每次加7分鐘是吧。
3、在9:25分鐘的時候,以市價買入一手建倉。
4、那么請問,您的策略是否涉及加倉,也就是當前有多頭持倉的情況下,下一個多頭建倉的時間點是9:32分鐘。
5、在9:25分鐘的時候買入建倉了,那么在9:29分鐘之前,若價格沒有達到損失或者盈利百分比就會在9:29進行市價平倉,是吧。
6、若9:29平倉了,那么會在9:32再次多頭進場是吧,然后再循環(huán)平倉建倉進行下去是吧
?
感謝這么快的回應!
不涉及加倉,競價階段不參與,其他描述無誤。
另外,補充一個需求點:第一次開倉有2種情況,除了上面說的第一根bar之外,還允許指定一個絕對時間(日期時分秒),這樣我可以提前計劃從哪個時間點開始真正運行策略。
謝謝Alex!
?
[IntrabarOrderGeneration=true]
input: time_begin(91500), time_M(700), time_d(300), ploss(0.01), pprofit(0.01);
var: intrabarpersist time_define0(0), intrabarpersist time_define1(0), intrabarpersist minus_seconds(0), intrabarpersist time_b(time_begin), intrabarpersist var_begin(0), intrabarpersist var_end(0);
var: intrabarpersist time_end(0), intrabarpersist date0(0), intrabarpersist date1(0);
value1=getappinfo(airealtimecalc);? ?//判斷是否實時行情
once begin
? ? ? ? once cleardebug;
? ? ? ? minus_seconds=timetoseconds(time_m)-timetoseconds(time_d);
? ? ? ? time_end=secondstotime_s(timetoseconds(230000)-timetoseconds(time_m)-timetoseconds(time_d)-300);
end;
time_define0=time_define1;??
{time_define0存儲前一筆tick的時間,而time_define1存儲當筆tick的時間;同時下面的date0和date1也是同樣的原理}
date0=date1;
date1=date;
if value1=0 then
? ? ? ? time_define1=time_s
else if value1=1 then
? ? ? ? time_define1=q_time_s;
{以上4行代碼,用于將回測的bar內時間與實行行情的時間連接起來,都存儲在變量time_define1中}
if date1<>date0 then begin
? ? ? ? var_begin=secondstotime_s(timetoseconds(time_begin)+timetoseconds(time_d));
? ? ? ? var_end=secondstotime_s(timetoseconds(var_begin)+minus_seconds);
end;
if marketposition=0 and time_define0<=var_begin and time_define1>=var_begin and time_define1<time_end then begin
? ? ? ? buy next bar at market;
? ? ? ? var_end=secondstotime_s(timetoseconds(time_define1)+minus_seconds);
end;
if marketposition=1 and (close>=entryprice*(1+pprofit) or close<=entryprice*(1-ploss) or (time_define0<=var_end and time_define1>=var_end)) then begin
? ? ? ? sell next bar at market;
? ? ? ? var_begin=secondstotime_s(timetoseconds(time_define1)+timetoseconds(time_d));
end;
注意事項:
第一、這個代碼可以用于夜盤品種,但是夜盤結束時間不能在凌晨;若需要適合所有的夜盤,需要做簡單的處理。
第二、見附圖,需要訪問bar內時間,這樣才可以用于回測,否則只能用于實時行情中。
第三、在信號設置中允許單一bar多筆進出場。
第四、因為您的策略基本上已經(jīng)不屬于常規(guī)利用bar與bar之間的關系了,而是直接使用時間間隔進行處理的范疇,所以挺麻煩。
第五、以上代碼一次沒有辦法教會您,您可能需要一點點學習,不懂多問。
?
[IntrabarOrderGeneration=true]
input: time_begin(91500), time_M(700), time_d(300), ploss(0.01), pprofit(0.01);
var: intrabarpersist time_define0(0), intrabarpersist time_define1(0), intrabarpersist minus_seconds(0), intrabarpersist time_b(time_begin), intrabarpersist var_begin(0), intrabarpersist var_end(0);
var: intrabarpersist time_end(0), intrabarpersist date0(0), intrabarpersist date1(0);
value1=getappinfo(airealtimecalc);? ?//判斷是否實時行情
once begin
? ? ? ? once cleardebug;
? ? ? ? minus_seconds=timetoseconds(time_m)-timetoseconds(time_d);
? ? ? ? time_end=secondstotime_s(timetoseconds(230000)-timetoseconds(time_m)-timetoseconds(time_d)-300);
end;
time_define0=time_define1;??
{time_define0存儲前一筆tick的時間,而time_define1存儲當筆tick的時間;同時下面的date0和date1也是同樣的原理}
date0=date1;
date1=date;
if value1=0 then
? ? ? ? time_define1=time_s
else if value1=1 then
? ? ? ? time_define1=q_time_s;
{以上4行代碼,用于將回測的bar內時間與實行行情的時間連接起來,都存儲在變量time_define1中}
if date1<>date0 then begin
? ? ? ? var_begin=secondstotime_s(timetoseconds(time_begin)+timetoseconds(time_d));
? ? ? ? var_end=secondstotime_s(timetoseconds(var_begin)+minus_seconds);
end;
if marketposition=0 and time_define0<=var_begin and time_define1>=var_begin and time_define1<time_end then begin
? ? ? ? buy next bar at market;
? ? ? ? var_end=secondstotime_s(timetoseconds(time_define1)+minus_seconds);
end;
if marketposition=1 and (close>=entryprice*(1+pprofit) or close<=entryprice*(1-ploss) or (time_define0<=var_end and time_define1>=var_end)) then begin
? ? ? ? sell next bar at market;
? ? ? ? var_begin=secondstotime_s(timetoseconds(time_define1)+timetoseconds(time_d));
end;
注意事項:
第一、這個代碼可以用于夜盤品種,但是夜盤結束時間不能在凌晨;若需要適合所有的夜盤,需要做簡單的處理。
第二、見附圖,需要訪問bar內時間,這樣才可以用于回測,否則只能用于實時行情中。
第三、在信號設置中允許單一bar多筆進出場。
第四、因為您的策略基本上已經(jīng)不屬于常規(guī)利用bar與bar之間的關系了,而是直接使用時間間隔進行處理的范疇,所以挺麻煩。
第五、以上代碼一次沒有辦法教會您,您可能需要一點點學習,不懂多問。