腳本何處有誤?

  •   116 
  • 最後發表   XQYi  2023 十二月 21
XQYi 發文於   2023/12/05

1.腳本何處有誤,為何剛買進又馬上賣出?,且價格都是一樣的?

2.策略執行頻率該如何正確選擇?

value1=getField("均價");

value2=(close+open)/2;

value3=average(value2,5);

 

if position=0 and filled=0 and value3 cross over value1  then begin

setposition(1,close,label:="買1");//1分K均價向上穿越

value4 = GetField("Close", "Tick");

//print("V4=",currentTimeMS,value4);

end;

if position=1 and filled=1 and close >= value4*1.005  then setposition(0,close,label:="賣1");

 

if position=0 and filled=0 and value3 cross under value1 then begin

 setposition(-1,close,label:="賣2");

 value5 = GetField("Close", "Tick");

 //print("V5=",currentTimeMS,Value5);

 end;

if position=-1 and filled=-1 and close <= value5*0.995  then  setposition(0,close,label:="買2");

 

XQ小幫手 發文於   2023/12/21

Hello xqyi,

 

1.

小幫手認為應該是因為逐筆洗價導致變數沒有紀錄在洗價間變化的值而導致。

細節可以參考 intrabarpersist 的說明。

如果您將 value4 print出來的話 (如下範例),value4 在出場的那次運算中應該會是0,或是之前運算 (包含資料讀取筆數) 中該根Bar最後一筆Tick運算且有符合進場條件時的value4值。

if position=1 and filled=1 and close >= value4*1.005  then begin

    setposition(0,close,label:="賣1");

    print("V4=",value4);

    end;

 

若要變數保存在逐筆洗價時的值,那麼需要使用 intrabarpersist 來宣告,內建變數無法保存同根Bar間洗價運算的值。

 

2.

視您的需求來決定要使用的頻率。

value2=(close+open)/2; => 這邊的 open 會是當天的開盤價,還是1分鐘的開盤價。

value3=average(value2,5); => 這邊的平均,是近5天的value2平均,還是近5分鐘的 alue2平均。

若是前者,那麼就比較適合用日頻率,後者的話則會是1分鐘頻率。

隨著需求不同,也有可能要使用跨頻率語法來處理。

發表回覆
Close