金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

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

期货品种复权问题

[复制链接]

61

主题

197

帖子

197

积分

等级: 免费版

注册:
2021-9-28
曾用名:
 楼主| 发表于 2022-2-23 14:17 | 显示全部楼层
现在把平仓和开仓分开了进行测试,结果发现开仓(无论多或空单)1手,平仓却平仓5手? 这是怎么回事?
截图202202231415128858.png
截图202202231417237092.png
回复

使用道具 举报

0

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
gxx978
发表于 2022-2-23 14:23 | 显示全部楼层
那要看你平仓的手数是怎么写的,你的代码中是有连续开仓的,如果平仓手数填0或者是holding,那触发平空,是一次性把之前的开仓都平掉了。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

61

主题

197

帖子

197

积分

等级: 免费版

注册:
2021-9-28
曾用名:
 楼主| 发表于 2022-2-23 14:27 | 显示全部楼层
kd: gap1>ref(gap2,1) and c>ref(c,len2) ;
kk: gap1>ref(gap2,1) and c<ref(c,len2) ;

pd:holding>0 and (exit_long or kk);
pk:holding<0 and (exit_short or kd);

if holding <> 0  and (exit_nextday=0,1,date > entry_date) then
begin
        sell(pd,HOLDING,market);
        sellshort(pk,abs(holding),market);
        entry_date:= 0;       
        //mp_status:= 0;
end;

if kd and direction>=0 or kk and direction<=0 then
begin
        if fund <= 100 then     //only 1 part or lots% case, don't need to be divided into NDAY_hold part
                lots:= intpart(fund);      
        else // fund > 100  => calc the amount of stock
                lots:= max(1,intpart(fund / (open*MULTIPLIER*fund_double)  ) );
               
        if fund < 5 or fund > 100 then
            begin
                    buy(kd,lots,market);
                    buyshort(kk,lots,market);
                end;
        else
            begin
                    buy(kd,lots%,market);
                    buyshort(kk,lots%,market);
                end;
        //mp_status:= holding;
        entry_date:= date;       
end;
回复

使用道具 举报

61

主题

197

帖子

197

积分

等级: 免费版

注册:
2021-9-28
曾用名:
 楼主| 发表于 2022-2-23 14:28 | 显示全部楼层
没有别的开仓和平仓语句?怎么会开1手,平掉7手? 这个是逻辑错误 。 另外,金字塔连续开仓的方式是啥子?连续平仓的又是啥子?
回复

使用道具 举报

0

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
gxx978
发表于 2022-2-23 14:33 | 显示全部楼层
1、你的开仓条件中并没有对holding做限制啊,如果开仓完,在满足平仓条件之前,又满足了开仓条件,那会再次触发开仓了,这不就是连续开仓,这样就会有多手持仓。软件又不会主动给你控制开仓次数的。
2、你的平空语句sellshort(pk,abs(holding),market); 用的是holding,那满足平仓条件了,就一次把之前开仓的数量就全部平了啊,之前连续开了7次,持仓有7手,就一次出现平仓7手了记录了啊。你要每次平1手的话,那平仓代码中的手数,也需要填1啊。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

61

主题

197

帖子

197

积分

等级: 免费版

注册:
2021-9-28
曾用名:
 楼主| 发表于 2022-2-23 14:40 | 显示全部楼层
holding 代表 当时平仓时 所持有的多单(或空单)数量,这样平仓就是要全部平掉 目前所有持仓,这个应该是对的吧。 sellshort 中 holding如果是空单就是负的数量,因此 用abs(holding)表示 空单数量,按这个持有数量平仓应该是对的啊?问题出在开仓上,开仓 还需要另外啥条件,比如 holding=0 才开仓?
回复

使用道具 举报

0

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
gxx978
发表于 2022-2-23 14:42 | 显示全部楼层
是啊,如果你开仓时不加holding=0,那连续开仓后holding的持仓是有可能是7的。只有开仓时加上holding=0,那就是开仓完,不会再次开仓,会等到触发了平仓之后,才会再次开仓。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-17 07:32 , Processed in 0.139775 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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