金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
12
返回列表 发新帖
楼主: 100019633

免费版能不能图表交易测试

[复制链接]

0

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
gxx978
发表于 2022-10-14 11:15 | 显示全部楼层
1、上楼的回复是回答的交易日志中没有运行完毕的问题的。旧版本可能存在不运行的问题的。
2、你的日志中有运行完毕,但是没有报单的记录,这个还是建议先排除下开平仓的条件,看是否存在小引大,一般这种问题都是信号闪烁的原因造成的。按理固定间隔1秒并tick级别刷新,已经是抓取信号最频繁的了。另外就是异常原因引起的,可以给我们看下你完整的日志和图上信号位置的截图,还有开平仓的条件是怎么写的,看下日志中记录的账户的登录是否正常了。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

31

主题

106

帖子

116

积分

Rank: 2

等级: 标准版

注册:
2022-6-27
曾用名:
 楼主| 发表于 2022-10-14 17:45 | 显示全部楼层
技术010 发表于 2022-10-14 11:15
1、上楼的回复是回答的交易日志中没有运行完毕的问题的。旧版本可能存在不运行的问题的。
2、你的日志中有 ...

我在公式里计算了开多和开空的手数,变量为Ex_Lots ,但Ex_Lots计算出的手数都是正数,没有开仓成功的这单是空单,会不会因为我的开仓手数是正数,所以就开不了空单?
回复

使用道具 举报

31

主题

106

帖子

116

积分

Rank: 2

等级: 标准版

注册:
2022-6-27
曾用名:
 楼主| 发表于 2022-10-14 18:05 | 显示全部楼层
下面是计算开仓手数以及开仓条件的代码,不知道哪里有问题,请帮看一下,谢谢!

///////////////////////////////////////////////////////////////////////////////////////////开仓方式 【百分比】【固定手数】
if TACCOUNT(20)>0 then //登录了交易账户(模拟/实际交易账户),获取账户的流动资产(动态权益)值
        begin
                if Rest_Limit=0 then //未开启资金限制
                        begin Chart_Asset:=TACCOUNT(20); end
                                else //开启资金限制
                        begin Chart_Asset:=Rest_Funds*10000; end        
        end
                else //未登录任何账户(模拟/实际交易账户)
        begin
                if Rest_Limit=0 then  //未开启资金限制
                        begin Chart_Asset:=ASSET; end //PEL编辑框内,费率设置里的虚拟资产值
                                else //开启资金限制
                        begin Chart_Asset:=Rest_Funds*10000; end //限制可开仓金额设置为固定值=Rest_Funds*10000        
        end

////////////////////////////////////////////每手开仓成本        
Lots_Cost:=(MULTIPLIER*Close*TACCOUNT(41));

////////////////////////////////////////////持仓市值
Hold_Asset:=Lots_Cost*HOLDING,NODRAW;

////////////////////////////////////////////开仓手数计算  
S_Theory_Loss:=ABS(CCC-Short_SP)*10,NODRAW;
L_Theory_Loss:=ABS(CCC-Long_SP)*10,NODRAW;

       
if Rest_Limit=0 then //未启用资金限制
        begin
                if Per_Lots=0 then //未启用百分比 [实盘/模拟/PEL虚拟资金相同]
                        begin Ex_Lots:=Fix_Lots; end //固定手数开仓
                                else //百分比手数开仓   
                        begin
                                if S_Open_Cond>0 and HOLDING=0 then
                                        begin
                                                if S_Theory_Loss*INTPART(Chart_Asset*(Per_Lots*0.01)/Lots_Cost) > INTPART(Chart_Asset*(Per_Lots*0.01)*(Rest_Loss*0.01)) then
                                                        begin Ex_Lots:=INTPART(INTPART(Chart_Asset*(Per_Lots*0.01)*(Rest_Loss*0.01))/S_Theory_Loss); end
                                                                else
                                                        begin Ex_Lots:=INTPART(Chart_Asset*(Per_Lots*0.01)/Lots_Cost); end        
                                        end
                                       
                                if L_Open_Cond>0 and HOLDING=0 then
                                        begin
                                                if L_Theory_Loss*INTPART(Chart_Asset*(Per_Lots*0.01)/Lots_Cost) > INTPART(Chart_Asset*(Per_Lots*0.01)*(Rest_Loss*0.01)) then
                                                        begin Ex_Lots:=INTPART(INTPART(Chart_Asset*(Per_Lots*0.01)*(Rest_Loss*0.01))/L_Theory_Loss); end
                                                                else
                                                        begin Ex_Lots:=INTPART(Chart_Asset*(Per_Lots*0.01)/Lots_Cost); end        
                                        end        
                        end        
        end
                else //Rest_Limit=1 启用资金限制
        begin
                if Rest_Per=100 then //不启用安全垫 无论是否登录账户,都按照限制资金最大量开仓[用于回测限制资金满仓结果]  
                        begin
                                if INTPART(Rest_Funds*10000/Lots_Cost)>=1 then
                                        begin
                                                if S_Open_Cond>0 and HOLDING=0 then
                                                        begin
                                                                if S_Theory_Loss*INTPART(Rest_Funds*10000/Lots_Cost) > INTPART((Rest_Funds*10000)*(Rest_Loss*0.01)) then
                                                                        begin Ex_Lots:=INTPART(INTPART((Rest_Funds*10000)*(Rest_Loss*0.01))/S_Theory_Loss); end
                                                                                else
                                                                        begin Ex_Lots:=INTPART((Rest_Funds*10000)/Lots_Cost); end                        
                                                        end
                                               
                                                if L_Open_Cond>0 and HOLDING=0 then
                                                        begin
                                                                if L_Theory_Loss*INTPART(Rest_Funds*10000/Lots_Cost) > INTPART((Rest_Funds*10000)*(Rest_Loss*0.01)) then
                                                                        begin Ex_Lots:=INTPART(INTPART((Rest_Funds*10000)*(Rest_Loss*0.01))/L_Theory_Loss); end
                                                                                else
                                                                        begin Ex_Lots:=INTPART((Rest_Funds*10000)/Lots_Cost); end                        
                                                        end                
                                        end
                                                else
                                        begin Ex_Lots:=0; end //注意:当计算出的手数为0时,PEL会认为0为按照现有资金全部开仓,因此需要在开仓条件里附件,Ex_Lots<>0时才可以开仓        
                        end
                                else //Rest_Per<100 启用安全垫 [回测/实盘/模拟 安全垫交易]2种情况 1账户开启 2PEL虚拟资金   
                        begin
                                if TACCOUNT(20)>0 then //账户开启时
                                        begin
                                                if TACCOUNT(20)*(Rest_Per*0.01)<(Rest_Funds*10000) then //账户资金*安全垫 < 限制使用资金 → 使用安全垫资金
                                                        begin
                                                                if INTPART(TACCOUNT(20)*(Rest_Per*0.01)/Lots_Cost)>=1 then
                                                                        begin
                                                                                if S_Open_Cond>0 and HOLDING=0 then
                                                                                        begin
                                                                                                if S_Theory_Loss*INTPART(TACCOUNT(20)*(Rest_Per*0.01)/Lots_Cost) > TACCOUNT(20)*(Rest_Per*0.01)*(Rest_Loss*0.01) then
                                                                                                        begin Ex_Lots:=INTPART(TACCOUNT(20)*(Rest_Per*0.01)*(Rest_Loss*0.01)/S_Theory_Loss); end
                                                                                                                else
                                                                                                        begin Ex_Lots:=INTPART(TACCOUNT(20)*(Rest_Per*0.01)/Lots_Cost); end        
                                                                                        end
                                                                               
                                                                                if L_Open_Cond>0 and HOLDING=0 then
                                                                                        begin
                                                                                                if L_Theory_Loss*INTPART(TACCOUNT(20)*(Rest_Per*0.01)/Lots_Cost) > TACCOUNT(20)*(Rest_Per*0.01)*(Rest_Loss*0.01) then
                                                                                                        begin Ex_Lots:=INTPART(TACCOUNT(20)*(Rest_Per*0.01)*(Rest_Loss*0.01)/L_Theory_Loss); end
                                                                                                                else
                                                                                                        begin Ex_Lots:=INTPART(TACCOUNT(20)*(Rest_Per*0.01)/Lots_Cost); end        
                                                                                        end                
                                                                        end
                                                                                else begin Ex_Lots:=0; end //注意:当计算出的手数为0时,PEL会认为0为按照现有资金全部开仓,因此需要在开仓条件里附件,Ex_Lots<>0时才可以开仓                
                                                        end
                                                                else //使用 限制使用资金
                                                        begin
                                                                if INTPART((Rest_Funds*10000)/Lots_Cost)>=1 then
                                                                        begin
                                                                                if S_Open_Cond>0 and HOLDING=0 then
                                                                                        begin
                                                                                                if S_Theory_Loss*INTPART((Rest_Funds*10000)/Lots_Cost) > (Rest_Funds*10000)*(Rest_Loss*0.01) then
                                                                                                        begin Ex_Lots:=INTPART((Rest_Funds*10000)*(Rest_Loss*0.01)/S_Theory_Loss); end
                                                                                                                else
                                                                                                        begin Ex_Lots:=INTPART((Rest_Funds*10000)/Lots_Cost); end        
                                                                                        end
                                                                               
                                                                                if L_Open_Cond>0 and HOLDING=0 then
                                                                                        begin
                                                                                                if L_Theory_Loss*INTPART((Rest_Funds*10000)/Lots_Cost) > (Rest_Funds*10000)*(Rest_Loss*0.01) then
                                                                                                        begin Ex_Lots:=INTPART((Rest_Funds*10000)*(Rest_Loss*0.01)/L_Theory_Loss); end
                                                                                                                else
                                                                                                        begin Ex_Lots:=INTPART((Rest_Funds*10000)/Lots_Cost); end        
                                                                                        end                
                                                                        end
                                                                                else begin Ex_Lots:=0; end //注意:当计算出的手数为0时,PEL会认为0为按照现有资金全部开仓,因此需要在开仓条件里附件,Ex_Lots<>0时才可以开仓
                                                        end
                                        end
                                                else //TACCOUNT(20)<=0 账户未开启 即PEL虚拟资金
                                        begin
                                                if Asset*(Rest_Per*0.01)<(Rest_Funds*10000) then //虚拟资金*安全垫百分比 < 限制资金 使用安全垫资金
                                                        begin
                                                                if INTPART(Asset*(Rest_Per*0.01)/Lots_Cost)>=1 then
                                                                        begin
                                                                                if S_Open_Cond>0 and HOLDING=0 then
                                                                                        begin
                                                                                                if S_Theory_Loss*INTPART(Asset*(Rest_Per*0.01)/Lots_Cost) > Asset*(Rest_Per*0.01)*(Rest_Loss*0.01) then
                                                                                                        begin Ex_Lots:=INTPART(Asset*(Rest_Per*0.01)*(Rest_Loss*0.01)/S_Theory_Loss); end
                                                                                                                else
                                                                                                        begin Ex_Lots:=INTPART(Asset*(Rest_Per*0.01)/Lots_Cost); end        
                                                                                        end
                                                                               
                                                                                if L_Open_Cond>0 and HOLDING=0 then
                                                                                        begin
                                                                                                if L_Theory_Loss*INTPART(Asset*(Rest_Per*0.01)/Lots_Cost) > Asset*(Rest_Per*0.01)*(Rest_Loss*0.01) then
                                                                                                        begin Ex_Lots:=INTPART(Asset*(Rest_Per*0.01)*(Rest_Loss*0.01)/L_Theory_Loss); end
                                                                                                                else
                                                                                                        begin Ex_Lots:=INTPART(Asset*(Rest_Per*0.01)/Lots_Cost); end        
                                                                                        end                
                                                                        end
                                                                                else begin Ex_Lots:=0; end //注意:当计算出的手数为0时,PEL会认为0为按照现有资金全部开仓,因此需要在开仓条件里附件,Ex_Lots<>0时才可以开仓        
                                                        end
                                                                else  //虚拟资金*安全垫百分比 >= 限制资金 使用限制资金  
                                                        begin
                                                                if INTPART((Rest_Funds*10000)/Lots_Cost)>=1 then
                                                                        begin
                                                                                if S_Open_Cond>0 and HOLDING=0 then
                                                                                        begin
                                                                                                if S_Theory_Loss*INTPART((Rest_Funds*10000)/Lots_Cost) > (Rest_Funds*10000)*(Rest_Loss*0.01) then
                                                                                                        begin Ex_Lots:=INTPART((Rest_Funds*10000)*(Rest_Loss*0.01)/S_Theory_Loss); end
                                                                                                                else
                                                                                                        begin Ex_Lots:=INTPART((Rest_Funds*10000)/Lots_Cost); end        
                                                                                        end
                                                                               
                                                                                if L_Open_Cond>0 and HOLDING=0 then
                                                                                        begin
                                                                                                if L_Theory_Loss*INTPART((Rest_Funds*10000)/Lots_Cost) > (Rest_Funds*10000)*(Rest_Loss*0.01) then
                                                                                                        begin Ex_Lots:=INTPART((Rest_Funds*10000)*(Rest_Loss*0.01)/L_Theory_Loss); end
                                                                                                                else
                                                                                                        begin Ex_Lots:=INTPART((Rest_Funds*10000)/Lots_Cost); end        
                                                                                        end                
                                                                        end
                                                                                else begin Ex_Lots:=0; end //注意:当计算出的手数为0时,PEL会认为0为按照现有资金全部开仓,因此需要在开仓条件里附件,Ex_Lots<>0时才可以开仓
                                                        end        
                                        end                        
                        end                                
        end
        Excute_Lots:Ex_Lots,NODRAW;       


//+------------------------------------------------------------------+
//|                            确认条件                              |
//+------------------------------------------------------------------+
Long_Cond:=L_Open_Cond>0 and Ex_Lots>0,COLORRED,NODRAW;
Short_Cond:S_Open_Cond>0 and Ex_Lots>0,COLORGREEN,NODRAW;

//+------------------------------------------------------------------+
//|                           开平仓执行                             |
//+------------------------------------------------------------------+
多:=ref(Long_Cond,1)>0  and HOLDING=0 and OOO>=ref(Min(CCC,OOO),1),NODRAW;
空:=ref(Short_Cond,1)>0 and HOLDING=0 and OOO<=ref(Max(CCC,OOO),1),NODRAW;

if ISLASTBAR then
        begin
                清多i:SELL(多清=1,0,marketr);
                清空i:SELLSHORT(空清=1,0,marketr);

                开多i:BUY(多=1,Excute_Lots,marketr),COLORRED;
                开空i:BUYSHORT(空=1,Excute_Lots,marketr),COLORGREEN;
        end
                else
        begin
                清多:SELL(多清=1,0,LIMITR,Open),COLORGREEN;
                清空:SELLSHORT(空清=1,0,LIMITR,Open),COLORGREEN;

                开多:BUY(多=1,Excute_Lots,LIMITR,Open),COLORRED;
                开空:BUYSHORT(空=1,Excute_Lots,LIMITR,Open),COLORGREEN;
               
                if 开空 then
                        begin
                                Open_Price:=OOO;
                                Last_Lots:=Excute_Lots;
                        end
               
                if 开多 then
                        begin
                                Open_Price:=OOO;
                                Last_Lots:=Excute_Lots;
                        end                                        
        end
        持:HOLDING,COLORYELLOW,NODRAW;
回复

使用道具 举报

31

主题

106

帖子

116

积分

Rank: 2

等级: 标准版

注册:
2022-6-27
曾用名:
 楼主| 发表于 2022-10-14 18:15 | 显示全部楼层
感觉中间确实是不是有断开的情况?
我手动开仓了,信号出现之前,没有断开,不知道平仓为什么也没有执行?


Snipaste_2022-10-14_18-12-42.jpg
Snipaste_2022-10-14_18-15-05.jpg
回复

使用道具 举报

31

主题

106

帖子

116

积分

Rank: 2

等级: 标准版

注册:
2022-6-27
曾用名:
 楼主| 发表于 2022-10-14 18:38 | 显示全部楼层
对齐这个是这样写的,我好像也没看出小周期引用大周期,会有闪烁的错误

//+------------------------------------------------------------------+
//|                            引用对齐                              |
//+------------------------------------------------------------------+
T30:="FV30_V3.T30#MIN30",NODRAW;
Align_30:Time=T30,NODRAW;
Cnt_Align_30:=BARSLAST(Align_30=0 and ref(Align_30,1)=1)+1,NODRAW;

//+------------------------------------------------------------------+
//|                            开仓引用                              |
//+------------------------------------------------------------------+

/////////////////////////////////////////////////////////
K_Trend_A:=STKINDI('','FV30_V3.K_Trend',0,4,0),COLORRED,NODRAW;
K_Trend_B:=STKINDI('','FV30_V3.K_Trend',0,4,-1),COLORRED,NODRAW;
K_Trend:=if(Align_30=1,K_Trend_A,K_Trend_B),NODRAW;

/////////////////////////////////////////////////////////
Ma_Force_A:=STKINDI('','FV30_V3.Ma_Force',0,4,0),COLORRED,NODRAW;
Ma_Force_B:=STKINDI('','FV30_V3.Ma_Force',0,4,-1),COLORRED,NODRAW;
Ma_Force:=if(Align_30=1,Ma_Force_A,Ma_Force_B),NODRAW;
回复

使用道具 举报

0

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
gxx978
发表于 2022-10-17 09:05 | 显示全部楼层
1、下单的方向是有buy或buyshort来控制开多或开空的,和下单手数的正负没有关系。
2、正常情况下,启动程序化交易后,在交易时段内,会有品种运行完毕的记录的,你在10月10日启动后,后面一直没有运行,检查下行情接收是否正常,或者是否程序化交易是暂停了。图表交易只会对图表上的理论持仓进行交易,你手动开的仓位,图表是读取不到的。
3、你引用的是30分钟周期的数据,如果你加载在5分钟周期上,就存在小周期引用大周期的情况了。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

31

主题

106

帖子

116

积分

Rank: 2

等级: 标准版

注册:
2022-6-27
曾用名:
 楼主| 发表于 2022-10-17 11:35 | 显示全部楼层
技术010 发表于 2022-10-17 09:05
1、下单的方向是有buy或buyshort来控制开多或开空的,和下单手数的正负没有关系。
2、正常情况下,启动程 ...

5分钟引用30分钟,是必然会出现闪烁吗?刚刚好像是看到开仓量有闪烁,本来应该是30手的,5分钟刚刚跳到新一根K线时,开仓量就变成10手,过一会儿又变成30了

那这个引用怎么规避闪烁啊?

我现在是这样写的
T30:="FV30_V3.T30#MIN30",NODRAW;
Align_30:Time=T30,NODRAW;
Cnt_Align_30:=BARSLAST(Align_30=0 and ref(Align_30,1)=1)+1,NODRAW;

其中变量T30引用的FV30_V3公式里的T30,后面FV30_V3这个T30:=Time,NODRAW;

这个应该怎么改呢?
回复

使用道具 举报

31

主题

106

帖子

116

积分

Rank: 2

等级: 标准版

注册:
2022-6-27
曾用名:
 楼主| 发表于 2022-10-17 11:37 | 显示全部楼层
技术010 发表于 2022-10-17 09:05
1、下单的方向是有buy或buyshort来控制开多或开空的,和下单手数的正负没有关系。
2、正常情况下,启动程 ...

后面引用30分钟的其他变量,就是以上面那个时间对齐来写的,如下:

K_Trend_A:=STKINDI('','FV30_V3.K_Trend',0,4,0),COLORRED,NODRAW;
K_Trend_B:=STKINDI('','FV30_V3.K_Trend',0,4,-1),COLORRED,NODRAW;
K_Trend:=if(Align_30=1,K_Trend_A,K_Trend_B),NODRAW;

麻烦帮看一下,是哪里写错了,应该怎么修改?
回复

使用道具 举报

0

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
gxx978
发表于 2022-10-17 13:15 | 显示全部楼层
小引大,是大概率的会造成历史K线上的信号发生变化,因为小周期上,K线走完了,但是大周期的K线还没有走完,就会造成小周期的前面几根K线的条件还有可能发生变化。所以一般在小引大的时候,都建议引用时往前偏移一根,例如K_Trend_B这样。这个不是写错的问题,是你条件定义的问题,只是不建议直接小周期引用大周期,会造成信号的闪烁。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-3 11:35 , Processed in 0.091813 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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