Rss & SiteMap

金字塔客服中心 - 专业程序化交易软件提供商 http://www.weistock.com/bbs/

专业程序化软件提供商
共8 条记录, 每页显示 10 条, 页签: [1]
[浏览完整版]

标题:有关全局变量使用的几个困惑

1楼
滚雪球 发表于:2014/5/9 10:37:47
一开始在图表交易系统使用VARIABLE来作为全局变量,后来改成了后台轮询,发现VARIABLE定义的全局变量不行了,每次都被初始化成了0,
网上查了一下说后台要使用EXTGBDATA,EXTGBDATASET来取值赋值,改了一下正常了。看了编译时的警告帖子
http://www.weistock.com/bbs/dispbbs.asp?boardid=10&Id=48570 貌似不太推荐使用这种方式,推荐使用GLOBALVARIABLE,
由于后台没法评测,我就在图表系统下将VARIABLE改成GLOBALVARIABLE试了一下,发现改了之后彻底失效,我的程序大概是这样
(逐K线,仅刷最后一根K线运行)
VARIABLE:MAXWIN=0;
//GLOBALVARIABLE:MAXWIN=0;
....
IF MAXWIN<WIN THEN BEGIN
MAXWIN:=WIN;
END

使用MAXWIN记录开仓以来的最大盈利,WIN表示当前盈利,如果当前盈利大于之前的最大盈利就给MAXWIN赋一个新值

现在的问题是:
1. VARIABLE和GLOBALVARIABLE到底什么区别?为什么VARIABLE工作正常的用GLOBALVARIABLE就不能正常工作?
2. 后台程序编译的时候金字塔也没有提示说VARIABLE不能用,那VARIABLE到底能不能用于后台,轮询? 到底是是因为后台还是因为轮询影响了VARIABLE的正常工作?
3. EXTGBDATA,EXTGBDATASET我看到有两种使用形势,一种就是 EXTGBDATA('MAXWIN'),这种变量名加了单引号,貌似无需
申明就可以直接使用,还有一种方式是EXTGBDATA(MAXWIN),没有单引号,之前要给MAXWIN:=xxx赋值,相当于隐性的申明了一下,
如果不这样隐性的申明是否需要使用VARIABLE:MAXWIN=0 这样来申明?这些帮助文件里面也没写。
4. GLOBALVARIABLE和EXTGBDATA,EXTGBDATASET说是运行效果一样,但我在评测的时候试了一下GLOBALVARIABLE不能正常工作
因此没进一步研究,但EXTGBDATA,EXTGBDATASET运行正常,我感觉这两者好像并不一样。我想问GLOBALVARIABLE是专用于后台吗?
2楼
lichenghu 发表于:2014/5/9 10:56:02

http://www.weistock.com/WeisoftHelp/zbgs003.htm 看下全局变量说明

 

2,后台是只刷新最新的K线,所以VARIABLE定义的全局变量每次刷新都会重新初始化,导致不能记录历史运行情况

 

3,字符变量,一定要加单引号的。从来没听说过不加单引号的用法

 

 

3楼
滚雪球 发表于:2014/5/9 11:14:03
不加单引号的用法确实有,见金字塔提供的海龟后台模型的例子
4楼
lichenghu 发表于:2014/5/9 11:18:42

 看下人家的变量定义,已经定义为字符串变量了

STRENTRYBARPOS:=STRCAT(STKLABEL,'ENTRYBARPOS')

[此贴子已经被作者于2014/5/9 11:19:06编辑过]
5楼
滚雪球 发表于:2014/5/9 11:19:40
加了单引号,EXTGBDATA,EXTGBDATASET是否就无需申明全局变量?
6楼
lichenghu 发表于:2014/5/9 11:22:11

 一个是申明,一个是取值。和加单引号有啥关系?

EXTGBDATA('A')//取得单值全局变量A

EXTGBDATASET('A',1OOO);//定义单指全局变量A,值为1000

7楼
滚雪球 发表于:2014/5/9 11:31:40
我大概知道了
EXTGBDATASET在赋值的时候就算是定义了,因此不需要额外的申明
金字塔自带的后台移动止损止盈的例子把我搞晕了

//该模型为简单示范模型,用户需根据自己交易经验,修改完善后再实际应用!!!
//该模型运行于后台程序化模式

ZH1:'1000';
PZ1:'IF00';
VARIABLE:A=0; -----------------------------------这一句其实完全没有必要,对吧?

//条件判断
MA5:MA(CLOSE,5);
MA10:MA(CLOSE,10);
CONDBUY:=CROSS(MA5,MA10);
CONDSELL:=CROSS(MA10,MA5);

//开仓和平仓
TBUY(CONDBUY AND TBUYHOLDINGEX( ZH1,PZ1 ,0 )<10,1,LMT,CLOSE,0,ZH1,PZ1 );
TSELL(CONDSELL,TBUYHOLDINGEX( ZH1,PZ1 ,0 ),MKT,0,ZH1,PZ1);



//移动止损模块部分*******************************
//A有三种数值状态:1,0,最新价;
//当A=1时表示当前有持仓,A=0时表示移动止损执行完毕,A=最新价时用于比较价格是否回落

//将A赋值为1,表示当前有持仓
IF TBUYHOLDINGEX( '','' ,0 )>0 AND EXTGBDATA('a' )=0 THEN BEGIN
EXTGBDATASET( 'a',1 );
END

//使A始终表示监控开始后的最高价
IF DYNAINFO(  7)>EXTGBDATA('a' ) and EXTGBDATA('a' )>0 THEN BEGIN
EXTGBDATASET( 'a',DYNAINFO(  7));
END

//发现价格回落止损,并将A赋值为0表示移动止损动作完成
IF EXTGBDATA('a' )-DYNAINFO(  7)>5*MINDIFF and EXTGBDATA('a' )>0 THEN BEGIN
TSELL(1,1,MKT );
EXTGBDATASET( 'a',0);
END
//*******************************
8楼
lichenghu 发表于:2014/5/9 11:36:17
 没用。回头会改正
共8 条记录, 每页显示 10 条, 页签: [1]


Powered By Dvbbs Version 8.3.0
Processed in 0.03809 s, 3 queries.