金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 9319|回复: 21

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

[复制链接]

70

主题

190

帖子

275

积分

Rank: 9Rank: 9Rank: 9

等级: 管理员

注册:
2021-5-18
曾用名:
发表于 2021-6-11 15:44 | 显示全部楼层 |阅读模式
//转自旧论坛版主阿火,感谢火哥对量化事业的付出与贡献,旧论坛原贴

陆续增加,目录如下:
1、“K线走完模式”转换成“固定轮询模式”或者“混合模式”的方法                    …………………………见 2楼
2、移动止损的编写方法                                                   …………………………见 3楼
3逐K线模式的模型,用免费版下单交易的方法                                      …………………………见 3楼
4日内满仓反手的写法                                                     …………………………见 4楼
5自行计算最大回撤的方法,放到逐K线模式的模型最后面即可                               …………………………见 5楼
6“后台下单模板”,可用于各种模型                                               …………………………见 6楼
7把各种模型组合成一个模型的方法,适用于所有模型                                       …………………………见 7楼
8提前N秒下单的方法,适用于各个周期                                         …………………………见 8楼
9通过飞信给自己发短信的VBA代码(现有版本可以直接给微信发送消息)                        …………………………见 9楼
10在小周期级别上引用无未来大周期指标的实际走势的方法                          …………………………见 10楼
11日内重新计算macd的方法,以避免跳空对指标造成的影响。                       …………………………见 10楼
12、突破模型信号也会消失的一个例子及其处理方法,大家小心。                    …………………………见 11楼
13、Andriod系统手机远程控制电脑的方法,随时随心随地监控交易                  …………………………见 12楼
14、K线未走完提前下单,次周期自动恢复持仓的写法                           …………………………见 13楼
15、史上最简明的后台下单模板,适用于满仓反手交易                            …………………………见 14楼
16、CTP账户的跟单VBA代码                                             …………………………见 15楼
17、后台持仓同步的写法                                               …………………………见 16楼
18、自己在模型里计算盈亏情况的一个简便方法                                   …………………………见 17楼
19、做参数优化时,优化特定指标的方法                                        …………………………见 18楼











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

使用道具 举报

70

主题

190

帖子

275

积分

Rank: 9Rank: 9Rank: 9

等级: 管理员

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

以便把各个模型放在同一个框架内进行图表程序化交易


举例:
均线交叉模型
运行于图表走完K线模式
[PEL] 复制代码
runmode:0;
ma5:=ma(c,5);
ma20:=ma(c,20);
entertime:=time>100000 and time<144500;

if holding>0 and ma5<ma20 then sell(1,1,market);
if holding<0 and ma5>ma20 then sellshort(1,1,market);
if holding=0 and ma5>ma20 and entertime then buy(1,1,market);
if holding=0 and ma5<ma20 and entertime then buyshort(1,1,market);

if time>=150000 then begin
  sell(1,1,market);
  sellshort(1,1,market);
end


怎么改动上面的均线交易模型让它在图表固定轮询模式下执行的效果和上部分代码应用在走完K线模式下完全一样

简单的改法,自然是把各个条件“过去化”,如:ma5 改为 ref(ma(c,5),1);但这种方法碰到大型的、复杂的模型时,容易出错

可采用这种方法,把holding用全局变量cc替换,然后加入注释部分代码,注释色部分代码要放在信号语句的前面。


运行于图表固定轮询模式


[PEL] 复制代码
runmode:0;
variable:cc=0;
ma5:=ma(c,5);
ma20:=ma(c,20);
entertime:=time>100000 and time<144500;

if holding>0 and cc<=0 then sell(1,1,limitr,o);               //注释变化
if holding<0 and cc>=0 then sellshort(1,1,limitr,o);        //注释变化
if holding=0 and cc>0 then buy(1,1,limitr,o);                  //注释变化
if holding=0 and cc<0 then buyshort(1,1,limitr,o);          //注释变化

if cc>0 and ma5<ma20 then cc:=0;
if cc<0 and ma5>ma20 then cc:=0;
if cc=0 and ma5>ma20 and entertime then cc:=1;
if cc=0 and ma5<ma20 and entertime then cc:=-1;
if time>=150000 then begin   cc:=0;


那么,下单条件可以K线走完,但止盈止损要盘中实时怎么处理呢?

这种逻辑就是代码实现K线走完模式和盘中模式并存,如下写法,就是在“开盘价下单语句”后面加入注释“盘中实时下单”就行了


运用于图表固定轮询模式


[PEL] 复制代码
runmode:0;
variable:zs=0,cc=0;
ma5:=ma(c,5);
ma20:=ma(c,20);
entertime:=time>100000 and time<144500;

if holding>0 and cc<=0 then sell(1,1,limitr,o);
if holding<0 and cc>=0 then sellshort(1,1,limitr,o);
if holding=0 and cc>0 then buy(1,1,limitr,o);
if holding=0 and cc<0 then buyshort(1,1,limitr,o);

//盘中实时下单
if cc>0 and l<zs then begin
   sell(1,1,limitr,min(o,zs-0.6));
   cc:=0;
end

//盘中实时下单
if cc<0 and h>zs then begin
   sellshort(1,1,limitr,max(o,zs+0.6));
   cc:=0;
end

if cc>0 and ma5<ma20 then cc:=0;
if cc<0 and ma5>ma20 then cc:=0;
if cc=0 and ma5>ma20 and entertime then begin
   cc:=1;
   zs:=c-10;
end

if cc=0 and ma5<ma20 and entertime then begin
   cc:=-1;
   zs:=c+10;
end

if time>=150000 then begin
   cc:=0;
end











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

使用道具 举报

70

主题

190

帖子

275

积分

Rank: 9Rank: 9Rank: 9

等级: 管理员

注册:
2021-5-18
曾用名:
 楼主| 发表于 2021-6-11 16:22 | 显示全部楼层
二、移动止损的编写方法:


还是以之前的模型为例,希望加入移动止损。
例如:
开仓后的最高点回落10个点要盘中止损离场
加入一个全局变量 hl,记录开多后的最高点,开空后的最低点:

[PEL] 复制代码
runmode:0;
variable:zs=0,cc=0,hl=0;
ma5:=ma(c,5);
ma20:=ma(c,20);
entertime:=time>100000 and time<144500;       //股指期货为例,其它品种自行修改时间

if holding>0 and cc<=0 then sell(1,1,limitr,o);
if holding<0 and cc>=0 then sellshort(1,1,limitr,o);
if holding=0 and cc>0 then buy(1,1,limitr,o);
if holding=0 and cc<0 then buyshort(1,1,limitr,o);

//移动止损多头离场
if cc>0 and l<zs then begin
   sell(1,1,limitr,min(o,zs-0.6));
   cc:=0;
end

//移动止损空头离场
if cc<0 and h>zs then begin
   sellshort(1,1,limitr,max(o,zs+0.6));
   cc:=0;
end

if cc>0 and ma5<ma20 then cc:=0;
if cc<0 and ma5>ma20 then cc:=0;
if cc=0 and ma5>ma20 and entertime then begin
   cc:=1;
   zs:=c-10;
   hl:=h;  //开仓后的最高值赋给hl
end

if cc=0 and ma5<ma20 and entertime then begin
  cc:=-1;
  zs:=c+10;
  hl:=l;   //开仓后的最低值赋给hl
end
//创新高后,上移hl
if cc>0 and h>hl then begin
  hl:=h;
  zs:=hl-10;
end
//创新低后,下移hl
if cc<0 and l<hl then begin
 hl:=l;
 zs:=hl+10;
end

//收盘平仓
if time>=150000 then begin
  cc:=0;
end


三、逐K线模式的模型,用旧图表下单交易的方法


[PEL] 复制代码
runmode:0;
variable:cc=0;
ma5:=ma(c,5);
ma20:=ma(c,20);
entertime:=time>100000 and time<144500;
exitlong:cc<>1,tfilter;
exitshort:cc<>-1,tfilter;
enterlong:ref(cc,1)<>1 and cc=1,tfilter;
entershort:ref(cc,1)<>-1 and cc=-1,tfilter;
if cc>0 and ma5<ma20 then cc:=0;
if cc<0 and ma5>ma20 then cc:=0;
if cc=0 and ma5>ma20 and entertime then cc:=1;
if cc=0 and ma5<ma20 and entertime then cc:=-1;
if time>=150000 then cc:=0;



原理是,用全局变量cc记录仓位,然后根据仓位的变化情况来确定下单信号


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

使用道具 举报

70

主题

190

帖子

275

积分

Rank: 9Rank: 9Rank: 9

等级: 管理员

注册:
2021-5-18
曾用名:
 楼主| 发表于 2021-6-11 16:45 | 显示全部楼层
四、日内满仓反手的写法


因为满仓的情况下,要等平仓单成交、保证金释放后,开仓下单才能成功。
用系统自带的orderqueue在平仓单没有第一时间成交的情况下有一定的局限性,可用如下的方法:
[PEL] 复制代码
runmode:0;
input:cw(3,1,10,1);
variable:cc=0;
ma5:=ma(c,5);
ma20:=ma(c,20);
entertime:=time>100000 and time<144500;  //开仓时间控制,商品时间自行修改

if holding>0 and cc<=0 then sell(1,cw,limitr,o);
if holding<0 and cc>=0 then sellshort(1,cw,limitr,o);

cond1:=cw+tholding2>=cw or not(islastbar); //平空成交后,"cw+tholding2>=cw "才会成立并开多
cond2:=cw-tholding2>=cw or not(islastbar); //平多成交后,"cw-tholding2>=cw "才会成立并开空


//此方法撤单和追单时间要控制在出信号的K线时间以内
if holding=0 and cc>0 and cond1 then buy(1,cw,limitr,o);        //cond1为控制新增开多条件
if holding=0 and cc<0 and cond2 then buyshort(1,cw,limitr,o);  //cond2位控制新增开空条件

if cc>0 and ma5<ma20 then cc:=0;
if cc<0 and ma5>ma20 then cc:=0;
if cc=0 and ma5>ma20 and entertime then cc:=1;
if cc=0 and ma5<ma20 and entertime then cc:=-1;

if time>=150000 then begin  cc:=0;



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

使用道具 举报

70

主题

190

帖子

275

积分

Rank: 9Rank: 9Rank: 9

等级: 管理员

注册:
2021-5-18
曾用名:
 楼主| 发表于 2021-6-11 16:47 | 显示全部楼层
、自行计算最大回撤的方法,放到逐K线模式的模型最后面即可


[PEL] 复制代码
zichan:asset,noaxis;
if barpos=1 then begin
   MaxAsset:=zichan;
   Maxhc:=0; 
end
if zichan>MaxAsset then MaxAsset:=zichan;
if MaxAsset-zichan>Maxhc then Maxhc:=MaxAsset-zichan;

最大回撤:Maxhc,linethick0;
交易次数:totaltrade,linethick0;
正确率:percentwin,linethick0;

//这里的变量"MaxAsset”、"Maxhc" 其实是全局变量,可不必声明。有重新赋值变量值才会改变


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

使用道具 举报

70

主题

190

帖子

275

积分

Rank: 9Rank: 9Rank: 9

等级: 管理员

注册:
2021-5-18
曾用名:
 楼主| 发表于 2021-6-23 14:30 | 显示全部楼层
六、“后台下单模板”,可用于各种模型。不会写后台模型的塔友,以后不用写了,复制此模板即可使用。

只要把此模板放在 模型的最后面,就可以使用后台全自动化交易了。此方法还有一个好处,即使用固定轮询模式,也不会漏单
注意:把800988替换成自己的账户,按ctrl+H 进行替换
有个性化需求的,也可在此模板上的基础上再行修改

[PEL] 复制代码
runmode:0;
Globalvariable:hold=drawnull;
……//这里添加上你自己的模型

……//这里添加上你自己的模型

cc800988:=holding;//调用图表模型持仓,这句放在信号稳定的地方,即时下单的,就放图表下单语句的后面,K线走完下单的就放到图表下单语句的前面

drawtextex(1,1,800,0,'虚拟持仓为:'+numtostr(cc800988,0));//在图表上输出虚拟持仓以便监控
if not(islastbar) or workmode<>1 then exit;
xiadan800988:=cc800988-hold;
if xiadan800988>0.5 then begin
   cang:=min(xiadan800988,abs(hold));
   if hold<0 then tsellshort(1,cang,mkt,0,0,'800988'),allowrepeat;
   cang:=xiadan800988+min(hold,0);
   if cang>0 then tbuy(1,cang,mkt,0,0,'800988'),allowrepeat;
end
if xiadan800988<-0.5 then begin
   cang:=min(abs(xiadan800988),abs(hold));
   if hold>0 then tsell(1,cang,mkt,0,0,'800988'),allowrepeat;
   cang:=abs(xiadan800988)-max(hold,0);
   if cang>0 then tbuyshort(1,cang,mkt,0,0,'800988'),allowrepeat;
end
hold:=cc800988;


图表转后台实例
实例1,图表K线走完模式
[PEL] 复制代码
Globalvariable:hold=drawnull;
cc800988:=holding;//这句放在信号稳定的地方

//此部分改为你自己的模型(K线走完模型)
buycond:=count(c>o,2)=2;
sellcond:=count(c<o,2)=2;
if holding>0 and sellcond then sell(1,1,thisclose);
if holding<0 and buycond then sellshort(1,1,thisclose);
if holding=0 and buycond then buy(1,1,thisclose);
if holding=0 and sellcond then buyshort(1,1,thisclose);

//
drawtextex(1,1,800,0,'虚拟持仓为:'+numtostr(cc800988,0));//在图表上输入虚拟持仓以便监控
if not(islastbar) or workmode<>1 then exit;
xiadan800988:=cc800988-hold;
if xiadan800988>0.5 then begin
   cang:=min(xiadan800988,abs(hold));
   if hold<0 then begin
      tsellshort(1,cang,mkt,0,0,'800988'),allowrepeat;
      debugfile('D:\800988.txt',numtostr(hold,0)+' '+numtostr(cc800988,0)+' 平空 %.0f',cang);
   end
   cang:=xiadan800988+min(hold,0);
   if cang>0 then begin
      tbuy(1,cang,mkt,0,0,'800988'),allowrepeat;
      debugfile('D:\800988.txt',numtostr(hold,0)+' '+numtostr(cc800988,0)+' 开多 %.0f',cang);
   end
end
if xiadan800988<-0.5 then begin
   cang:=min(abs(xiadan800988),abs(hold));
   if hold>0 then begin
      tsell(1,cang,mkt,0,0,'800988'),allowrepeat;
      debugfile('D:\800988.txt',numtostr(hold,0)+' '+numtostr(cc800988,0)+' 平多 %.0f',cang);
   end
   cang:=abs(xiadan800988)-max(hold,0);
   if cang>0 then begin
      tbuyshort(1,cang,mkt,0,0,'800988'),allowrepeat;
      debugfile('D:\800988.txt',numtostr(hold,0)+' '+numtostr(cc800988,0)+' 开空 %.0f',cang);
   end
end
hold:=cc800988;


实例2,即时下单模型,固定时间间隔
[PEL] 复制代码
Globalvariable:hold=drawnull;

//蓝色部分改为你自己的模型
buycond:=h>ref(hhv(h,10),1);
sellcond:=l<ref(llv(l,10),1);
if holding>0 and sellcond then sell(1,1,market);
if holding<0 and buycond then sellshort(1,1,market);
if holding=0 and buycond then buy(1,1,market);
if holding=0 and sellcond then buyshort(1,1,market);
cc800988:=holding;//这句放在信号稳定的地方


drawtextex(1,1,800,0,'虚拟持仓为:'+numtostr(cc800988,0));//在图表上输入虚拟持仓以便监控
if not(islastbar) or workmode<>1 then exit;
xiadan800988:=cc800988-hold;
if xiadan800988>0.5 then begin
 cang:=min(xiadan800988,abs(hold));
 if hold<0 then begin
  tsellshort(1,cang,mkt,0,0,'800988'),allowrepeat;
  debugfile('D:\800988.txt',numtostr(hold,0)+' '+numtostr(cc800988,0)+' 平空 %.0f',cang);
 end
 cang:=xiadan800988+min(hold,0);
 if cang>0 then begin
  tbuy(1,cang,mkt,0,0,'800988'),allowrepeat;
  debugfile('D:\800988.txt',numtostr(hold,0)+' '+numtostr(cc800988,0)+' 开多 %.0f',cang);
 end
end
if xiadan800988<-0.5 then begin
 cang:=min(abs(xiadan800988),abs(hold));
 if hold>0 then begin
  tsell(1,cang,mkt,0,0,'800988'),allowrepeat;
  debugfile('D:\800988.txt',numtostr(hold,0)+' '+numtostr(cc800988,0)+' 平多 %.0f',cang);
 end
 cang:=abs(xiadan800988)-max(hold,0);
 if cang>0 then begin
  tbuyshort(1,cang,mkt,0,0,'800988'),allowrepeat;
  debugfile('D:\800988.txt',numtostr(hold,0)+' '+numtostr(cc800988,0)+' 开空 %.0f',cang);
 end
end
hold:=cc800988;



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

使用道具 举报

70

主题

190

帖子

275

积分

Rank: 9Rank: 9Rank: 9

等级: 管理员

注册:
2021-5-18
曾用名:
 楼主| 发表于 2021-6-23 14:52 | 显示全部楼层
七、把各种模型组合成一个模型的方法,适用于所有模型。

  方法原理:计算每个策略要下单的手数和方向,再根据Holding判断出要平仓和开仓的数量,然后再下单。
  看起来很多,其实很简单,最基本得模块就是代码中注释包含的部分。
[PEL] 复制代码
input:cang1(1,0,10,1),cang2(1,0,10,1);
variable:cc1=0,cc2=0;

/////////////////////////////////模型1——10周期反手
hi:=ref(hhv(h,10),1);
lo:=ref(llv(l,10),1);

//
if cc1>0 and l<lo then begin
        
 pc:=min(max(holding,0),cang1);///////////
 kc:=cang1-pc;//////////
 if pc>0 then sell(1,pc,limitr,min(o,lo-0.2)-0.6);//////////////
 if kc>0 then buyshort(1,kc,limitr,min(o,lo-0.2)-0.6);////////////
 
 cc1:=0;
end

if cc1<0 and h>hi then begin
        
 pc:=min(abs(min(holding,0)),cang1);////////
 kc:=cang1-pc;//////////////
 if pc>0 then sellshort(1,pc,limitr,max(o,hi+0.2)+0.6);///////////////
 if kc>0 then buy(1,kc,limitr,max(o,hi+0.2)+0.6);////////////
 
 cc1:=0;
end
if cc1=0 and h>hi then begin
 pc:=min(abs(min(holding,0)),cang1);
 kc:=cang1-pc;
 if pc>0 then sellshort(1,pc,limitr,max(o,hi+0.2)+0.6);
 if kc>0 then buy(1,kc,limitr,max(o,hi+0.2)+0.6);
 cc1:=1;
end
if cc1=0 and l<lo then begin
 pc:=min(max(holding,0),cang1);
 kc:=cang1-pc;
 if pc>0 then sell(1,pc,limitr,min(o,lo-0.2)-0.6);
 if kc>0 then buyshort(1,kc,limitr,min(o,lo-0.2)-0.6);
 cc1:=-1;
end

/////////////////////////////////以上是模型1

/////////////////////////////////模型2——20周期反手
hi:=ref(hhv(h,20),1);
lo:=ref(llv(l,20),1);

if cc2>0 and l<lo then begin
        
 pc:=min(max(holding,0),cang2); ///////////
 kc:=cang2-pc;//////////////
 if pc>0 then sell(1,pc,limitr,min(o,lo-0.2)-0.6);///////////////
 if kc>0 then buyshort(1,kc,limitr,min(o,lo-0.2)-0.6);//////////////
 
 cc2:=0;
end
if cc2<0 and h>hi then begin
        
 pc:=min(abs(min(holding,0)),cang2);//////////////
 kc:=cang2-pc;/////////////
 if pc>0 then sellshort(1,pc,limitr,max(o,hi+0.2)+0.6);///////////
 if kc>0 then buy(1,kc,limitr,max(o,hi+0.2)+0.6);///////////
 
 cc2:=0;
end

if cc2=0 and h>hi then begin
 pc:=min(abs(min(holding,0)),cang2);
 kc:=cang2-pc;
 if pc>0 then sellshort(1,pc,limitr,max(o,hi+0.2)+0.6);
 if kc>0 then buy(1,kc,limitr,max(o,hi+0.2)+0.6);
 cc2:=1;
end
if cc2=0 and l<lo then begin
 pc:=min(max(holding,0),cang2);
 kc:=cang2-pc;
 if pc>0 then sell(1,pc,limitr,min(o,lo-0.2)-0.6);
 if kc>0 then buyshort(1,kc,limitr,min(o,lo-0.2)-0.6);
 cc2:=-1;
end

/////////////////////////////////以上是模型2

//有更多的模型,往后面添加即可

如果各个模型都是走完K线模式,那组合起来更方便
[PEL] 复制代码
variable:lee=0;
kc1:=max(lee,0)-max(holding,0);
kc2:=min(lee,0)-min(holding,0);
if kc1<-0.5 then sell(1,abs(kc1),limitr,open);
if kc2>0.5 then sellshort(1,kc2,limitr,open);
if kc1>0.5 then buy(1,kc1,limitr,open);
if kc2<-0.5 then buyshort(1,abs(kc2),limitr,open);

//模型1
variable:cc1=0;
buycond1:=c>ref(c,1) and ref(c,1)>ref(c,2);
sellcond1:=c<ref(c,1) and ref(c,1)<ref(c,2);
if cc1>0 and sellcond1 then cc1:=0;
if cc1<0 and buycond1  then cc1:=0;
if cc1=0 and buycond1  then cc1:=1;
if cc1=0 and sellcond1 then cc1:=-1;

//模型2
variable:cc2=0;
buycond2:=ma(c,5)>ma(c,20);
sellcond2:=ma(c,5)<ma(c,20);
if cc2>0 and sellcond2 then cc2:=0;
if cc2<0 and buycond2  then cc2:=0;
if cc2=0 and buycond2  then cc2:=1;
if cc2=0 and sellcond2 then cc2:=-1;

//模型3
variable:cc3=0;
buycond3:=ma(c,10)>ma(c,30);
sellcond3:=ma(c,10)<ma(c,30);
if cc3>0 and sellcond3 then cc3:=0;
if cc3<0 and buycond3  then cc3:=0;
if cc3=0 and buycond3  then cc3:=1;
if cc3=0 and sellcond3 then cc3:=-1;

lee:=1*cc1+1*cc2+1*cc3;//每个模型乘以各自的下单系数






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

使用道具 举报

70

主题

190

帖子

275

积分

Rank: 9Rank: 9Rank: 9

等级: 管理员

注册:
2021-5-18
曾用名:
 楼主| 发表于 2021-6-23 14:58 | 显示全部楼层
八、提前N秒下单的方法,适用于各个周期
[PEL] 复制代码
ma5:=ma(c,5);
ma10:=ma(c,10);
input:tq(5,3,60,1); //提前下单秒数,默认为5
abb:=(time0-timetot0(dynainfo(207))<=tq) or not(islastbar);

if abb then begin
  if holding>0 and ma5<ma10 then sell(1,1,thisclose);
  if holding<0 and ma5>ma10 then sellshort(1,1,thisclose);
  if holding=0 and ma5>ma10 then buy(1,1,thisclose);
  if holding=0 and ma5<ma10 then buyshort(1,1,thisclose);
end

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

使用道具 举报

70

主题

190

帖子

275

积分

Rank: 9Rank: 9Rank: 9

等级: 管理员

注册:
2021-5-18
曾用名:
 楼主| 发表于 2021-6-23 15:03 | 显示全部楼层
九、 通过飞信给自己发短信的VBA代码(飞信已停用,现有版本已经可以直接给微信发送消息)
[PEL] 复制代码
SENDPHONEMSG('出现大阳线',0);  //微信提示“出现大阳线”的消息.
SENDPHONEMSG('出现大阳线',1);//微信提示红色提示“出现大阳线”的消息。


注意: SENDPHONEMSG函数使用之前,应该启动手机监控功能,步骤: 工具菜单->异常监控,具体使用说明参考http://www.weistock.com/WeisoftHelp/ycjk.htm

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

使用道具 举报

70

主题

190

帖子

275

积分

Rank: 9Rank: 9Rank: 9

等级: 管理员

注册:
2021-5-18
曾用名:
 楼主| 发表于 2021-6-23 15:11 | 显示全部楼层
十、在小周期级别上记录无未来大周期指标的实际走势的方法
  这里以1分钟引用3分钟的MACD为例,常规方法只能在1分钟K线上显示3分钟K线的macd走势,这种小引大会存在未来函数,至于3分钟内部每根1分钟K线的macd走势不知道
  方法原理:获取上一根3分钟的diff、dea、macd,然后配合1分钟的CLOSE计算出实际的diff、dea、macd
[PEL] 复制代码
第一步、首先在macd指标里加入以下2句:
       
   ema12: ema(c,12),linethick0;
   ema26: ema(c,26),linethick0;

第二步、复制以下代码即可

runmode:1;
em1:=stkindi(stklabel,'macd.ema12',0,17,-1);
em2:=stkindi(stklabel,'macd.ema26',0,17,-1);
ema12:=em1*11/13+c*2/13;
ema26:=25/27* em2 +c*2/27;
diff:ema12-ema26;
dea1:=stkindi(stklabel,'macd.dea',0,17,-1);
dea:dea1*4/5+diff/5;


十一、日内重新计算指标(macd)的方法,以避免跳空对指标造成的影响


这里顺带介绍一下日内重新计算指标的方法,这样可以避免跳空对指标造成的影响。
比较难的是macd,kdj之类的,均线之类的简单
这里依然以macd为例
[PEL] 复制代码
runmode:0;
variable:ema12=c,ema26=c,dea=0;
if day<>ref(day,1) then begin
   ema12:=c;
   ema26:=c;
   dea:=0;
end
ema12:=ema12*11/13+c*2/13;
ema26:=ema26*25/27+c*2/27;
diff:ema12-ema26;
dea:=dea*4/5+diff/5;
dea1:dea;
macd:2*(diff-dea),colorstick;

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-22 13:45 , Processed in 0.253844 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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