金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
楼主: 技术003

【经验分享】阿火秘笈_编写技巧汇总

[复制链接]

70

主题

190

帖子

275

积分

Rank: 9Rank: 9Rank: 9

等级: 管理员

注册:
2021-5-18
曾用名:
 楼主| 发表于 2021-6-23 15:27 | 显示全部楼层
十二、突破模型信号也会消失的一个例子及其处理方法,大家小心。
比如,大家常用的四周法则,一般人都是这样写的
[PEL] 复制代码
//4周转向
hh:=ref(hhv(h,20),1);
ll:=ref(llv(l,20),1);
entertime:=time<=143000;
if h>hh then begin//突破高点,平空做多
 sellshort(1,1,limitr,max(o,hh+0.2)+0.6);
 buy(holding=0 and entertime,1,limitr,max(o,hh+0.2)+0.6);
end

if l<ll then begin
 sell(1,1,limitr,min(o,ll-0.2)-0.6);//突破低点,平多做空
 buyshort(holding=0 and entertime,1,limitr,min(o,ll-0.2)-0.6);
end

if time>=150000 then begin//收盘平仓
 sell(1,1,limitr,o);
 sellshort(1,1,limitr,o);
end

咋一看,没啥问题。其实信号也是会消失的,或者出现“才买入,又立马卖出”的情况

比如某根K线,h>hh 和 l<ll 同时成立的时候。而盘后静态来看,是看不出问题的。


一般模型遵循的写法是先平后开,且要同时注意做多条件和做空条件同时成立时的处理

以上模型,改写为如下,信号就不会闪烁:

[PEL] 复制代码
//4周转向[/p][p=18, null, left][backcolor=rgb(255, 255, 255)]hh:=ref(hhv(h,20),1);
ll:=ref(llv(l,20),1);
entertime:=time<=143000;
If holding<0 and h>hh then begin
   sellshort(1,1,limitr,max(o,hh+0.2)+0.6);//先是平仓
   buy(1,1,limitr,max(o,hh+0.2)+0.6);
   goto skip@;
end

if holding>0 and l<ll then begin
   sell(1,1,limitr,min(o,ll-0.2)-0.6);//先是平仓
   buyshort(1,1,limitr,min(o,ll-0.2)-0.6);
end
skip@;

//注意做多条件和做空条件同时成立的处理方法,这里采用20周期均线向上才做多,向下才做空
if holding=0 and h>hh and ref(c,1)>ref(c,20) and entertime then buy(1,1,limitr,max(o,hh+0.2)+0.6);//后开仓
if holding=0 and l<ll  and ref(c,1)<ref(c,20) and entertime then buyshort(1,1,limitr,min(o,ll-0.2)-0.6);//后开仓
if time>=150000 then begin
  sell(1,1,limitr,o);
  sellshort(1,1,limitr,o);
end




金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

70

主题

190

帖子

275

积分

Rank: 9Rank: 9Rank: 9

等级: 管理员

注册:
2021-5-18
曾用名:
 楼主| 发表于 2021-6-23 15:45 | 显示全部楼层
十三、手机远程控制电脑的方法,随时随心随地监控交易


现在很多程序化用户都想实现无人值守交易,但是又担心交易的服务器、PC出现异常故障。
这种情况下我们完全可以用通用的监控工具来远程查看、控制电脑,非常方便。
目前大家常用的远程控制软件为向日葵,免费使用。手机可以直接访问电脑,随身带手机即可操控电脑交易端。
1、电脑端下载非企业用户向日葵远程终端,地址https://sunlogin.oray.com/download
2、手机端去应用市场搜索向日葵,下载安装即可,支持安卓与苹果。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

70

主题

190

帖子

275

积分

Rank: 9Rank: 9Rank: 9

等级: 管理员

注册:
2021-5-18
曾用名:
 楼主| 发表于 2021-6-23 15:52 | 显示全部楼层
十四、K线未走完提前下单,次周期自动回复持仓的写法(目前可以直接使用系统自带的持仓同步功能即可)


有2中情况,第一种,信号一出来就下单,此周期恢复持仓。第二种,提前N秒下单,次周期恢复持仓。当然,也有人次周期不恢复持仓的。哈哈
这里仅以第一种情况举个例子,供大家参考:
[PEL] 复制代码
runmode:0;
globalvariable:cc=0,att=0;
islast:=islastbar;
bb:=c>o+0.6;
ss:=c<o-0.6;
if cc>0 and ss then cc:=0;
if cc<0 and bb then cc:=0;
if cc=0 and bb then cc:=1;
if cc=0 and ss then cc:=-1;
lcc:=ref(cc,1);
if islast then att:=barpos;

if (lcc>0 and cc<=0) or (islast and cc<=0 and barpos>att and tbuyholding(1)>0) then begin
 exitlong:1;
 if lcc>0 and cc<=0 and islast then att:=barpos;
end
if (lcc<0 and cc>=0) or (islast and cc>=0 and barpos>att and tsellholding(1)>0) then begin
 exitshort:1;
 if lcc<0 and cc>=0 and islast then att:=barpos;
end
if (lcc<=0 and cc>0) or (islast and cc>0 and barpos>att and tbuyholding(1)=0) then begin
 enterlong:1;
 if lcc<=0 and cc>0 and islast then att:=barpos;
end
if (lcc>=0 and cc<0) or (islast and cc<0 and barpos>att and tsellholding(1)=0) then begin
 entershort:1;
 if lcc>=0 and cc<0 and islast then att:=barpos;
end


金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

70

主题

190

帖子

275

积分

Rank: 9Rank: 9Rank: 9

等级: 管理员

注册:
2021-5-18
曾用名:
 楼主| 发表于 2021-6-23 15:58 | 显示全部楼层
十五、史上最简明的后台下单模板,适用于满仓反手交易(阿火原创)


使用软件自带的撤单追单功能,适合于一般大众需求,如有更加个性化的要求可另外定制。
说明:固定轮询1秒或者高频,逐K线模式,读取账户里的仓位,空单平仓完毕才能开多,多单平仓完毕才能开空。需要多个模型组合在一起的话,把各个模型组合在一起就行了。组合方法见上面的其他方法
[PEL] 复制代码
cc:=holding;//用于获取理论持仓,请放在信号稳定的位置
if holding>0 and c<ref(c,1) then sell(1,1,market);
if holding<0 and c>ref(c,1) then sellshort(1,1,market);
if holding=0 and c>ref(c,1) then buy(1,1,market);
if holding=0 and c<ref(c,1) then buyshort(1,1,market);
if not(islastbar) or workmode<>1 then exit;

ac:='800988';//把800988改成自己的下单账户
buyhold:=tbuyholdingex(ac,stklabel,1);
sellhold:=-tsellholdingex(ac,stklabel,1);
wt:=tremainqty(0,ac,stklabel);
if wt>0.5 then exit;
else goal:=if((buyhold+sellhold)*cc<-0.5,0,cc);
duo:=max(goal,0)-buyhold;
kon:=min(goal,0)-sellhold;
if duo>0.5 then tbuy(1,duo,mkt,0,0,ac);
if duo<-0.5 then tsell(1,duo,mkt,0,0,ac);
if kon<-0.5 then tbuyshort(1,kon,mkt,0,0,ac);
if kon>0.5 then tsellshort(1,kon,mkt,0,0,ac);


金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

70

主题

190

帖子

275

积分

Rank: 9Rank: 9Rank: 9

等级: 管理员

注册:
2021-5-18
曾用名:
 楼主| 发表于 2021-6-23 15:59 | 显示全部楼层
十六、CTP账户的跟单VBA代码


B账户跟着A账户做单(前提是知道A账户的密码,在同一个金字塔同时登陆A账户和B账户)
[Visual Basic] 复制代码
Sub ORDER_OrderStatusEx2(OrderID, Status, Filled, Remaining, Price, Code, Market, OrderType, Aspect, Kaiping, Account, AccountType)
 if Status="Tradeing" and filled>0 and Account="8000000000" then
  if aspect=0 then
   if kaiping=0 then order.Buy 1,filled,0,0,code,market,"800000",0
   if kaiping>0 then order.sellshort 1,filled,0,0,code,market,"800000",0
  end if
  if aspect=1 then
   if kaiping=0 then order.Buyshort 1,filled,0,0,code,market,"800000",0
   if kaiping>0 then order.sell 1,filled,0,0,code,market,"800000",0
  end if
 end if
End Sub


金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

70

主题

190

帖子

275

积分

Rank: 9Rank: 9Rank: 9

等级: 管理员

注册:
2021-5-18
曾用名:
 楼主| 发表于 2021-6-23 16:01 | 显示全部楼层
十七、后台持仓同步的写法


最近怎么老是有人求助 后台持仓同步 的写法
现贡献一下,有谁赚到钱了记得请吃饭送美女
[PEL] 复制代码
//注意:不勾选软件自带追单功能,此模型自带
//固定1秒轮询
cc:=holding;
if holding>0 and c<ref(c,1) then sell(1,1,market);
if holding<0 and c>ref(c,1) then sellshort(1,1,market);
if holding=0 and c>ref(c,1) then buy(1,1,market);
if holding=0 and c<ref(c,1) then buyshort(1,1,market);
if not(islastbar) or workmode<>1 then exit;
tm:=30;//撤单时间
ac:='800988';//下单账户
wt:=tremainqty(0,ac,stklabel);
buyhold:=tbuyholdingex(ac,stklabel,1);
sellhold:=tsellholdingex(ac,stklabel,1);
if wt>0.5 and tsubmit(0)>tm then tcancelex(1,0,ac,stklabel);//如果用软件自带的撤单功能,这句删除。
if wt<0.5 then begin
 kc1:=max(cc,0)-buyhold;
 kc2:=abs(min(cc,0))-sellhold;
 if kc1<-0.5 then tsell(1,abs(kc1),mkt,0,0,ac),allowrepeat;
 if kc2<-0.5 then tsellshort(1,abs(kc2),mkt,0,0,ac),allowrepeat;
 if sellhold<0.5 and kc1>0.5 then tbuy(1,kc1,mkt,0,0,ac),allowrepeat;
 if buyhold<0.5  and kc2>0.5 then tbuyshort(1,kc2,mkt,0,0,ac),allowrepeat;
end


金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

70

主题

190

帖子

275

积分

Rank: 9Rank: 9Rank: 9

等级: 管理员

注册:
2021-5-18
曾用名:
 楼主| 发表于 2021-6-23 16:02 | 显示全部楼层
十八、 自己在模型里计算盈亏情况的一个简便方法。


从另外一个角度说明了金字塔的测试结果是正确的。
[PEL] 复制代码
//方法示例如下:(这里股指上的简单的均线系统为例)

variable:sumwealth=0;
ma10:=ma(c,5);
ma25:=ma(c,25);
sxf:=0.01/100;//手续费0.01%
if holding>0 and ma10<ma25 then begin
 sell(1,1,thisclose);
 sumwealth:=sumwealth+1*c*300*(1-sxf);//卖出时减去交易额
end
if holding<0 and ma10>ma25 then begin
 sellshort(1,1,thisclose);
 sumwealth:=sumwealth-1*c*300*(1+sxf);//买入时加上交易额
end
if holding=0 and ma10>ma25 then begin
 buy(1,1,thisclose);
 sumwealth:=sumwealth-1*c*300*(1+sxf);
end
if holding=0 and ma10<ma25 then begin
 buyshort(1,1,thisclose);
 sumwealth:=sumwealth+1*c*300*(1-sxf);
end

zichan:sumwealth+holding*c*300-abs(holding)*c*300*sxf,noaxis;


金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

70

主题

190

帖子

275

积分

Rank: 9Rank: 9Rank: 9

等级: 管理员

注册:
2021-5-18
曾用名:
 楼主| 发表于 2021-6-23 16:06 | 显示全部楼层
十九、做参数优化时,优化特定指标的方法


大家都知道,参数优化时,金字塔自带的几点优化指标是:收益率,正确率,最大回撤,MAR比例等等
可是,有时候这些并不是我们评估模型的指标,怎么办


其实,我们可以输出自己想要的指标。这里随便举个例子,比如,我评估模型时,参考的是收益回撤比(收益/最大回撤)和单笔收益(收益/交易次数)
我们可以这样(参数y):
[PEL] 复制代码
if holding>0 and time>=150000 then sell(1,1,market);
if holding<0 and time>=150000 then sellshort(1,1,market);
if holding=0 and c>ref(c,y) and time<=100000 then buy(1,1,market);
if holding=0 and c<ref(c,y) and time<=100000 then buyshort(1,1,market);

zichan:asset,noaxis;
if barpos=1 then begin
MaxAsset:=zichan;
hc:=0;
end
if zichan>MaxAsset then MaxAsset:=zichan;
if MaxAsset-zichan>hc then hc:=MaxAsset-zichan;
cishu:=totaltrade,linethick0;

if islastbar then debugfile('c:\moxing.txt',numtostr(y,0)&' '&numtostr(zichan,0)&' '&numtostr(hc,0)&' '&numtostr((zichan-1000000)/cishu,0)&' %.1f',(zichan-1000000)/hc);


然后启动优化(要优化到最后一天的行情,如果不想优化这么长,注意相应地修改 if islastbar then 这个条件)

最后把C盘底下的moxing文本文件导入到excel,就可以进行排序、评估参数了。


补充:现有函数已支持自定义优化项,参考函数AddTestReport('资产',ASSET);表示在专业测试报告中添加'资产'这个自定义数据项.


金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

0

主题

1

帖子

1

积分

Rank: 1

等级: 新手上路

注册:
2021-9-3
曾用名:
发表于 2021-9-20 19:58 | 显示全部楼层
技术003 发表于 2021-6-23 15:27
十二、突破模型信号也会消失的一个例子及其处理方法,大家小心。
比如,大家常用的四周法则,一般人都是这 ...

第6行和第17行,都有buy指令,不重复吗?
回复

使用道具 举报

2

主题

3

帖子

3

积分

Rank: 1

等级: 新手上路

注册:
2021-9-10
曾用名:
发表于 2021-9-22 11:09 | 显示全部楼层
技术003 发表于 2021-6-11 16:00
一,“K线走完模式”转换成“固定轮询模式”或者“混合模式”的方法

以便把各个模型放在同一个框架内进 ...

对“可采用这种方法,把holding用全局变量cc替换,然后加入注释部分代码,注释色部分代码要放在信号语句的前面。”这句话里面把holding用全局变量cc替换不是很理解,既然替换了,为何还会出现:if holding>0 and cc<=0 then sell(1,1,limitr,o);前面的holding>0代表有多头持仓,and cc<=0,请问这里的cc<=0是啥意思?谢谢
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-22 12:56 , Processed in 0.310661 second(s), 25 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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