全部 智大领峰 TBQuant功能 TBL语言 TB开户 问答专区 高手圈 其他
已解决
如何在程序中修改工式应用里参数的值?
freenby 分享到
2023-05-17 11:11

代码如下?我在程序中如何用指令修改KC的值?

Params

Integer zj(400000); //资金

Integer fx(3000); //风险金

//测试时K线走多少根Integer K_NUM(1);          

Integer MAX_czbl(4);      //下单时允许最大误差比例

Numeric kc(0);      //允许下单

Numeric pc(0);      //允许平仓

Vars

Series<Integer> JZ1; //价值1

Series<Integer> JZ2; //价值2

Series<Integer> X; //最小公倍数

Series<Integer> lldlA; //理论单量1

Series<Integer> lldlB; //理论单量2

Series<Integer> jsdlA1; //近似单量1

Series<Integer> jsdlA2; //近似单量2

Series<Integer> jsdlA3; //近似单量3

Series<Integer> jsdlB1; //近似单量B1

Series<Integer> jsdlB2; //近似单量B2

Series<Integer> jsdlB3; //近似单量B3

Series<Integer> quzhi1; //单量取值1

Series<Integer> quzhi2; //单量取值2

Series<Numeric> WC1; //误差1

Series<Numeric> WC2;

Series<Numeric> WC3;

Series<Numeric> WC4;

Series<Numeric> WC5;

Series<Numeric> WC6;

Series<Numeric> WC7;

Series<Numeric> WC8;

Series<Numeric> WC9;

Series<Numeric> hycz; //合约差值

Series<Numeric> hyzz; //合约总值

Series<Numeric> bs; //最小倍数小于资金量时,下单时需要扩大的倍数

Series<Numeric> kcWC; //用于判断误差太大时,禁止开仓

Series<Numeric> zxWC; //最小误差

Events

OnBar(ArrayRef<Integer> indexs)

{

JZ1 = data0.c*100;

JZ2 = data1.c*100;

X = zxgbs_h(JZ1,JZ2);

lldlA = x/jz1/2;

lldlB = x/jz2/2;

If(x > zj)

{

jsdlA1 = intpart(lldlA*ZJ/X); //近似单量A

jsdlA2 = jsdla1-1;

jsdlA3 = jsdla1+1;

jsdlB1 = intpart(lldlB*ZJ/X);    //近似单量B

jsdlB2 = jsdlB1-1;

jsdlB3 = jsdlB1+1;

WC1=Abs((jsdla1*jz1)/(jsdlb1*jz2)-1);      //组合1误差

WC2=Abs((jsdla1*jz1)/(jsdlb2*jz2)-1);

WC3=Abs((jsdla1*jz1)/(jsdlb3*jz2)-1);

WC4=Abs((jsdla2*jz1)/(jsdlb1*jz2)-1);

WC5=Abs((jsdla2*jz1)/(jsdlb2*jz2)-1);

WC6=Abs((jsdla2*jz1)/(jsdlb3*jz2)-1);

WC7=Abs((jsdla3*jz1)/(jsdlb1*jz2)-1);

WC8=Abs((jsdla3*jz1)/(jsdlb2*jz2)-1);

WC9=Abs((jsdla3*jz1)/(jsdlb3*jz2)-1);

zxWC = Min(wc1,Min(wc2,Min(wc3,Min(wc4,Min(wc5,Min(wc6,Min(wc7,Min(wc8,wc9)))))))); //最小误差

If (wc1 == zxwc) {quzhi1 = jsdla1; quzhi2 = jsdlB1;}

Else If (WC2 == zxwc) {quzhi1 = jsdla1; quzhi2 = jsdlB2;}

Else If (wc3 == zxwc) {quzhi1 = jsdla1; quzhi2 = jsdlB3;}

Else If (wc4 == zxwc) {quzhi1 = jsdla2; quzhi2 = jsdlB1;}

Else If (wc5 == zxwc) {quzhi1 = jsdla2; quzhi2 = jsdlB2;}

Else If (wc6 == zxwc) {quzhi1 = jsdla2; quzhi2 = jsdlB3;}

Else If (wc7 == zxwc) {quzhi1 = jsdla3; quzhi2 = jsdlB1;}

Else If (wc8 == zxwc) {quzhi1 = jsdla3; quzhi2 = jsdlB2;}

Else If (wc9 == zxwc) {quzhi1 = jsdla3; quzhi2 = jsdlB3;}

hycz = abs(quzhi2*jz2 - quzhi1*jz1);

}

else

{

bs=zj/x; //最小公倍数小于资金量时,扩大倍数

quzhi1 =intpart(bs*lldlA); // intpart(lldlA*ZJ/X)

quzhi2 =intpart(bs*lldlB); //  intpart(lldlB*ZJ/X)

hycz = abs(quzhi2*jz2 - quzhi1*jz1);

}

hyzz = quzhi2*jz2 + quzhi1*jz1;

kcWC = hycz/(hyzz/2)*100; //当差值过大时不开仓

If(hycz <= fx  and MarketPosition ==0 and  kcWC<=MAX_czbl and kc<>0) // and hyzz<zj

{

Buy(intpart(quzhi1[1]),JZ1/100*1.05); //做多

data1.Buy(intpart(data0.quzhi2[1]),data0.JZ2/100*1.05); //做多

//SellShort(quzhi1,JZ1/100*0.98); //做空

    }

//kc=0;

If(MarketPosition<>0 and  pc<>0) //BarsSinceEntry>=K_NUM and

{

            Sell(0,JZ1/100*0.95);

data1.Sell(0,data0.JZ2/100*0.95);

//BuyToCover(0,0);

           }

           

       

       

//Range[1:1]

//{

// If(data0.hycz <= fx and MarketPosition ==0  and data0.kcWC<=MAX_czbl and kc<>0) // and data0.hyzz<zj

//   Buy(intpart(data0.quzhi2[1]/3),data0.JZ2/100*1.05); //做多

  //  SellShort(data0.quzhi2,data0.JZ2/100*0.98); //做空

// If(MarketPosition<>0 and BarsSinceEntry>=K_NUM and pc<>0)

//  Sell(0,data0.JZ2/100*0.95); //平多

  //  BuyToCover(0,0); //平空

//}

Commentary(\"价值1:\"+Text(JZ1));

Commentary(\"价值2:\"+Text(JZ2));

Commentary(\"最小公倍数:\"+Text(X));

//Commentary(\"理论单量1:\"+Text(lldlA));

//Commentary(\"理论单量2:\"+Text(lldlB));

//Commentary(\"近似单量A1:\"+Text(jsdlA1));

//Commentary(\"近似单量B1:\"+Text(jsdlB1));

Commentary(\"取值1:\"+Text(quzhi1));

Commentary(\"取值2:\"+Text(quzhi2));

Commentary(\"合约价值1:\"+Text(quzhi1*jz1));

Commentary(\"合约价值2:\"+Text(quzhi2*jz2));

Commentary(\"资金使用量:\"+Text(hyzz));

Commentary(\"合约差值:\"+Text(hycz));

Commentary(\"误差:\"+Text(kcWC));

Commentary(\"开仓状态:\"+Text(kc));

Commentary(\"平仓状态:\"+Text(pc));

}


freenby

我简单描述一下我的需求,在盘中我通过KC值来判断是否开仓?默认值0是不开仓,盘中通过人工判断修改KC的值为1后,变成可以开仓。但是我希望开仓后,不要继续再开仓。这种情况下一般只能再次通过修改KC的值为0,才能实现。而我想通过自动的方式实现,即:在程序开完仓后,直接将KC的值 改成0,这样我就不用每次开仓后再人工去修改KC的值。但我不知道这种方式能不能实现?请指教,先谢谢各位老师!!!

2023-05-17 11:40
kyover

公式应用设置里有一个动态修改参数

修改以后不会影响加载前的运行结果

但是如果你刷新图表或者重新加载公式就不行了 历史信号就都没了 慎用

2023-05-17 11:50
freenby

这个我是是知道的,现在我觉得麻烦的是,我每次关闭开仓功能,都要人工在参数里修改一下这个KC值为0;

而实际上,我在人工打开开仓功能(即人工设置KC=1),实现开仓后,即使后面再有信号我也不想开仓。现在我只能人工去调整KC的值 为0。我想实现的是,在程序中设计为:我开仓成功后,通过程序直接把KC的值改为0,这样我就不需要每次开仓后再去人工调整下KC的值。楼上的老师,这种情况有办法实现吗?

2023-05-17 13:15
freenby

这个问题简单点说其实就是能不能通过指令在程序中修改 PARAMS 里面设置的值?

2023-05-17 13:23
freenby

我这个问题没有老师能回答吗?就是能不能通过指令在程序中修改 PARAMS 里面设置的值?

2023-05-18 17:43
您未登录,请先 登录注册 后发表评论
顶部