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


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件公式模型编写问题提交 → 请教如何实现以下想法呀?文字多但逻辑很简单

   

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


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

主题:请教如何实现以下想法呀?文字多但逻辑很简单

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


加好友 发短信
等级:超级版主 帖子:14496 积分:0 威望:0 精华:0 注册:2017/7/4 13:40:18
  发帖心情 Post By:2021/1/4 14:24:20    Post IP:58.246.57.26[显示全部帖子]

 1.你这里1和2 其实不需要额外处理。只要交易坐标选择 交易日坐标就行了。非交易日会被自然过滤掉的。
 2.“今天的收盘价>它 就做多,如果今天的收盘价<它 就做空” 你交易的周期是什么周期?
3.“.如果今天是12月15日之后的第2个交易日(包含)到6月16日之前跟6月16日最相邻的交易日(包含)之间的日子”
这个就不好判断了。没有办法判断下一个日期 是否是交易日。




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


加好友 发短信
等级:超级版主 帖子:14496 积分:0 威望:0 精华:0 注册:2017/7/4 13:40:18
  发帖心情 Post By:2021/1/4 17:13:25    Post IP:58.246.57.26[显示全部帖子]

你这个思路 大致就是 以某个日期的收盘价作为基准 ,后续在某个日期之前 每天的价格大于它就开多,小于就开空。但是你这里缺少具体平仓条件。是反向的时候就平仓? 




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


加好友 发短信
等级:超级版主 帖子:14496 积分:0 威望:0 精华:0 注册:2017/7/4 13:40:18
  发帖心情 Post By:2021/1/5 9:46:20    Post IP:58.246.57.26[显示全部帖子]

 INPUT:year1(2016,1990,2100,1),year2(2017,1990,2100,1),month1(12,1,12,1),month2(6,1,12,1),day1(16,1,30,1),day2(16,1,30,1);//日期以参数形式调整

cd1:year=year1 and MONTH=month1 and day>=day1;
cd2:year=year2 and MONTH=month2 and day>=day2;



p1:VALUEWHEN(cd1 and not(ref(cd1,1)),c);//日期1以后的第一个交易日的收盘价,包含日期1
p2:VALUEWHEN(cd2 and not(ref(cd2,1)),1);//判断是否过了日期2

cd:ref(cd1,1) and not(ref(cd1,2));//指定日期1之后的第2个交易日

if cd then //第二个交易日上的开仓
begin
buy(c>p1,1,market);
buyshort(c<p1,1,market);    
end


DRAWICON(cd,h,1);//标记下日期1 之后第二个交易日的位置


if cross(c,p1) and p1 and not(p2=1) then
begin
sellshort(1,holding,market);
buy(holding=0,1,market);    
end

if  cross(p1,c) and p1 and  not(p2=1) then
begin
sell(1,holding,market);
buyshort(holding=0,1,market);    
end

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

持仓:holding;


日期设置成了参数,你自行调整就行了。另外你图表上的数据必须覆盖到这个日期区间。


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


加好友 发短信
等级:超级版主 帖子:14496 积分:0 威望:0 精华:0 注册:2017/7/4 13:40:18
  发帖心情 Post By:2021/1/5 11:08:11    Post IP:58.246.57.26[显示全部帖子]

 交易日操作的。5楼的那个。


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


加好友 发短信
等级:超级版主 帖子:14496 积分:0 威望:0 精华:0 注册:2017/7/4 13:40:18
  发帖心情 Post By:2021/1/5 11:27:32    Post IP:58.246.57.26[显示全部帖子]

 不能。代码里是后知后觉 发现过了指定日期后 立即平仓。比如限定的是16号 且恰好是非交易日,前一个交易日是15号。这种就只能16号之后的第一个交易日平仓,无法在15号平仓。


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


加好友 发短信
等级:超级版主 帖子:14496 积分:0 威望:0 精华:0 注册:2017/7/4 13:40:18
  发帖心情 Post By:2021/1/5 13:18:28    Post IP:58.246.57.26[显示全部帖子]

 “结果程序在16号发出开仓或平仓信号” 出不了信号。非交易日怎么出信号呢。
“那么是17日开盘就发出(以开盘价买入),还是17日收盘时发出呢(以收盘价买入)? ”代码里设置的是市价 。  回测中会以收盘价作为开仓价,实际交易时候是市价。至于发单时机取决于你的交易模式。 如果你对下单函数指令,交易模式这些都不清楚的话,我建议你看下基础教程了解下。


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


加好友 发短信
等级:超级版主 帖子:14496 积分:0 威望:0 精华:0 注册:2017/7/4 13:40:18
  发帖心情 Post By:2021/1/5 14:33:45    Post IP:58.246.57.26[显示全部帖子]

 1.不会的。非交易日在坐标上压根就不会出现。相应的信号是不会在非交易日上出现的,因为它没有K线的。如果16号是非交易日,那么我们的信号就是在17号出现,但并非是从16号“挪”过来的。而是我们最终的判断只能在17号才能完成。
2.
https://www.weistock.com/univercity_video.html

直接看官网这里的。  程序化教程有些重要的设置了解下。这些设置会对代码运行的效果产生直接影响的。


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


加好友 发短信
等级:超级版主 帖子:14496 积分:0 威望:0 精华:0 注册:2017/7/4 13:40:18
  发帖心情 Post By:2021/1/5 15:05:26    Post IP:58.246.57.26[显示全部帖子]

 回测里是收盘价。


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


加好友 发短信
等级:超级版主 帖子:14496 积分:0 威望:0 精华:0 注册:2017/7/4 13:40:18
  发帖心情 Post By:2021/1/5 15:54:56    Post IP:58.246.57.26[显示全部帖子]

   1.可以选择自然日坐标,但是非交易日K的数据是虚构的。没什么实际意义啊。
2.我上面代码是在交易日坐标基础上考虑的。你也可以加载在非交易日坐标上。那么信号就是出现在非交易日上。只是这样的意义是什么呢?原本应该在交易日出现的信号,现在在非交易日出现。如果是实盘的话,你最终效果就是该平的仓位还在那里没有平。因为你在非交易日已经出现过信号了,现在不会再出现了。


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