1SetGlobalVar和GetGlobalVar函数可以读写全局变量,但程序的可读性差,老要注释,程序执行速度应该可以,但不能写字符串,读写小数也很麻烦.
SetTBProfileString和GetTBProfileString函数已放弃了参数文件的读写,改用读写数据库Data_Q,速度比读文件系统快,但保存数值也很麻烦,需要转换函数.
请管理员给我综合评估一下,是否要放弃使用全局变量,改用读写数据库.全局变量还要处理网络中断、程序重启等问题,也是麻烦的很。
谢谢了!
不是对性能特别敏感的代码段,能用SetTBProfileString还是用这个比较好。
毕竟这是写到数据库,比SetGlobalVar写在内存中要强。
也可以这样:
如果下次打开交易软件仍然需要的数据,用SetTBProfileString。
下次打开交易软件,就重新计算的数据,用SetGlobalVar。
可以使用TBProfileString的,p_b_yu是指在短线的情况下,全局变量会被清空,和TBProfileString比,较不稳定,所以p_b_yu建议使用TBProfileString |
http://bbs.tradeblazer.net/forum.php?mod=viewthread&tid=6919
http://bbs.tradeblazer.net/forum.php?mod=viewthread&tid=12419
2
关于断线重连的全局变量
如下: If(BarStatus==0)//初始化 { setGlobalVar(1,InvalidNumeric); setGlobalVar(0,InvalidNumeric); SetTBProfileString(Symbol,"sm",Text(0)); SetTBProfileString(Symbol,"buym",Text(0)); SetTBProfileString(Symbol,"bm",Text(0)); SetTBProfileString(Symbol,"sellm",Text(0)); } 断线重连后全局变量是不是又被初始化? |
4#发表于 2010-11-316:05:00 |只看该作者
| |
上善若水,无欲则刚 |
1# jsz123 Symbol是返回图表的商品名函数,这里用作数据库的名称。 "sm”是关键字名,相当于变量名。 Text(0),将sm设置为"0"。必须转换成字符串,这是TB所谓“数据库”的弱点! |
http://bbs.tradeblazer.net/forum.php?mod=viewthread&tid=10933
3
说简单一点:
第一、OpenD(0)在集合竟价的时候会不会把上一个交易日的 Open当做今天的open?
第二、If(BarStatus==0)//初始化setGlobalVar
{
SetTBProfileString(Symbol,"s1",Text(0));
SetTBProfileString(Symbol,"buy",Text(0));
SetTBProfileString(Symbol,"bm",Text(0));
SetTBProfileString(Symbol,"sell",Text(0));
}
可不可以不要?不初始化。可以避免不小心归零,照成反复开平仓。可不可以不要?
发表于 2010-10-20 14:08:00 |只看该作者
1.集合竟价的时候OpenD(0)为昨日的开盘价 2.这个只在图上第一个bar的时候初始化,这段代码不会造成反复开平仓 |
http://bbs.tradeblazer.net/forum.php?mod=viewthread&tid=10755
4
回复 3# 文韦 使用的是否V4版本? 请在数据库中检查一下是否有20110817这个信息。 文件-数据管理-配置工具 |
vars
numerictrn;
if (BarStatus==0) SetGlobalVar(5,1);//或者 if (BarStatus==0) trn=1;
if (BarStatus==2 && GetGlobalVar(5)==1) {//或者 if (BarStatus==2 &&trn==1)
if (AccountDataExist &&a_totalposition>=0)
{
SetGlobalVar(5,0); //或者trn=0;
if (a_totalposition>0)A_SendOrder(enum_sell,enum_exit,1,close-6);
A_SendOrder(enum_sell,enum_entry,1,close-6);
}
}
本意是想空头开仓1手,但实盘运行开仓不止1手。也曾试过采用序列变量的方式控制发单次数,问题依旧。疑问:1、全局变量和序列变量的赋值时间是否很长?以至于在一个tick周期内变量值来不及改变导致重复发单?2、如果不采用延时的方式,有无其他更好的方法避免重复发单?5#发表于 2011-12-2110:11:00 |只看该作者
你的5号全局变量只是在某指定条件下给其赋了值,赋值貌似没有与发单有关。 请叁考F1帮助文档--公式系统---公式的使用----策略进阶----A函数下撤单与全局变量的应用。 |
以上品种图表都打开,并用SetTBProfileString记录各个品种条件,供其他品种调用判断。将收盘价大于MA(C,60)条件记录下来
if(close[1]>AverageFC(Close,60))
settbprofilestring(symbol,"ma","true");
获取三个品种的条件,判断是否满足
rucon = gettbprofilesting("ru1205","ma");
tacon = gettbprofilesting("ta1205","ma");
ifcon = gettbprofilesting("if1205","ma");
if(rucon == "true" && tacon == "true" && ifcon =="true" )
{
buy(1,close);
}
lh948 发表于2012-5-11 14:31 另外在公式前部加上 If(time<0.10) return; |