如圖 超過09:00:抓到的是昨天開盤價
因是以今日開盤價做計算,如何在抓到今日開盤價後才執行運算?
交易程式碼如下
在開盤價出現之後做運算,以開盤價為基點,計算近日ATR價差的上下價位作為買賣點
// 買入條件
if isfirstcall("date") then
begin
Print("現在1",CurrentTime," ATR上1:", _currentTime1, " ATR下2:", _currentTime2, " C1:", condition1, " C2:", condition2 ,"開盤",OPEND(0));
Print("日期1",DAte,"成本",FilledAvgPrice*F1006,"買入價",value7,"賣出價",value8,"ATR價%",(value1/close)*100);
If filledAtBroker<=2 and CurrentTime >= 090000 // 條件1: 庫存數量 <=2 且 交易時段內 (例如9點後)
And Position = 0 // 條件2: 目前空手 (Position 為使用者定義的倉位變數或XQ內建的 MarketPosition)
// And_currentTime1 > _currentTime2
// 條件3: 先觸發ATR上軌(_currentTime1較小),後觸發ATR下軌(_currentTime2較大),表示價格先上後拉回
And (( close cross Over value7) or getField("收盤價", "Tick")<= addSpread(GetField("跌停價", "D"),1))
//價格回檔穿越ATR下軌
and (value1 / Close) * 100 >= 2 // 條件4: ATR波動幅度需佔收盤價2%以上 (避免在極低波動時交易)
// And condition2 // 條件5: 當前收盤價已低於ATR下軌 (觸發拉回買點)
And filterPasses // 條件6: 並且通過高點過濾 (不是買在近期相對高點)
And slopeFilterPasses // 條件7: 並且通過趨勢斜率過濾 (處於上升趨勢或未啟用過濾)
// And GetField("外盤量") > GetField("內盤量") // 簡單判斷:外盤量大於內盤量
And close <= _close //價位以下
Then
Begin
SetPosition(minList(Position+1,2), getField("收盤價", "Tick"),label:= "訊號觸發買進(斜率及高點過濾後)");
// 建立1單位多單,進場價為value7 (ATR下軌價)
BIT=Getfield("時間","Tick"); //記錄當下委託時間
if position > Position[1] then alert("日期",DAte,"成本",FilledAvgPrice*F1006,"買入價",value7,"賣出價",value8,"ATR價%",(value1/close)*100,"opend",openD(0));
End;
end;
7 評論