代码如下?我在程序中如何用指令修改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));
}
我这个问题没有老师能回答吗?就是能不能通过指令在程序中修改 PARAMS 里面设置的值?
这个问题简单点说其实就是能不能通过指令在程序中修改 PARAMS 里面设置的值?
这个我是是知道的,现在我觉得麻烦的是,我每次关闭开仓功能,都要人工在参数里修改一下这个KC值为0;
而实际上,我在人工打开开仓功能(即人工设置KC=1),实现开仓后,即使后面再有信号我也不想开仓。现在我只能人工去调整KC的值 为0。我想实现的是,在程序中设计为:我开仓成功后,通过程序直接把KC的值改为0,这样我就不需要每次开仓后再去人工调整下KC的值。楼上的老师,这种情况有办法实现吗?
公式应用设置里有一个动态修改参数
修改以后不会影响加载前的运行结果
但是如果你刷新图表或者重新加载公式就不行了 历史信号就都没了 慎用
我简单描述一下我的需求,在盘中我通过KC值来判断是否开仓?默认值0是不开仓,盘中通过人工判断修改KC的值为1后,变成可以开仓。但是我希望开仓后,不要继续再开仓。这种情况下一般只能再次通过修改KC的值为0,才能实现。而我想通过自动的方式实现,即:在程序开完仓后,直接将KC的值 改成0,这样我就不用每次开仓后再人工去修改KC的值。但我不知道这种方式能不能实现?请指教,先谢谢各位老师!!!