欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件公式模型编写问题提交 → 我把方案又改简单了 看怎么写 谢谢

   

欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。    


  共有3433人关注过本帖树形打印复制链接

主题:我把方案又改简单了 看怎么写 谢谢

帅哥哟,离线,有人找我吗?
Tiffany1
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:124 积分:0 威望:0 精华:0 注册:2020/12/11 16:17:55
我把方案又改简单了 看怎么写 谢谢  发帖心情 Post By:2021/1/7 13:32:36    Post IP:223.85.41.66[只看该作者]

实现以下思想,用于回测(日线)逻辑很简单:
1.if今日日期=2020年1月1日,则 取得2019年12月31日的收盘价并把它赋值给A。并且
   if今日收盘价>A,就做多;
   if今日收盘价<A,就做空;
   if今日收盘价=A,就什么都不做。
2.if今日日期>=2020年1月2日 and 今日日期<=2020年6月30日,
则 同样取得2019年12月31日的收盘价并把它赋值给A。并且
   if今日收盘价金叉A,就平仓并做多;
   if今日收盘价死叉A,就平仓并做空;
   if没有金叉也没有死叉,就什么也不做。
3.if今日日期=2020年7月1日,则 平掉所有仓位。并且取得2020年6月30日的收盘价并把它赋值给A。并且
   if今日收盘价>A,就重新开多;
   if今日收盘价<A,就重新开空;
   if今日收盘价=A,就什么都不做。
4.if今日日期>=2020年7月2日 and 今日日期<=2020年12月31日,
则 同样取得2020年6月30日的收盘价并把它赋值给A。并且
   if今日收盘价金叉A,就平仓并做多;
   if今日收盘价死叉A,就平仓并做空;
   if没有金叉也没有死叉,就什么也不做。
5.if今日日期=2021年1月1日,则 平掉所有仓位,结束,不再开仓了。

步骤4和步骤2几乎相同,只有日期差异。我只会写这个文字版的,改为真正的程序化用于回测应该怎么写?并请纠正我上面内容中的错处。谢谢

 回到顶部
帅哥哟,离线,有人找我吗?
FireScript
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:14496 积分:0 威望:0 精华:0 注册:2017/7/4 13:40:18
  发帖心情 Post By:2021/1/7 14:24:59    Post IP:58.246.57.26[只看该作者]

 这前面我记得写过一个差不多的代码啊。


命数如织,当如磐石。
 回到顶部
帅哥哟,离线,有人找我吗?
Tiffany1
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:124 积分:0 威望:0 精华:0 注册:2020/12/11 16:17:55
回复:(FireScript) 这前面我记得写过一个差不...  发帖心情 Post By:2021/1/7 14:40:04    Post IP:223.85.41.66[只看该作者]

跟之前有所不同。比如这次有很多if,我不知道if套if怎么写。表面上文字很多,其实逻辑很简单,对于你们来讲 可能15分钟就写完了。我可以等 等你们不忙的时候 今天明天都行。帮我再写一下吧 多谢了。这是最后一次了。

 回到顶部
帅哥哟,离线,有人找我吗?
FireScript
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:14496 积分:0 威望:0 精华:0 注册:2017/7/4 13:40:18
  发帖心情 Post By:2021/1/7 15:19:49    Post IP:58.246.57.26[只看该作者]

 你这里面日期都是固定死的?如果不是的话,那就有很多需要斟酌的地方了。


命数如织,当如磐石。
 回到顶部
帅哥哟,离线,有人找我吗?
FireScript
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:14496 积分:0 威望:0 精华:0 注册:2017/7/4 13:40:18
  发帖心情 Post By:2021/1/7 15:23:51    Post IP:58.246.57.26[只看该作者]

 因为很简单,如果是任意指定的几个日期。是需要考虑这几个日期是否是交易日的。


命数如织,当如磐石。
 回到顶部
帅哥哟,离线,有人找我吗?
Tiffany1
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:124 积分:0 威望:0 精华:0 注册:2020/12/11 16:17:55
回复:(FireScript) 因为很简单,如果是任意指...  发帖心情 Post By:2021/1/7 16:00:20    Post IP:223.85.41.66[只看该作者]

对 日期就是固定死的,就按这个日期写就行了。程序不要去考虑是否为交易日(我自己手工会去调整日期 让它不是节假日的。比如本来在1号出信号,结果1号是周日,我查看了日历表后就手工改数字为2号,让它在2号再发信号。程序不要去反映是否交易日,否则反而把我手工操作的部分冲乱了)。

 回到顶部
帅哥哟,离线,有人找我吗?
Tiffany1
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:124 积分:0 威望:0 精华:0 注册:2020/12/11 16:17:55
回复:(FireScript) 因为很简单,如果是任意指...  发帖心情 Post By:2021/1/7 16:19:41    Post IP:223.85.41.66[只看该作者]

我手工设定日期的时候 会先查看日历表,发现不是节假日我才去设定为那日。因此所有日期最后都会是交易日,不会出现非交易日。
[此贴子已经被作者于2021/1/7 16:20:36编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
Tiffany1
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:124 积分:0 威望:0 精华:0 注册:2020/12/11 16:17:55
回复:(FireScript) 因为很简单,如果是任意指...  发帖心情 Post By:2021/1/8 9:53:58    Post IP:223.85.41.66[只看该作者]

您好,请问今天能抽空帮我写一下吗 真的感谢,上午下午都行。
这次比上次更简单了,比如不再需要寻找第二个交易日,只需要直接指定输入自然日日期就够了。而自然日日期 我在回测的时候会重新查看日历是否交易日,并把它改为设定在交易日日期,避开非交易日的。所以不会出现非交易日的情况。
这个方案逻辑很简单,对你们专业人士来说 15分钟可能就搞定了,有空的话抽空帮帮我吧,真的拜托了,感谢你。这是最终版了 以后不会再麻烦你了。

 回到顶部
帅哥哟,离线,有人找我吗?
FireScript
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:14496 积分:0 威望:0 精华:0 注册:2017/7/4 13:40:18
  发帖心情 Post By:2021/1/8 10:19:08    Post IP:58.246.57.26[只看该作者]

 INPUT:year1(2020,1990,2100,1),year2(2020,1990,2100,1),year3(2021,1990,2100,1);
INPUT:month1(1,1,12,1),month2(7,1,12,1),month3(1,1,12,1);
INPUT:day1(1,1,31,1),day2(1,1,31,1),day3(1,1,31,1),;

cd1:year=year1 and MONTH=month1 and day=day1;//日期1判断
cd2:year=year2 and MONTH=month2 and day=day2;//日期2判断
cd3:year=year3 and MONTH=month3 and day=day3;//日期3判断
VARIABLE:A1:=0,A2:=0,A3:=0;
temp:=ref(c,1);
IF cd1 then a1:=temp;
IF cd2 then a2:=temp;
IF cd3 then A3:=1;

showA1:VALUEWHEN(a1<>0,a1);
showA2:VALUEWHEN(a2<>0,a2);

if cd1 then //第一个日期上的开仓
begin
buy(c>A1,1,market);
buyshort(c<A1,1,market);    
end


if cross(c,A1) and A1 and A2=0  then
begin
sellshort(1,holding,market);
buy(holding=0,1,market);    
end

if  cross(A1,c) and A1 and A2=0 then
begin
sell(1,holding,market);
buyshort(holding=0,1,market);    
end


if cd2 then //日期2全平 然后重新判断开仓
begin
sell(1,holding,market);    
sellshort(1,holding,market);

buy(c>A2,1,market);
buyshort(c<A2,1,market);  
end


if cross(c,A2) and A2 and A3=0  then
begin
sellshort(1,holding,market);
buy(holding=0,1,market);    
end

if  cross(A2,c) and A2 and A3=0 then
begin
sell(1,holding,market);
buyshort(holding=0,1,market);    
end


if  cd3 then
begin
到期平仓1:sell(1,holding,market);    
到期平仓2:sellshort(1,holding,market);
end



DRAWICON(cd1,h,1);//标记下日期1
DRAWICON(cd2,h,1);//标记下日期2
DRAWICON(cd3,h,1);//标记下日期3

持仓:holding;



日期你调整下。


命数如织,当如磐石。
 回到顶部