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


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件公式模型编写问题提交 → [求助]编写求助红色//后括号部分是问题

   

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


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

主题:[求助]编写求助红色//后括号部分是问题

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


加好友 发短信
等级:新手上路 帖子:16 积分:0 威望:0 精华:0 注册:2016/12/27 16:31:06
[求助]编写求助红色//后括号部分是问题  发帖心情 Post By:2020/5/21 17:00:34    Post IP:113.222.187.148[只看该作者]

input:inATR(14,1,100,1),risk(1,0,3,0.1),m(5,0,5,1),db(1,0.1,100,0.1); 
//risk风险,m是ATR比例,inATR日数,db品种最小波动
VARIABLE:n=0;
rATR:=MA(ref(tr,1),inATR);
CYC:=BARSLAST(DATE<>REF(DATE,1))+1;
//OPP:=VALUEWHEN(CYC=1,OPEN);
OPP:=ref(open,barslast(todaybar=1));//开盘价
buyo:=OPP+(INTPART(rATR/m/db))*db;//开盘价+浮动区间上轨
sello:=OPP-(INTPART(rATR/m/db))*db;//开盘价+浮动区间下轨

lotst:asset*risk*0.005/(rATR*multiplier),linethick0; 
lots:=if(risk=0,1,lotst); //如果risk取0,表示固定开1手
T1:=TIME>090000 AND TIME <145500;
T2:=TIME>=145800;//需要加入交易时间限制来防止结尾开两次仓位 //(这里的时间设置的是早上开盘那怎么改成当天生成的第一根k线呢?、或者晚上9:30-第二天15:00,以及停了夜盘也不受影响的写法)

tbc:=h <> l;//判断是否停板
if holding=0 and tbc then //不是停板才可以交易 (有时候)
begin 
if h > buyo and n<2 and T1 then //开多  
begin 
buyp:=max(o,buyo); 
buy(1,lots,limitr,buyp);//(买入的价格并不是设计的价格设计的是开盘价+atr/5为上轨买点,但是这个测试的时候完全不对,比如测试棕榈连续,2.4日显示买入价为5510,2.5日显示买入价为5641)
n:=n+1; 
end;//开多结束 
else if l < sello and n<2 and T1 then //开空 
begin 
sellp:=min(o,sello); 
buyshort(1,lots,limitr,sellp);
n:=n+1; 
end;
if time=CLOSETIME(0)then n:=0;//清空交易次数限定 
end;//holding=0 

if holding>0 and tbc then //已有多仓 
begin 
exitlongp:=enterprice-2*rATR/m; //两倍百分比ATR止损
if l <exitlongp and enterbars <>0 or T2 then //出场 
begin  
sell(1,0,MARKETR);  
end;//出场 
 
end;//else 
begin
if holding<0 and tbc then //已有空仓 
begin 
exitlongp:=enterprice+2*rATR/m; 
if h >exitlongp and enterbars <>0 or T2 then //出场 
begin  
sellshort(1,0,MARKETR);  
end;//出场 
end;//else 
end;//holding<0 

持仓:holding,linethick0;
资产:asset,noaxis;
可用现金:cash(0),linethick0;
[此贴子已经被作者于2020/5/21 17:02:30编辑过]

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


加好友 发短信
等级:超级版主 帖子:14496 积分:0 威望:0 精华:0 注册:2017/7/4 13:40:18
  发帖心情 Post By:2020/5/21 17:10:00    Post IP:180.169.30.6[只看该作者]

 1.“(这里的时间设置的是早上开盘那怎么改成当天生成的第一根k线呢?、或者晚上9:30-第二天15:00,以及停了夜盘也不受影响的写法)
 这是要做什么样的时间限制?限制交易时间还是限制要在白盘收盘平仓?你重新描述下这个逻辑。
2.“//(买入的价格并不是设计的价格设计的是开盘价+atr/5为上轨买点,但是这个测试的时候完全不对,比如测试棕榈连续,2.4日显示买入价为5510,2.5日显示买入价为5641)

什么周期上的运行结果。


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


加好友 发短信
等级:新手上路 帖子:16 积分:0 威望:0 精华:0 注册:2016/12/27 16:31:06
  发帖心情 Post By:2020/5/21 17:15:33    Post IP:113.222.187.148[只看该作者]

日内1分钟

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


加好友 发短信
等级:新手上路 帖子:16 积分:0 威望:0 精华:0 注册:2016/12/27 16:31:06
  发帖心情 Post By:2020/5/21 17:21:51    Post IP:113.222.187.148[只看该作者]

问题1:这个主要是想确定开盘价,以夜盘开盘价为准,之前是设置了一个区间,但是考虑到有时候没有夜盘,怕有影响

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


加好友 发短信
等级:新手上路 帖子:16 积分:0 威望:0 精华:0 注册:2016/12/27 16:31:06
  发帖心情 Post By:2020/5/21 17:23:09    Post IP:113.222.187.148[只看该作者]

第一次提交的时候没有预览 结果字看不清,第二次编辑一直显示审核 不好意思

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


加好友 发短信
等级:超级版主 帖子:14496 积分:0 威望:0 精华:0 注册:2017/7/4 13:40:18
  发帖心情 Post By:2020/5/21 17:32:44    Post IP:180.169.30.6[只看该作者]

如果要取第一个K的开盘价可以用ref(o,TODAYBAR)。有夜盘取到夜盘的,没有则取到白盘的 。你可以试下。


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


加好友 发短信
等级:新手上路 帖子:16 积分:0 威望:0 精华:0 注册:2016/12/27 16:31:06
  发帖心情 Post By:2020/5/21 17:55:30    Post IP:113.222.187.148[只看该作者]

input:inATR(14,1,100,1),risk(1,0,3,0.1),m(5,0,5,1),db(2,0.1,100,0.1); 
//risk风险,m是ATR比例,inATR日数,db品种最小波动
VARIABLE:n=0;
rATR:=MA(ref(tr,1),inATR);
CYC:=BARSLAST(DATE<>REF(DATE,1))+1;
//OPP:=VALUEWHEN(CYC=1,OPEN);
OPP:=ref(o,TODAYBAR);
buyo:=OPP+(INTPART(rATR/m/db))*db;//开盘价+浮动区间上轨
sello:=OPP-(INTPART(rATR/m/db))*db;//开盘价+浮动区间下轨

lotst:asset*risk*0.005/(rATR*multiplier),linethick0; 
lots:=if(risk=0,1,lotst); //如果risk取0,表示固定开1手
//T1:=TIME>090000 AND TIME <145500;
T2:=TIME>=145800;//需要加入交易时间限制来防止结尾开两次仓位

tbc:=h <> l;//判断是否停板
if holding=0 and tbc then //不是停板才可以交易 
begin 
if h > buyo and n<2 then //开多  
begin 
buyp:=max(o,buyo); 
buy(1,lots,limitr,buyp);
n:=n+1; 
end;//开多结束 
else if l < sello and n<2 then //开空 
begin 
sellp:=min(o,sello); 
buyshort(1,lots,limitr,sellp);
n:=n+1; 
end;
if time=CLOSETIME(0)then n:=0;//清空交易次数限定 
end;//holding=0 

if holding>0 and tbc then //已有多仓 
begin 
exitlongp:=enterprice-2*rATR/m; //两倍百分比ATR止损
if l <exitlongp and enterbars <>0 or T2 then //出场 
begin  
sell(1,0,MARKETR);  
end;//出场 
 
end;//else 
begin
if holding<0 and tbc then //已有空仓 
begin 
exitlongp:=enterprice+2*rATR/m; 
if h >exitlongp and enterbars <>0 or T2 then //出场 
begin  
sellshort(1,0,MARKETR);  
end;//出场 
end;//else 
end;//holding<0 

持仓:holding,linethick0;
资产:asset,noaxis;
可用现金:cash(0),linethick0;

//你好,改成了以后,出现了新问题,没改前2.4日是做多但是不知道为什么现在变成做空了,设计是做多,而且价格问题依然没有改变,不是open±ATR/5这个上下轨

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


加好友 发短信
等级:超级版主 帖子:14496 积分:0 威望:0 精华:0 注册:2017/7/4 13:40:18
  发帖心情 Post By:2020/5/22 9:25:04    Post IP:180.169.30.6[只看该作者]

1. 开仓价 是buyp:=max(o,buyo);  取这个buyo和开盘价的最高价。如果不是buyo那就是开仓K的开盘价。
2.(INTPART(rATR/m/db))*db  这个值恒为0. 不知道你原本思路是怎样的。反正这个直接全是0.
3.至于信号变成了开空这个,代码里面你只是改了取值的方式。影响到信号的只有K线数据的起点位置可能会影响到。你改的那个不影响整体逻辑。



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


加好友 发短信
等级:新手上路 帖子:16 积分:0 威望:0 精华:0 注册:2016/12/27 16:31:06
  发帖心情 Post By:2020/5/22 13:08:16    Post IP:113.222.178.151[只看该作者]

1.是这个设计思路,价格大于等于上轨用buyo,开盘价跳空高开用开盘价。
2.这个值是想取前14日ATR的m分之一,然后按可交易价格取整来,开盘价加减这个值设置交易上下轨(最小跳动价位DB是自己手动设置的,最小跳动价格可以自动跟踪品种自己变吗?、),(INTPART(rATR/m/db))*db不是很明白为啥是0,请问一下应该改成什么样呢?、
3.改成OPP:=ref(o,TODAYBAR)有点问题,感觉这个第一根K线的取值时间点有点问题,我使用原先的OPP:=VALUEWHEN(CYC=1,OPEN)这个,2.4日棕榈是正常做多,这个先不考虑了 我还是按原来的再多加入一段时间来限制交易时间段好了。

设置了时间段的,(INTPART(rATR/m/db))*db这个值不知道应该怎么修改。

input:inATR(14,1,100,1),risk(1,0,3,0.1),m(5,0,5,1),db(2,0.1,100,0.1); 
//risk风险,m是ATR比例,inATR日数,db品种最小波动
VARIABLE:n=0;
rATR:=MA(ref(tr,1),inATR);
CYC:=BARSLAST(DATE<>REF(DATE,1))+1;
OPP:=VALUEWHEN(CYC=1,OPEN);
//OPP:=ref(o,TODAYBAR);
buyo:=OPP+(INTPART(rATR/m/db))*db;//开盘价+浮动区间上轨
sello:=OPP-(INTPART(rATR/m/db))*db;//开盘价+浮动区间下轨

lotst:asset*risk*0.005/(rATR*multiplier),linethick0; 
lots:=if(risk=0,1,lotst); //如果risk取0,表示固定开1手
T1:=TIME>090000 AND TIME <145500;//开仓时间
T2:=TIME>213000 AND TIME <230000;//开仓时间
T3:=T1 OR T2;
T4:=TIME>=145800;//需要加入交易时间限制来防止结尾开两次仓位

tbc:=h <> l;//判断是否停板
if holding=0 and tbc then //不是停板才可以交易 
begin 
if h >= buyo and n<2 and T3 then //开多  
begin 
buyp:=max(o,buyo); 
buy(1,lots,limitr,buyp);
n:=n+1; 
end;//开多结束 
else if l <= sello and n<2 then //开空 
begin 
sellp:=min(o,sello); 
buyshort(1,lots,limitr,sellp);
n:=n+1; 
end;
if time=CLOSETIME(0)then n:=0;//清空交易次数限定 
end;//holding=0 

if holding>0 and tbc then //已有多仓 
begin 
exitlongp:=enterprice-2*rATR/m; //两倍百分比ATR止损
if l <exitlongp and enterbars <>0 or T4 then //出场 
begin  
sell(1,0,MARKETR);  
end;//出场 
 
end;//else 
begin
if holding < 0 and tbc then //已有空仓 
begin 
exitlongp:=enterprice+2*rATR/m; 
if h > exitlongp and enterbars <> 0 or T4 then //出场 
begin  
sellshort(1,0,MARKETR);  
end;//出场 
end;//else 
end;//holding<0 

持仓:holding,linethick0;
资产:asset,noaxis;
可用现金:cash(0),linethick0;


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


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

为0 是因为经过取值之后的缘故。这个rATR的值基本都小于10,再除5,再加上取整。最终导致值变成0.

这个地方你应该输出看下你这里的rATR的值。都不大。 所以你这里估计要调整下思路了。比如调整下M值,M太大,atr则太小。
[此贴子已经被作者于2020/5/22 13:50:20编辑过]


命数如织,当如磐石。
 回到顶部
总数 15 1 2 下一页