自動交易中心_腳本在洗價之前,就已經改變了有設定IntraBarPersist的變數了

  •   248 
  • 最後發表   expe  2024 四月 29
expe 發文於   2024/04/29

想請教該如何避免腳本在開始洗價之前,就已經將設定的變數給改變了的問題,以至於後續有符合條件要做進場時,不能如預期中的那樣做觸發進場的動作。

 

我撰寫的自動交易中心腳本如下,並在腳本設定的介面設定好SS1、SS2的值進行測試(附件有上傳CSV檔案)

 

Input:SS1(0,"自訂壓力價上緣"),SS2(0,"自訂壓力價下緣"),BB1(0,"自訂支撐價上緣"),BB2(0,"自訂支撐價下緣");

 

Variables:IntraBarPersist MKP(0),IntraBarPersist SUpper(0),IntraBarPersist SLower(0),IntraBarPersist BUpper(0),IntraBarPersist BLower(0);

Variables:Con_Tout(False),ConT(False),conB1(False),conS1(False),conB2(False),conS2(False);

Array:IntraBarPersist RTime[10](0);

 

//*****************************************************

 

if Time>=084500 and Time<=134500 then ConT=True else ConT=False;

 

value6 = GetSymbolField("FITX*1.TF","最高價","D");

value7 = GetSymbolField("FITX*1.TF","最低價","D");

value8 = GetSymbolField("FITX*1.TF","收盤價","D");

 

ConS2 = value8 > SS2 and value8 < SS1 and value6 < SS1;

 

conB2 = value8 < BB1 and value8 > BB2 and value7 > BB2;

 

Print("Line 19_MKP=",MKP);

//======================================條件觸發進出場區======================================

if conS2[0]=True and Filled=0 and Position=0 and MKP=0 and Con_Tout=False then begin

MKP = -1;

Print("Line 23");

SetPosition(-1,Market,Label:="1st_空單"); { 1st_空 }

Print("Line 25");

end;

 

 

//===================DeBug區===================

if GetInfo("IsRealTime")=1 and CurrentTime>=TimeAdd(RTime[7],"S",5) then begin

Print("SS1=",SS1," SS2=",SS2," BB1=",BB1," BB2=",BB2," V8=",Value8," V7=",Value7," V6=",Value6);

Print(" F=",Filled," P=",Position," MKP=",MKP);

RTime[7]=CurrentTime;

end;

附加文件

排序方式: 標準 | 最新
虎科大許教授 發文於   2024/04/29

開始即時洗價之前,變數就被改變,應該是跑歷史K棒時,變數被改變了。可以在腳本開頭加上下列指令,讓即時交易時段才執行腳本。不過,要注意的是,若你的腳本需要跑歷史K棒做其他運算,這樣就不可行了。要改成在第一個Tick進來時,重設變數為預設值。

if getinfo("IsRealTime")=0 then return;

  • 按讚來自於
  • UHJU0231
expe 發文於   2024/04/29

我有試著在腳本加上 Once (GetField("Volume","Tick")<>0 and  Getinfo("IsRealTime")=1) MKP=0,結果~成功有可以在交易腳本開始洗價之後 將變數MKP給設定為0了

 

虎科大許教授 發文於   2024/04/29

看起來你應該是用分鐘頻率交易台指期。

(1)若你使用Once結構,在跑歷史K棒的時候就已經執行一次,也就是說,在即時價格進來時,變數還是其他K棒留下來的數值,所以沒用。

(2)若你使用分鐘頻率的資料,則使用if date<>date[1] then MKP=0; 或if Time=084500 then MKP=0;

(3)若你使用日頻率資料,則程式中的Time要改成CurrentTime。重設變數就用if CurrentTime>=084500 and CurrentTime<=085000 then MKP=0;

  • 按讚來自於
  • UHJU0231
expe 發文於   2024/04/29

謝謝教授協助觀念釐清以及解惑,很感謝、感恩

發表回覆
Close