有關內外盤比及大戶買賣力

  •   466 
  • 最後發表   hello10282000  2024 十二月 01
hello10282000 發文於   2024/12/01

詢問一個於交易腳本中撰寫內外盤比及大戶買賣力為條件去自動執行交易的方法。

在我寫好之後編譯上是可行的,但於回測時卻出現問題,

1101.TW(台泥) 錯誤 執行時發生錯誤[(1402)1分鐘模擬逐筆洗價不支援取分鐘頻率,或是由分鐘頻率組成之「外盤量」欄位資料]

想了解問題出在哪邊,感謝各位大大了。
程式碼如下

value3 = getField("Close","D")[1];
value4 = value3*1.03;
value5 = GetField("Open", "D");
value6 = getField("Volume","15")[1];
value7 = value1*1.06;
value8 = value3*1.1;

//Value7 = Value6 > 2000;
//if getfield("外盤量", "1") <> 0 then value1 = 100 * getfield("內盤量", "1") / getfield("外盤量", "1") else value1 = 0;
//內外盤比
if barFreq<>"M"and barInterval<>1 then raiseRunTimeError("請用1分鐘線");
// 如果要用不同時間周期 改變 barInterval 數值
setBackBar(1*270);
value21 = getfield("外盤量");
value22 = getfield("內盤量");
Value23 = value21/(Value21+value22)*100;
var:bccv(0);
if time=090000 then bccv=0 else bccv=bccv+value23;
//大戶買賣力
if barFreq<>"M"and barInterval<>1 then raiseRunTimeError("請用1分鐘線");
// 如果要用不同時間周期 改變 barInterval 數值
setBackBar(1*270);
value11 = getField("買進特大單金額");
value12 = getField("賣出特大單金額");
value13 = getField("買進大單金額");
value14 = getField("賣出大單金額");
value15 =value11+value13-value12-value14;
var:accv(0);
if time=090000 then accv=0 else accv=accv+value15;
//以金額計算交易數量

input: ordersize_w(100, "每筆交易金額(萬)");
//設定變數
    var: order_price(0);        { 預期委託價格 }
    var: order_qty(0);          { 換算後數量 }

{
    多單移動停利(點)
    設定停損點(如果不設定的話, 請把loss_point設定成0), 以及停利點, 跟回跌點數
    價格下跌到停損時出場
    價格上漲到停利點後啟動移動停利, 如果價格繼續上漲, 則繼續持有, 如果價格回檔超過回跌點數時, 則停利出場
}



input: profit_percent(2, "停利(%)");
input: profit_drawback_percent(0.5, "停利回跌(%)");
input: loss_percent(1.5, "停損(%)");

{ 
    以成交價為基礎, 設定固定停損以及移動停利
}
if profit_percent = 0 then raiseruntimeerror("請設定停利(點)");
if profit_drawback_percent = 0 then raiseruntimeerror("請設定停利回跌(點)");
if profit_drawback_percent > profit_percent then raiseruntimeerror("停利(點)需大於停利回跌(點)");
//進場條件

if Position = 0 and Filled = 0
   and date <> date[1]
   and CurrentTime = 090000 
   and bccv > 60
   and close > value4 
   and close > value5
   and value6 > 2000 
   and accv > 100000000
   and value5 >=  value4 
   and close < value7
   then begin


    order_price = AddSpread(value8, 1); 
    order_qty = (ordersize_w * 10000) / (order_price * 1000);
                                { 計算出來的數值如果不是整數, 傳入SetPosition時會自動捨去小數位數 }
                                { 例如 SetPosition(2.5) 執行時會被轉成 SetPosition(2) }

    SetPosition(order_qty, order_price);        { 以指定價格買入指定數量 }
end;

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

請取消逐筆洗價的勾選。回測時,已是用1分鐘在洗價,不可再逐筆洗價。

hello10282000 發文於   2024/12/01

教授好 
我已將回測時的逐筆洗價不勾選,執行後看結果是錯誤,錯誤資訊如下:

1101.TW(台泥) 錯誤 執行時發生錯誤[(1303)嘗試除以0]

虎科大許教授 發文於   2024/12/01

Value23 = IFF(Value21+value22>0,value21/(Value21+value22)*100,0);

hello10282000 發文於   2024/12/01

感謝許教授
看您這樣回復,我知道我的問題是什麼了,分母不能為0,一開始分母出現0,所以就出現錯誤。
真心感謝。

發表回覆
Close