金字塔决策交易系统

用户名  找回密码
 

微信登录

微信扫一扫,快速登录

帖子
查看: 2867|回复: 5

请教关于全局变量的说明

[复制链接]

75

主题

193

帖子

193

积分

等级: 免费版

注册:
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

主题

193

帖子

193

积分

等级: 免费版

注册:
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

主题

193

帖子

193

积分

等级: 免费版

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

[PEL] 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
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] 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
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-8-14 12:43 , Processed in 0.104553 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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