我希望在開倉價格開倉之后,假設價格為2000,朝著開倉方向,每隔60點就記錄一次,假設做多,漲了180點,就是3,240點就是4,做空,跌180,就是3,跌240點就是4,這個該如何寫,謝謝
?
以雙均線策略為例,您的策略代碼如下:
inputs: Price( Close ), FastLength( 9 ), SlowLength( 18 ) ;
variables: var0( 0 ), var1( 0 ) ;
variables: recalcpersist flag(0), recalcpersist valueh(0), recalcpersist valuel(0);
{這里新建了三個變量,使用了recalcpersist聲明,也就是這3個變量每次計算的值都會被保存;若沒有加這個關鍵字的聲明,那么這3個變量的計算值只會在當根bar收盤時的計算值才會被保存}
once begin
flag=0;
valueh=0;
valuel=0;
end;
recalclastbarafter(10);
{這里使用了關鍵字recalclastbarafter,當信號當前的時間超過信號最近一次計算的時間10秒時,信號執行重新計算一次,這種計算可以取關鍵字的值及函數的計算,但是不能執行委托單的操作,也就是即使條件滿足也不能發送委托單;只能等到當根bar收盤時時條件滿足才會執行委托單的操作}
condition1=getappinfo(aicalcreason)=3;
{信號的計算方式有很多,condition1為true表示當前的計算是基于recalclastbarafter的計算}
if condition1=false then begin
var0 = AverageFC( Price, FastLength ) ;
var1 = AverageFC( Price, SlowLength ) ;
condition2 = CurrentBar > 1 and var0 crosses above var1 ;
if condition2 then? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
Buy ( "MA2CrossLE" ) next bar at market ;
condition2 = CurrentBar > 1 and var0 crosses under var1 ;
if condition2 then? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
Sell Short ( "MA2CrossSE" ) next bar at market ;
end;
{以上基于condition1=false的代碼段,您可以將主要的代碼放在這里面,這段代碼會基于當根bar收盤時進行計算,這樣可以減少信號不必要的計算量}
if marketposition=0 then begin
flag=0;
valueh=0;
valuel=0;
end
else
if marketposition=1 then begin
valuel=0;
if high>valueh then
valueh=high;
if valueh<>entryprice then
flag=intportion((valueh-entryprice)/60);
{當多頭進場之后,利用變量valueh始終保存進場之后的最高價,然后flag的計算等于(valueh與進場價的差)/60;當然您也可以直接使用每次計算時的最新價賦值給valueh,這個地方需要看您的策略了}
end
else if marketposition=-1 then begin
valueh=0;
if low<valuel then
valuel=low;
if valuel<>entryprice then
flag=intportion((entryprice-valuel)/60);
end;
注意事項:
1.您的策略可以在非bar內模式下,但是可能會計算不會及時
2.您的策略可以使用兩個信號,一個信號用于發送委托單(非bar內),另一個信號用于計算flag變量(開bar內)
3.通過以上的方式,您可以在非bar內模式下及時進行計算flag,也就是及時進行記錄盈利的點數。
?
牛的,不過信息量有點大,我最后其實只需要用到flag里的值,我對第一部分不是很理解,容我細細學習之后再向您請教
?
?