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


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件公式模型编写问题提交 → 如何编写?谢谢

   

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


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

主题:如何编写?谢谢

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


加好友 发短信
等级:新手上路 帖子:11 积分:0 威望:0 精华:0 注册:2021/1/29 17:10:04
如何编写?谢谢  发帖心情 Post By:2021/2/27 22:18:48    Post IP:125.68.170.71[只看该作者]

qqw
INPUT:SS(1,1,10000,1),X(5,1,100,1),NMIN(10,1,100,1);

//中间变量



n1:=barslast(DATE<>REF(DATE,1))+1;

JJX:ROUNDS(IF(sum(vol,n1)=0,C,bb1,COLORYELLOW;
red:if(JJX>=bb1,JJX,drawnull),colorred;

ZS:CALLSTOCK(STKLABEL,VTCLOSE,6,-1);//
GD:=bb2,1);//X是参数,自行调整
DD:=bb3,1);//5k低点





T1:=TIME>OPENTIME(1) AND TIME<CLOSETIME(0)-NMIN*100;
T2:=TIME>=CLOSETIME(0)-NMIN*100;
手数:=SS;


//交易条件

KD:=aa1 AND CLOSE>ZS AND ss1  AND JJX>ZS AND T1 and ww  and  holding<=0;          //开多条件
PD:=CLOSE<JJX  ;   //平多条件
KK:=CLOSE<DD AND CLOSE<ZS AND ee1)AND JJX<ZS AND T1 and WW AND   holding>=0 ;          //开空条件
PK:=CLOSE>JJX  ;//平空条件

         
平空:SELLSHORT(PK,1,THISCLOSE);                  //平空信号
开多:BUY(KD AND HOLDING=0,1,THISCLOSE);          //开多信号
平多:SELL(PD,1,THISCLOSE);                       //平多信号
开空:BUYSHORT(KK AND HOLDING=0,1,THISCLOSE);     //开空信号
收盘平多:SELL(T2 AND HOLDING>0,0,MARKET) ;
收盘平空:SELLSHORT(T2 AND HOLDING<0,0,MARKET) ;

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

以上编写完成后,如何加入,一天只操作两次,(开仓两次,平仓两次),然后不再开平仓,并且,
如果当天早上下午2点前只开平仓一次,超两点后,条件满足也不再开仓
谢谢

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


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

 用全局变量做这种控制次数的操作。然后给所有开仓额外加一个时间条件即可。


VARIABLE:ct1:=0,ct2:=0;//2个全局变量一个控制开仓次数,一个控制平仓次数。
if TODAYBAR=1 then //每日第一个K重置全局变量。
begin
ct1:=0;
ct2:=0;   
end

timecd:time<=180000;//时间限制的判断。大于2点不再开仓。


input:n(9,1,100,10),p1(3,2,40,4),p2(3,2,40,4);//参数设置
RSV:=(CLOSE-LLV(LOW,N))/(HHV(HIGH,N)-LLV(LOW,N))*100;
K:=SMA(RSV,P1,1);
D:=SMA(K,P2,1);
J:=3*K-2*D,NODRAW;
//开平条件1
kdjjc:cross(k,d),NODRAW;//kdj金叉
kdjsc:cross(d,k),NODRAW;

input:p(26,20,100,8),s(12,5,40,4),m(9,2,60,6);
DIFF :=EMA(CLOSE,S) - EMA(CLOSE,P);
DEA  :=EMA(DIFF,M);
MACD1 :=2*(DIFF-DEA), COLORSTICK;
//开平条件2
macdjc:cross(diff,dea),NODRAW;//macd金叉
macdsc:cross(dea,diff),NODRAW;


if kdjjc and ct1<=1 and timecd and holding=0 then //开多
begin
buy(holding=0,1,market);
ct1:=ct1+1;   
end

if kdjsc and ct2<=1 and holding>0 then //平多
begin
sell(holding>0,holding,market);
ct2:=ct2+1;   
end


if macdsc and ct1<=1  and timecd and holding=0 then //开空
begin
buyshort(holding=0,1,market);
ct1:=ct1+1;   
end

if macdjc and ct2<=1  and holding<0 then //平空
begin
sellshort(holding<0,holding,market);
ct2:=ct2+1;
end




这部分代码为例。核心思路都实现在上面代码里了。


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


加好友 发短信
等级:新手上路 帖子:11 积分:0 威望:0 精华:0 注册:2021/1/29 17:10:04
是否正确?  发帖心情 Post By:2021/3/1 11:49:40    Post IP:125.68.170.71[只看该作者]

ct1:=0;
ct2:=0;   
表示开平仓次数为0?

下面用到的ct1:=ct1+1;  / ct2:=ct2+1;
表示,开平仓次数为2,如果把次数变为开平仓3次,那么就是ct1:=ct1+2;  / ct2:=ct2+2、、、、是否正确?
谢谢

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


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

1. "ct1:=0;
ct2:=0;   
表示开平仓次数为0?"是这意思。

2.
“if kdjjc and ct1<=1 and timecd and holding=0 then //开多”

你要改变次数 改这里的判断就行了。而不是修改统计的方式。


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


加好友 发短信
等级:新手上路 帖子:11 积分:0 威望:0 精华:0 注册:2021/1/29 17:10:04
我改完后,还是没变化,哪里错了  发帖心情 Post By:2021/3/1 12:16:19    Post IP:125.68.170.71[只看该作者]

dm:=4-INTPART(LOG(C));
INPUT:SS(1,1,10000,1),X(1,1,100,1),NMIN(10,1,100,1);
//用全局变量做这种控制次数的操作。然后给所有开仓额外加一个时间条件即可。
VARIABLE:ct1:=0,ct2:=0;//2个全局变量一个控制开仓次数,一个控制平仓次数。
if TODAYBAR=1 then //每日第一个K重置全局变量。
begin
ct1:=0;
ct2:=0;   
end

timecd:time<=142000;//时间限制的判断。大于2点不再开仓。
//引入
dm:=4-INTPART(LOG(C));
INPUT:SS(1,1,10000,1),X(1,1,100,1),NMIN(10,1,100,1);

//中间变量


n1:=barslast(DATE<>REF(DATE,1))+1;

JJX:xxxxxxxxxx;//日内均价线
//red:xxxxxxx;

ZS:/xxxxxxxx;//昨收
GD:=xxxxxxxx;//X是参数,自行调整
DD:=xxxxxxxxx;//5k低点

EMA11:xxxxx;
EMA13:xxxxxx;
//通道

大通xx:xxxxx;//X是参数,自行调整
大通xx:JJX*0.995;
//收盘前平仓
T1:=TIME>OPENTIME(1) AND TIME<CLOSETIME(0)-NMIN*100;
T2:=TIME>=CLOSETIME(0)-NMIN*100;
手数:=SS;


//交易条件

KD:=xxxxxxx and  holding<=0; //开多条件
PD:=xxxxx  ; //x ;          //平多条件
KK:=xxxxxx AND  holding>=0 ; //开空条件
PK:=xxxxxx;          //平空条件
PK:=xxxxxx;//平空条件

if kd and ct1<=1 and timecd and holding=0 then //开多
begin
buy(holding=0,1,market);
ct1:=ct1+1;   
end

if PD and ct2<=1 and holding>0 then //平多
begin
sell(holding>0,holding,market);
ct2:=ct2+1;   
end

if kk and ct1<=1  and timecd and holding=0 then //开空
begin
buyshort(holding=0,1,market);
ct1:=ct1+1;   
end

if pk and ct2<=1  and holding<0 then //平空
begin
sellshort(holding<0,holding,market);
ct2:=ct2+1;
end


平空:SELLSHORT(PK,1,THISCLOSE);                  //平空信号
开多:BUY(KD AND HOLDING=0,1,THISCLOSE) and TOTALDAYTRADE<2;          //开多信号
平多:SELL(PD,1,THISCLOSE);                       //平多信号
开空:BUYSHORT(KK AND HOLDING=0,1,THISCLOSE)and TOTALDAYTRADE<2 ;     //开空信号
收盘平多:SELL(T2 AND HOLDING>0,0,MARKET) ;
收盘平空:SELLSHORT(T2 AND HOLDING<0,0,MARKET) ;

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

我改成if格式后,测试完,开平仓没有变化呢》、,哪里的错误呢?
谢谢


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


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

 你贴一个能编译通过的代码吧。  你上面这样的 我没办法本地测试的。


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


加好友 发短信
等级:新手上路 帖子:11 积分:0 威望:0 精华:0 注册:2021/1/29 17:10:04
  发帖心情 Post By:2021/3/1 17:07:02    Post IP:125.68.170.71[只看该作者]

以下是引用FireScript在2021/3/1 12:25:01的发言:
 你贴一个能编译通过的代码吧。  你上面这样的 我没办法本地测试的。

INPUT:SS(1,1,10000,1),X(1,1,100,1),NMIN(10,1,100,1);

VARIABLE:ct1:=0,ct2:=0;//2个全局变量一个控制开仓次数,一个控制平仓次数。
if TODAYBAR=1 then //每日第一个K重置全局变量。
begin
ct1:=0;
ct2:=0;   
end

 

timecd:time<=180000;//时间限制的判断。大于2点不再开仓。

//收盘前平仓
T1:=TIME>OPENTIME(1) AND TIME<CLOSETIME(0)-NMIN*100;
T2:=TIME>=CLOSETIME(0)-NMIN*100;
手数:=SS;

input:n(9,1,100,10),p1(3,2,40,4),p2(3,2,40,4);//参数设置
RSV:=(CLOSE-LLV(LOW,N))/(HHV(HIGH,N)-LLV(LOW,N))*100;
K:=SMA(RSV,P1,1);
D:=SMA(K,P2,1);
J:=3*K-2*D,NODRAW;
//开平条件1
kdjjc:cross(k,d) and T1 and  holding<=0 ,NODRAW;//kdj金叉
kdjsc:cross(d,k) AND T1 AND  holding>=0 ,NODRAW;

input:p(26,20,100,8),s(12,5,40,4),m(9,2,60,6);
DIFF :=EMA(CLOSE,S) - EMA(CLOSE,P);
DEA  :=EMA(DIFF,M);
MACD1 :=2*(DIFF-DEA), COLORSTICK;
//开平条件2
macdjc:cross(diff,dea)and T1 and  holding<=0,NODRAW;//macd金叉
macdsc:cross(dea,diff) AND T1 AND  holding>=0,NODRAW;


if kdjjc and ct1<=1 and timecd and holding=0 then //开多
begin
buy(holding=0,1,market);
ct1:=ct1+1;   
end

if kdjsc and ct2<=1 and holding>0 then //平多
begin
sell(holding>0,holding,market);
ct2:=ct2+1;   
end


if macdsc and ct1<=1  and timecd and holding=0 then //开空
begin
buyshort(holding=0,1,market);
ct1:=ct1+1;   
end

if macdjc and ct2<=1  and holding<0 then //平空
begin
sellshort(holding<0,holding,market);
ct2:=ct2+1;
end

平空:SELLSHORT(kdjsc,1,THISCLOSE);                  //平空信号
开多:BUY(kdjjc AND HOLDING=0,1,THISCLOSE) and TOTALDAYTRADE<2;          //开多信号
平多:SELL(macdsc,1,THISCLOSE);                       //平多信号
开空:BUYSHORT(macdsc AND HOLDING=0,1,THISCLOSE)and TOTALDAYTRADE<2 ;     //开空信号
收盘平多:SELL(T2 AND HOLDING>0,0,MARKET) ;
收盘平空:SELLSHORT(T2 AND HOLDING<0,0,MARKET) ;

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

首先感谢你的回答

以上我在你的KDJ,基础上完成一个模型,测试的结果是,收盘前能平仓,但是没有完成,一天只开仓两次,平仓两次,以后不再开仓的相法。如果开盘到下午只完成一次开平仓,即使下午2点过后也不再开仓的想法也没完成,
哪里编写错了?请帮助编写完成,再次感谢


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


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

 这几句删除掉。

平空:SELLSHORT(kdjsc,1,THISCLOSE);                  //平空信号
开多:BUY(kdjjc AND HOLDING=0,1,THISCLOSE) and TOTALDAYTRADE<2;          //开多信号
平多:SELL(macdsc,1,THISCLOSE);                       //平多信号
开空:BUYSHORT(macdsc AND HOLDING=0,1,THISCLOSE)and TOTALDAYTRADE<2 ;     //开空信号

因为前面的那部分代码 就是包含这部分的开仓思路了。并且在if里面设置了控制的逻辑。你这几句写上去就等于是不在控制逻辑范围内了。

我本地大致效果:


图片点击可在新窗口打开查看此主题相关图片如下:temp.png
图片点击可在新窗口打开查看


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