金字塔决策交易系统

用户名  找回密码
 

微信登录

微信扫一扫,快速登录

帖子
查看: 1773|回复: 3

【阿火秘笈】股指期货后台自动锁仓和换月移仓的代码,实现全自动化交易。

[复制链接]

1

主题

1

帖子

1

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2024-11-13
曾用名:
发表于 2024-11-26 15:15 | 显示全部楼层 |阅读模式
本帖最后由 技术006 于 2024-12-3 21:44 编辑

由于股指期货日内平仓手续费高昂,且基本每个月要移仓,在此分享本人使用多年的全自动化锁仓和移仓的后台代码。感兴趣的塔友们可根据此编程思路自行调整(注意:完全吸收理解的基础上,再去调整):
[PEL] 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
//后台加载在股指连续合约上即可。
globalvariable:abb=0;
 
//在此以双均线模型为例,大家用自己的模型替换双均线模型即可。
variable:hold1=0;
ma1:=ma(c,10);
ma2:=ma(c,20);
if hold1>0 and ma1<ma2 then hold1:=0;
if hold1<0 and ma1>ma2 then hold1:=0;
if hold1=0 and ma1>ma2 then hold1:=1;
if hold1=0 and ma1<ma2 then hold1:=-1;
 
zongcc:=ref(hold1,1);//最终的模型信号赋值给zongcc
 
if not(islastbar) or workmode<>1 then exit;
dnsj:=currenttime;
tm:=mod(dnsj,100);
flow:=2;//单次最多下单量
daima:='IF';
ac:='10002351';//改成自己的实盘账号
pinzhong:=daima&numtostrex(newcang,0,2);//参数1 newcang(最新的主力合约)
laststk:=daima&numtostrex(oldcang,0,2);//参数2 oldcang(即将被替代的合约)
 
xdtm:=30;//每分钟同步的时间点
if abb=2 and tm>=xdtm-3 and tm<xdtm then begin
        abb:=0;
        tcancelex(1,0,ac,pinzhong);
        tcancelex(1,0,ac,laststk);
end
 
if abb=0 and tm>=xdtm and tm<xdtm+10 then begin
        huadian:=1*mindiff;
 
        orderbuy:=dynainfo2(20,pinzhong);//新仓的委买价
        ordersell:=dynainfo2(21,pinzhong);//新仓的委卖价
        lastorderbuy:=dynainfo2(20,laststk);//旧仓的委买价
        lastordersell:=dynainfo2(21,laststk);//旧仓的委卖价
                
        lastbuyhold:=tbuyholdingex(ac,laststk,1);
        lastsellhold:=tsellholdingex(ac,laststk,1);
        buyhold0:=tbuyholdingex(ac,pinzhong,0);
        sellhold0:=tsellholdingex(ac,pinzhong,0);
        buyhold:=tbuyholdingex(ac,pinzhong,1);
        sellhold:=tsellholdingex(ac,pinzhong,1);
         
        dingdan0:=zongcc-(buyhold-sellhold)-(lastbuyhold-lastsellhold);
        dingdan:=sgn(dingdan0)*min(flow,abs(dingdan0));
        //新、旧合约合并考虑。要平仓的话,先平旧合约;开新仓的话,开到新合约。
        if dingdan>0.5 then begin
                pc1:=min(dingdan,lastsellhold);
                pc2:=if(sellhold0>0.5,0,min(dingdan-pc1,sellhold));
                kc:=dingdan-pc1-pc2;
                if pc1>0.5 then begin
                        if lastorderbuy>1 and lastordersell>1 then tsellshort(1,pc1,lmt,lastorderbuy+huadian,0,ac,laststk),allowrepeat;
                end
                if orderbuy>1 and ordersell>1 then begin
                        if pc2>0.5 then tsellshort(1,pc2,lmt,orderbuy+huadian,0,ac,pinzhong),allowrepeat;
                        if kc>0.5 then tbuy(1,kc,lmt,orderbuy+huadian,0,ac,pinzhong),allowrepeat;
                end
        end
        if dingdan<-0.5 then begin
                pc1:=min(-dingdan,lastbuyhold);
                pc2:=if(buyhold0>0.5,0,min(-dingdan-pc1,buyhold));
                kc:=-dingdan-pc1-pc2;
                if pc1>0.5 then begin
                        if lastorderbuy>1 and lastordersell>1 then tsell(1,pc1,lmt,lastordersell-huadian,0,ac,laststk),allowrepeat;
                end
                if orderbuy>1 and ordersell>1 then begin       
                        if pc2>0.5 then tsell(1,pc2,lmt,ordersell-huadian,0,ac,pinzhong),allowrepeat;
                        if kc>0.5 then tbuyshort(1,kc,lmt,ordersell-huadian,0,ac,pinzhong),allowrepeat;
                end
        end
        if dingdan=0 and time>=143000 and (lastbuyhold>0.5 or lastsellhold>0.5) then begin//14:30启动移仓
                lastdingdan0:=0-(lastbuyhold-lastsellhold);
                lastdingdan:=sgn(lastdingdan0)*min(flow,abs(lastdingdan0));
                if lastdingdan<-0.5 then begin
                        pc2:=-lastdingdan;
                        if lastorderbuy>1 and lastordersell>1 then tsell(1,pc2,lmt,lastordersell-huadian,0,ac,laststk),allowrepeat;
                        if orderbuy>1 and ordersell>1 then tbuy(1,pc2,lmt,orderbuy+huadian,0,ac,pinzhong),allowrepeat;
                end
                if lastdingdan>0.5 then begin
                        pc2:=lastdingdan;
                        if lastorderbuy>1 and lastordersell>1 then tsellshort(1,pc2,lmt,lastordersell+huadian,0,ac,laststk),allowrepeat;
                        if orderbuy>1 and ordersell>1 then tbuyshort(1,pc2,lmt,orderbuy-huadian,0,ac,pinzhong),allowrepeat;
                end       
                if lastdingdan=0 and lastbuyhold>0.5 then begin
                        pc1:=min(flow,lastbuyhold);
                        chaju:=lastordersell-lastorderbuy;
                        xx:=if(chaju>0.5,1,0);
                        if lastorderbuy>1 and lastordersell>1 then begin
                                tsellshort(1,pc1,lmt,lastorderbuy+xx*0.2,0,ac,laststk),allowrepeat;
                                tsell(1,pc1,lmt,lastordersell-xx*0.2,0,ac,laststk),allowrepeat;
                        end
                end              
        end
 
        abb:=2;
end
回复

举报

0

主题

1

帖子

1

积分

Rank: 1

等级: 新手上路

注册:
2024-4-4
曾用名:
发表于 2025-2-4 21:43 | 显示全部楼层
回复

举报

12

主题

18

帖子

18

积分

Rank: 1

等级: 新手上路

注册:
2023-12-11
曾用名:
发表于 2025-2-5 16:54 | 显示全部楼层
请问大佬如果只需要主力合约变更移时自动仓是需要那一段代码
回复

举报

8

主题

21

帖子

21

积分

Rank: 1

等级: 新手上路

注册:
2021-9-1
曾用名:
发表于 2025-4-16 10:43 | 显示全部楼层
回复

举报

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

本版积分规则

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

GMT+8, 2025-7-27 02:08 , Processed in 0.209091 second(s), 28 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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