以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://222.73.7.161/bbs/index.asp)
--  公式模型编写问题提交  (http://222.73.7.161/bbs/list.asp?boardid=4)
----  套利合约的开仓问题,谢谢解答!  (http://222.73.7.161/bbs/dispbbs.asp?boardid=4&id=172165)

--  作者:xiechenpwl6
--  发布时间:2019/9/23 16:24:15
--  套利合约的开仓问题,谢谢解答!
后台代码如下:
input:SX(90,1,1000,1),XX(10,1,1000,1),SS(5,1,1000,1);
套利品种1:\'M01\';
套利品种2:\'M05\'; 
账户:\'629795\';  //账号自行定义下
JC:dynainfo2(7,套利品种1)-dynainfo2(7,套利品种2);//最新价差
DEBUGFILE(\'c:\\record.txt\',\'套利空品种1=\'+套利品种1,0);
DEBUGFILE(\'c:\\record.txt\',\'套利多品种2=\'+套利品种2,0);
DEBUGFILE(\'c:\\record.txt\',\'价差=%.2f\',jc);
//////////////////////////////////////////////////////////////////////
//a:STKINDI(\'M00\',\'单位乘数.a\',0,6);//单位乘数引用
a:DYNAINFO2(209 , \'M00\');//单位乘数引用
//监控持仓和资金状况
KC:=TSELLHOLDINGEX(账户,套利品种1,1);//当前持仓量空头
DC:=TBUYHOLDINGEX(账户,套利品种2,1);//当前持仓量多头
当前可用资金:=TACCOUNT(19);
ZJ:当前可用资金>dynainfo2(7,套利品种1)*a;
DEBUGFILE(\'c:\\record.txt\',\'单位乘数=%.2f\',a);
DEBUGFILE(\'c:\\record.txt\',\'空头持仓=%.2f\',kc);
DEBUGFILE(\'c:\\record.txt\',\'多头持仓=%.2f\',dc);
DEBUGFILE(\'c:\\record.txt\',\'当前可用资金=%.2f\',当前可用资金);
DEBUGFILE(\'c:\\record.txt\',\'资金是否够用=%.2f\',ZJ);
b:DYNAINFO2(208 , \'M00\');
kctj:JC >SX ;
kctjq: KC=0 AND DC=0 and zj=1;
DEBUGFILE(\'c:\\record.txt\',\'kctj=%.2f\',kctj);
DEBUGFILE(\'c:\\record.txt\',\'kctjq=%.2f\',kctjq);
/////////////////////////////////////////////////////////////////////
if JC>SX and KC=0 AND DC=0 and zj=1  then //价差大于上限值时
begin
TBUYSHORT(1,SS,MKT ,0,0,账户,套利品种1);
TBUY(1,SS,MKT ,0,0,账户,套利品种2);
end

if JC<XX AND KC=SS AND DC=SS then //价差小于下限值时
begin
TsellSHORT(1,SS,MKT ,0,0,账户,套利品种1);
Tsell(1,SS,MKT ,0,0,账户,套利品种2);
end

输出结果:
2019-09-23 14:59:56.852    套利空品种1=M01
2019-09-23 14:59:56.852    套利多品种2=M05
2019-09-23 14:59:56.852    价差=103.00
2019-09-23 14:59:56.852    单位乘数=10.00
2019-09-23 14:59:56.852    空头持仓=0.00
2019-09-23 14:59:56.852    多头持仓=0.00
2019-09-23 14:59:56.852    当前可用资金=11188641.98
2019-09-23 14:59:56.852    资金是否够用=1.00
2019-09-23 14:59:56.852    kctj=1.00
2019-09-23 14:59:56.852    kctjq=1.00

问题:我是后台监控的,同时监控了豆粕2001和豆粕2005两个品种,在开程序前补充了K线数据,也开好了账户;
       1,为什么这个开仓条件都成立的情况下,账户并没有开仓?
       2,因为我这规定是双向只开SS=5手,之前出现过连续开两次5手的情况,这种情况是不是因为委托和成交的间隙,再次进行了委托造成的?


[此贴子已经被作者于2019/9/23 16:26:06编辑过]

--  作者:FireScript
--  发布时间:2019/9/23 16:40:48
--  
 1.连续开2次五手。这个你确定下你监控的是不是2个品种。套利的话,只需要监控一个品种。否则会重复下单。因为数据都是指定品种调用的,监控2个品种会导致重复下单的。  除此之外的确是有可能是因为没来及成交导致的。没来及成交的话,你代码现在的情况是判断不出来的。

2.条件都满足没有开仓这个。你是走完K的的还是固定轮询的呢?是不是可能刚好卡在轮询间隙或者是走完K模式?
[此贴子已经被作者于2019/9/23 16:40:58编辑过]

--  作者:xiechenpwl6
--  发布时间:2019/9/23 16:56:52
--  
1,我做套利只要监控豆粕2001  或者监控豆粕2005 他们俩中的一个品种就行了是吗?
2,我是采用固定轮训1秒中的。我的条件就m01和m05价差在90以上就做空套利。今天一整天的价差都在100以上的。所以应该可以开采对呢。

--  作者:FireScript
--  发布时间:2019/9/23 17:11:21
--  
 1.是的。监控一个品种即可。因为数据都是直接调用过来的,只需要一个品种作为运算的驱动即可。
2.明天我盘中直接测试下。 请告知你的周期设置是多少。
[此贴子已经被作者于2019/9/23 17:11:38编辑过]

--  作者:xiechenpwl6
--  发布时间:2019/9/23 17:18:57
--  
1,好的谢谢!我明天减少一个看看;
2,因为是套利价差,所以不太在乎周期的设置,我就用的默认的日线周期,这个是不是太大了,会有影响?

--  作者:FireScript
--  发布时间:2019/9/23 17:21:19
--  
 日线 今天是不是下过一次单了?如果下过一次的话,后续不会再重复下的。因为一个K 相同的下单代码是不会重复下单的了。 你可以看下监控记录里的情况,即使当时没成交之类的,下单语句也不会重复触发。

--  作者:xiechenpwl6
--  发布时间:2019/9/23 17:38:41
--  
好的!可能是这个问题,我把周期改小一点,今晚再监控一下,非常感谢!
--  作者:xiechenpwl6
--  发布时间:2019/9/24 15:50:45
--  
版主你好,我今天试验了一下。重复开仓问题是因为监控双品种造成的。目前已经解决,非常感谢;
对于不开仓的问题,我发现是这句判断出现了问题:
if JC>SX and KC=0 AND DC=0 and zj=1  then //价差大于上限值时

代码的开始,我把SX参数化,判断条件kctj:JC >SX ;就是无效的(测试时价差JC是90,SX是80);
今天我把SX直接改成数字,就开仓了,代码如下:
if JC> 89 and KC=0 AND DC=0 and zj=1  then //价差大于上限值时
begin
TBUYSHORT(1,SS,MKT ,0,0,账户,套利品种1);
TBUY(1,SS,MKT ,0,0,账户,套利品种2);
end
这是为什么呢?不会以后我每次开套利合约,我都要打开代码更改吧?

--  作者:FireScript
--  发布时间:2019/9/24 16:05:05
--  
 你的意思是如果SX是参数传递进去的值 就无法判断是吗?

--  作者:FireScript
--  发布时间:2019/9/24 16:08:05
--  
 
图片点击可在新窗口打开查看此主题相关图片如下:temp.png
图片点击可在新窗口打开查看

是在这里进行的设置的吗?