本人使用精英版MC,使用PT插入官網的期貨網格策略MC_Grid Trading,而該策略因關鍵字tl_setend_bnde 趨勢畫線語句在精英版有無圖表交易錯誤提示,刪除了含該關鍵字的所有語句。如圖:
刪除后的網格策略在商品DCE.i/DCEj/dce.jm/SHFE.hc/SHFE.ni/SHFE.rb/SHFE.ru回測績效中出現大量的低盈利或0盈利的情況,是不是該策略代碼中Leg表示的網格間距對以上商品本身的合約價格數值精度不同造成跳數方面的問題?該怎樣去改寫。請管理員幫忙解決!!謝謝!!數據圖如下:
?
您的問題主要是行情的波動太小,而不是趨勢線語句的刪除。
第一、網格策略中的參數length使用的是200根bar,期貨網格策略是將最近length根bar的間距8等分,而leg的距離就是相鄰兩根網格線之間的間距,leg計算的是跳數,和具體的價格值沒有關系。
第二、您使用的是1分鐘周期,這樣可能導致leg的值很小,特別是在行情波動不太的情況下,所以您可能調整一下您的周期或者對leg的值進行一下限制,設置leg有一個最小值和一個最大值以此限制leg的范圍;關于leg的限制,您可以參考一下官網上的股票網格策略的限制。
?
input: pricevalue(close), length(200), flag_bar(60), buyp(10), sloss(2), lots(1), Minpip(5), Maxpip(25);
var: flag1(0), flag2(-flag_bar), mp(0), leg(0),mid(0), b1(0), b2(0), b3(0), b4(0), s1(0), s2(0), s3(0), s4(0), zhs_b(0), zhs_s(0), cur_bar(1);
array: arr_num[8](0);
?
mp=marketposition;
if getappinfo(aistrategyauto)=1 then
if not lastbaronchart_s then
cur_bar=currentbar+1
else once cur_bar=currentbar;
?
if (postradeexitname(1,postradecount(1)-1)="zhs_s" or postradeexitname(1,postradecount(1)-1)="zhs_b") and mp[1]<>0 and mp=0 then
flag2=currentbar;
if mp=0 and currentbar>=cur_bar then
flag1=flag1+1
else flag1=0;
?
?
if cur_bar=currentbar or (mp<>mp[1] and mp=0) or flag1=flag_bar or flag2+flag_bar=currentbar then begin
value11=highest(pricevalue,length);
value22=lowest(pricevalue,length);
value33=intportion(((value11-value22)/(minmove*1 point))/8);
?
if value33<Minpip then
leg=Minpip
else if value33>Maxpip then
leg=Maxpip
else leg=value33;
// mid=(value11+value22)/2;
mid=close;
b1=mid-1*leg*(minmove*1 point);
b2=mid-2*leg*(minmove*1 point);
b3=mid-3*leg*(minmove*1 point);
b4=mid-4*leg*(minmove*1 point);
s1=mid+1*leg*(minmove*1 point);
s2=mid+2*leg*(minmove*1 point);
s3=mid+3*leg*(minmove*1 point);
s4=mid+4*leg*(minmove*1 point);
zhs_s=b4-sloss*leg*(minmove*1 point);
zhs_b=s4+sloss*leg*(minmove*1 point);
arr_num[0]=TL_new_bn(currentbar,mid,currentbar,mid);
arr_num[1]=tl_new_bn(currentbar,b1,currentbar,b1);
arr_num[2]=tl_new_bn(currentbar,b2,currentbar,b2);
arr_num[3]=tl_new_bn(currentbar,b3,currentbar,b3);
arr_num[4]=tl_new_bn(currentbar,b4,currentbar,b4);
arr_num[5]=tl_new_bn(currentbar,s1,currentbar,s1);
arr_num[6]=tl_new_bn(currentbar,s2,currentbar,s2);
arr_num[7]=tl_new_bn(currentbar,s3,currentbar,s3);
arr_num[8]=tl_new_bn(currentbar,s4,currentbar,s4);
tl_setcolor(arr_num[0],blue);
flag1=0;
end;
?
?
if currentbar>=cur_bar and flag2+flag_bar<=currentbar then begin
if close>b1-minmove*4 point then
buy("b1") lots shares next bar at b1 limit;
if close>b2-minmove*4 point then
buy("b2") lots shares next bar at b2 limit;
if close>b3-minmove*4 point then
buy("b3") lots shares next bar at b3 limit;
if close>b4-minmove*4 point then
buy("b4") lots shares next bar at b4 limit;
?
if close<s1+minmove*4 point then
sellshort("s1") lots shares next bar at s1 limit;
if close<s2+minmove*4 point then
sellshort("s2") lots shares next bar at s2 limit;
if close<s3+minmove*4 point then
sellshort("s3") lots shares next bar at s3 limit;
if close<s4+minmove*4 point then
sellshort("s4") lots shares next bar at s4 limit;
setstopcontract;
setprofittarget(lots*bigpointvalue*minmove*leg point);
sell("zhs_s") next bar at zhs_s stop;
buytocover("zhs_b") next bar at zhs_b stop;
tl_setend_bn(arr_num[0],currentbar,mid);
tl_setend_bn(arr_num[1],currentbar,b1);
tl_setend_bn(arr_num[2],currentbar,b2);
tl_setend_bn(arr_num[3],currentbar,b3);
tl_setend_bn(arr_num[4],currentbar,b4);
tl_setend_bn(arr_num[5],currentbar,s1);
tl_setend_bn(arr_num[6],currentbar,s2);
tl_setend_bn(arr_num[7],currentbar,s3);
tl_setend_bn(arr_num[8],currentbar,s4);
end;
以上紅色標記的部分是在MC官網期貨網格策略的基礎上增加的部分,用于限制網格間距的范圍。