自動交易中心_使用FilledRecordPrice(idx)語法 會出現問題

  •   188 
  • 最後發表   expe  2023 六月 26
expe 發文於   2023/06/21

IF FilledRecordCount <> 0 then begin

if Position >=1 and Position < 5 and (C >= FilledAvgPrice + 5) and CurrentDate=Date then begin

 

Alert("進場時間差",TimeDiff(CurrentTime,B_RecTime,"M")," RecTime=",B_RecTime);

 

For B_i=1 To 4

Begin

RTime[B_i] = RTime[B_i+1];

RDate[B_i] = RDate[B_i+1];

End;

RTime[5] = CurrentTime;

RDate[5] = CurrentDate;

B_RecTime = MaxList(RTime[0],RTime[1],RTime[2],RTime[3],RTime[4],RTime[5]);

Alert("打加碼TimeDiff=",TimeDiff(RTime[7],B_RecTime,"M"),"RecTime=",B_RecTime,"RDate[5]",RDate[5]," RT0=",RTime[0]," RT1=",RTime[1]," RT2=",RTime[2]," RT3=",RTime[3]);

Alert(" RT4=",RTime[4]," RT5=",RTime[5]," RT6=",RTime[6]," RT7=",RTime[7]);

Print("打加碼TimeDiff=",TimeDiff(RTime[7],B_RecTime,"M"),"RecTime=",B_RecTime,"RDate[5]",RDate[5]," RT0=",RTime[0]," RT1=",RTime[1]," RT2=",RTime[2]," RT3=",RTime[3]," RT4=",RTime[4]," RT5=",RTime[5]," RT6=",RTime[6]," RT7=",RTime[7]);

SetPosition(Position + 1,Market,Label:="加碼買進1口"); { 買進1張 }

j = j+1;

 

 

RTime[0] = FilledRecordTime(FilledRecordCount); // 更新記錄_最後加碼的時間

RPrice[j] = FilledRecordPrice(FilledRecordCount);

 

end;

End;

 

上述代碼只要將RPrice[j] = FilledRecordPrice(FilledRecordCount);  給移除,程式即不會跳出錯誤

為什麼RTime[0] = FilledRecordTime(FilledRecordCount); 這樣的寫法可以,而FilledRecordPrice(FilledRecordCount);卻會有錯誤發生呢

 

請幫忙協助,感謝。

附加文件

排序方式: 標準 | 最新
expe 發文於   2023/06/22

想問 若我想在程式做多(反之放空)的時候,記錄下做多(反之放空)的價位(停損平倉的價格不做紀錄)

 

而當收盤價Close大於最近一筆買進價位20點時(以台指期來說),來做加碼買進的動作,並記錄下加碼買進的價位

 

這樣在語法上該如何來撰寫?

XQ小幫手 發文於   2023/06/26

 Hello expe,

 

您這邊的錯誤訊息應該是指 RPrice[j] 超出陣列範圍。

就上面的腳本看來,因為j沒有重置,所以隨著腳本每次執行j就會越來越大,那麼自然就會超出陣列範圍。

您可以在迴圈外將j重置,或是把 RPrice 改為固定位置應該就不會發生錯誤。

 

至於記錄價位的話,則是看您想要紀錄的是當下觸發的價格,還是實際成交的價格。

如果是要紀錄當下觸發的價格的話,就是用變數紀錄條件符合時的價格。

若要紀錄實際成交的價格,可以參考 查詢交易紀錄的交易函數,即可取得對應交易的價格。

舉例來說,您要紀錄作多的價位的話,可以用 FilledRecordBS、FilledRecordQty 搭配 Filled 來判斷是否為多方進場。

需注意若是逐筆洗價的話,變數要使用 intrabarpersist 來宣告。

發表回覆
Close