金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 2285|回复: 5

请教关于全局变量的说明

[复制链接]

75

主题

191

帖子

191

积分

等级: 免费版

注册:
2023-4-11
曾用名:
发表于 2023-8-2 17:08 | 显示全部楼层 |阅读模式
老师有没有图表程序化关于全局变量的说明或示例,这块实在搞不懂。

variable:maxp:=0;   //这里自定义全局变量,想实现多开后价格比开仓价最大时的价格记录
variable:minp:=0;    //这里自定义全局变量,想实现空开后价格比开仓价最小时的价格记录

MA25:=MA(C,25);
DK:=IF(OPEN<MA25 AND CLOSE>MA25,1,0);
KK:=IF(OPEN>MA25 AND CLOSE<MA25 ,1,0);

  //开多单
    IF DK THEN BEGIN         
    多开:BUY(1 AND HOLDING=0,1,MARKET);
    DRAWICON(1,low,4);
    maxp:=0;  //这里是触发开仓后,启动相对于开仓位利润最大值时的价格记录,这里的写法对吗?为什么DEBUG输出的值一直为“0”?是不是应该写成对这个位置的重新赋值?
END

  //开空单
    IF KK THEN BEGIN
    空开:BUYSHORT(1 AND HOLDING=0,1,MARKET);
     DRAWICON(1,high,5);
    minp:=0;   //这里是触发开仓后,启动相对于开仓位利润最大值时的价格记录,这里的写法对吗?为什么DEBUG输出的值一直为“0”?是不是应该写成对这个位置的重新赋值?
END

如果我想记录开仓时的最高低、最低点、开仓时前一个K线的最高点、最低点又如何记录?

回复

使用道具 举报

21

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2023-8-2 17:13 | 显示全部楼层
这2个全局变量 ,你这里都没有给他赋值的逻辑。你不给它赋值 它自然永远是0 了啊。

if holding>0 and c>maxp then maxp:=c;

开多仓,后只要c比maxp大,maxp就会更新为这个c. 当然这里也许用H 更合适。

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

使用道具 举报

75

主题

191

帖子

191

积分

等级: 免费版

注册:
2023-4-11
曾用名:
 楼主| 发表于 2023-8-2 17:29 | 显示全部楼层
技术009 发表于 2023-8-2 17:13
这2个全局变量 ,你这里都没有给他赋值的逻辑。你不给它赋值 它自然永远是0 了啊。

if holding>0 and c> ...

if holding>0 and c>maxp then maxp:=c;
上面这一句是否替换maxp:=0;

最终你码应该是这样的
  //开多单
    IF DK THEN BEGIN         
    多开:BUY(1 AND HOLDING=0,1,MARKET);
    DRAWICON(1,low,4);
    if holding>0 and c>maxp then maxp:=h;
END

老师请看一下最终这个写法对吗?
回复

使用道具 举报

21

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2023-8-3 08:30 | 显示全部楼层
错误。不需要满足dk条件。你这个写法就是必须开仓条件满足时候 进行赋值。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

75

主题

191

帖子

191

积分

等级: 免费版

注册:
2023-4-11
曾用名:
 楼主| 发表于 2023-8-3 09:01 | 显示全部楼层
技术009 发表于 2023-8-3 08:30
错误。不需要满足dk条件。你这个写法就是必须开仓条件满足时候 进行赋值。

[PEL] 复制代码
variable:maxp:=0;

variable:minp:=0;

MA25:MA(C,25);

DK:=IF(OPEN<MA25 AND CLOSE>MA25,1,0);
KK:=IF(OPEN>MA25 AND CLOSE<MA25,1,0);

  //开多单

    IF DK THEN BEGIN	 
 	
    多开:BUY(1 AND HOLDING=0,1,MARKET);
    
    DRAWICON(1,low,4);

END

  //平多单

     if holding>0 and h>maxp then maxp:=h;

     IF MAXP>AVGENTERPRICE*1.02 AND (MAXP-C)/(MAXP-AVGENTERPRICE)>=0.65 then

begin
	
     回撤多平:sell(1,holding,market);   

END 
  
  //开空单

     IF KK THEN BEGIN
  
     空开:BUYSHORT(1 AND HOLDING=0,1,MARKET);

     DRAWICON(1,high,5);

END 

  //平空单
if holding<0 and LOW>minp then minp:=LOW;

     if MINP<AVGENTERPRICE*0.98 AND (C-MINP)/(AVGENTERPRICE-MINP)>=0.65 then

begin
	
     回撤空平:SELLSHORT(1,holding,market);   
 
END 

DEBUGFILE('D:\记录\TEST.TXT','开仓后最大值%.2f',MAXP);
DEBUGFILE('D:\记录\TEST.TXT','开仓后最小值%.2f',MINP);

if time=30000 or time=190000 then
begin
收盘平多:sell(1,holding,market);
收盘平空:sellshort(1,holding,market);       
end



老师是我理解错了吗,就是按照你上面指引的方式修改的,请帮看下代码是否表达正确,另外这个回测时为什么都是当根K线就触发回撤平仓了?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号? 微信登录

x
回复

使用道具 举报

21

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2023-8-3 09:13 | 显示全部楼层
[PEL] 复制代码
variable:maxp:=0;
 
variable:minp:=0;
 
ma25:ma(c,25);
 
dk:=if(open<ma25 and close>ma25,1,0);
kk:=if(open>ma25 and close<ma25,1,0);
 
  //开多单
 
    if dk and holding=0 then begin    
     
    多开:buy(1 and holding=0,1,market);
    maxp:=AVGENTERPRICE;
    drawicon(1,low,4);
 
end
 
  //平多单
 
     if holding>0 and h>maxp then maxp:=h;
 
     if maxp>=avgenterprice*1.02 and (maxp-c)/(maxp-avgenterprice)>=0.35 then
 
begin
     
     回撤多平:sell(1,holding,market);   
 
end
   
  //开空单
 
     if kk and holding=0 then begin
   
     空开:buyshort(1 and holding=0,1,market);
     minp:=AVGENTERPRICE;
     drawicon(1,high,5);
 
end
 
  //平空单
if holding<0 and low<minp then minp:=low;
 
     if minp<=avgenterprice*0.98 and (c-minp)/(avgenterprice-minp)>=0.35 then
 
begin
     
     回撤空平:sellshort(1,holding,market);   
  
end
 

if time=30000 or time=190000 then
begin
收盘平多:sell(1,holding,market);
收盘平空:sellshort(1,holding,market);       
end


另外 这种回撤平仓的逻辑,在图表上 是会失真的。因为你没法判断这个K 最高最低价谁先出现的。多头为例:
如果是先最高价,再最低价,那就是回撤。可如果是先最低价,再最高价出现的,那是不可以出平仓信号的。但是模型无法判断到这一点,它可能会直接出信号了,在大周期上这个失真情况应该会更严重。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-16 12:59 , Processed in 0.151026 second(s), 23 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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