金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 3273|回复: 2

后台策略不能及时下单

[复制链接]

8

主题

33

帖子

33

积分

Rank: 1

等级: 新手上路

注册:
2021-9-19
曾用名:
发表于 2022-9-6 11:01 | 显示全部楼层 |阅读模式
几年前程序员写的后台策略,30秒周期,当时能在撤单后马上下单,目前有几分钟的延迟,不知道问题出在哪里,现把源码附上,请教修改!

GLOBALVARIABLE: timer1:=0,timer2:=0,timer3:=0,timer4:=0,timer5=0;
GLOBALVARIABLE: op:=0,op2:=0,op3:=0,op4:=0,op5:=0,scan:=0;
GLOBALVARIABLE: dat:=0,tim:=0;
GLOBALVARIABLE: xdingb:=0,xdib:=0,jxb:=0,kdzpz:=0,kkdpd:=0,ng:=0,xd:=0;

VARIABLE: 箱顶变:=0,箱底变:=0,基线变:=0,KD涨盘涨:=0,KK跌盘跌:=0,牛高:=0,熊低:=0;
VARIABLE: 多平空1:=0,多开多1:=0,多开多2:=0;
VARIABLE: 空平多1:=0,空开空1:=0,空开空2:=0;
VARIABLE: 震平多:=0,震开多:=0,震平空:=0,震开空:=0;

if ISLASTBAR  then

Begin///////////////////////下面是需要逐个tick 执行的部分程序
if date>dat|| date=dat and time>tim then
begin  //最新K线的第一个tick
       
        ///////////交易信号保存为超级变量,以便一次性使用,杜绝重复执行
        if not(dat=0 and tim=0) then
        begin//禁止程序启动时第一遍扫描的信号
                xdingb:=箱顶变;xdib:=箱底变;jxb:=基线变;kdzpz:=KD涨盘涨;kkdpd:=KK跌盘跌;ng:=牛高;xd:=熊低;
        end
        tim:=time;dat:=date;
end

if date>dat|| date=dat and time>tim then
begin  //最新K线的第一个tick
        tim:=time;dat:=date;
        ///////////交易信号保存为超级变量,以便一次性使用,杜绝重复执行
        xdingb:=箱顶变;xdib:=箱底变;jxb:=基线变;kdzpz:=KD涨盘涨;kkdpd:=KK跌盘跌;ng:=牛高;xd:=熊低;
end
       
if (timer1>0 ) then timer1:=timer1-1;//Tick 计时,每个Tick0.5秒
if (timer2>0 ) then timer2:=timer2-1;//Tick 计时,每个Tick0.5秒
if (timer3>0 ) then timer3:=timer3-1;//Tick 计时,每个Tick0.5秒
if (timer4>0 ) then timer4:=timer4-1;//Tick 计时,每个Tick0.5秒
if (timer5>0 ) then timer5:=timer5-1;//Tick 计时,每个Tick0.5秒

scan:=scan+1;
EXTGBDATASET('scan',scan);
EXTGBDATASET('buyhold',TBUYHOLDINGEX('','',2));
EXTGBDATASET('sellhold',TSELLHOLDINGEX('','',2));
//箱顶变交易,符合条件时一根K线走完老单全撤,“多平空1”时空单全部平仓;开多仓为2*手数,开仓限制为10*SS
if xdingb then
//TCANCELEX(1,0,TACCOUNT(1),STKLABEL);
begin TCANCEL(1,0); timer2:=delay; op2:=1;xdingb:=0;msgout(debug,'-----箱顶变条件出现,撤单');end
if ( timer2=1 and op2=1)  then
BEGIN
op2:=0;msgout(debug,'-----箱顶变动作');
if ( TSELLHOLDINGEX('','',2)>0 ) then TSELLSHORT(1,0,LMT,多平空1);

if ( TBUYHOLDINGEX('','',2)<10*SS) then TBUY(1,2*SS,LMT,多开多1);
if ( TBUYHOLDINGEX('','',2)<10*SS) then TBUY(1,2*SS,LMT,多开多2);
END


回复

使用道具 举报

21

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2022-9-6 13:24 | 显示全部楼层
本帖最后由 技术009 于 2022-9-6 13:30 编辑

delay  这个变量定义是怎样的?代码里没找到相关定义。这是个参数,你看下是不是你这个参数设置的不合理。
这里改成小于等于1,防止可能是信号没捕捉到刚好等于1的情况
if ( timer2<=1 and op2=1)  then
BEGIN
op2:=0;msgout(debug,'-----箱顶变动作');
if ( TSELLHOLDINGEX('','',2)>0 ) then TSELLSHORT(1,0,LMT,多平空1);

if ( TBUYHOLDINGEX('','',2)<10*SS) then TBUY(1,2*SS,LMT,多开多1);
if ( TBUYHOLDINGEX('','',2)<10*SS) then TBUY(1,2*SS,LMT,多开多2);
END
END



另外你这个代码应该是tick级别刷新运行才行的,你看下你现在还是这个设置吗。


金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

8

主题

33

帖子

33

积分

Rank: 1

等级: 新手上路

注册:
2021-9-19
曾用名:
 楼主| 发表于 2022-9-6 14:16 | 显示全部楼层
已经可以正常下单了,多谢指导!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 微信登录

本版积分规则

手机版|小黑屋|上海金之塔信息技术有限公司 ( 沪ICP备13035422号 )

GMT+8, 2025-6-8 04:44 , Processed in 0.143031 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表