TB再学习
首先跑马圈地一块,完成一列项目,让自己的投资操盘再升级一下未改变前的状况:自己公司现在有5名主要独立操盘手在分别负责自己公司分配下来的帐号,大约各自手头上有5-12个帐号,这些主要是客户理财型,不包括客户自己操作的,5名的操盘风格不尽相同
希望改变后的样子:运用自动化交易,一个交易员可以操作50个帐号,风格相当持有同样的持仓
愿望要有才会实现
系统的两个目的
1.发现机会
2.处理风险与羸利
[ 本帖最后由 sandboy2005 于 2010-5-9 17:54 编辑 ]
这是文华不能做到的工具、好爽啊
ParamsNumericSeries Price(1);
Numeric Length(10);
NumericRef HighestBar(0);
Vars
Numeric MyVal;
Numeric MyBar;
Numeric i;
Begin
MyVal = Price;
MyBar = 0;
For i = 1 to Length - 1
{
If ( Price > MyVal)
{
MyVal = Price;
MyBar = i;
}
}
HighestBar = MyBar;
Return MyVal;
End
特征走势创历史新高,有点变但还是可以的
特征走势创历史新高,脚本如下:Params
Numeric Length(5);
Vars
Bool Condition(False);
Begin
Condition = (High ==Highest(High,Length)) ;
If (Condition)
{
PlotNumeric("CLSXG",High)
}
End
最终的目的
交易指令TradeBlazer公式提供一种简单的方法表达您的交易思想,那就是使用交易指令,一个简单的交易指令如下:
If (Condition)
Buy (1,Close);
以上的语句表达的意思是:当某些条件满足了,将用当前Bar的收盘价买入1手指定商品。就像您平时通过经纪商进行交易操作一样,TradeBlazer公式提供四个系统函数和现实中的四种交易动作进行对应,如下:
函数名 描述
Buy 平掉所有空头持仓,开多头仓位。
Sell 平掉指定的多头持仓。
SellShort 平掉所有多头持仓,开空头仓位。
BuyToCover 平掉指定的空头持仓。
交易指令的使用规则归纳如下:
支持三种基本类型的参数定义,支持指定参数默认值;
不支持使用引用参数;
支持六种类型的变量定义,支持指定变量的默认值;
可以访问Data0-Data49个数据源的Bar数据;
可以访问行情数据、属性数据;
通过Buy、Sell、SellShort和BuyToCover产生交易动作,也可以使用各种内建平仓指令产生交易动作;
每个交易指令至少包含一个交易动作;
交易指令可以调用所有的用户函数进行计算;
交易指令可以根据设置调用部分的系统函数;
交易指令在执行时,必须要指定相应的数据源和周期,需要调用历史数据的,只有历史数据存在的情况下才能返回正确的值。
示例,交易指令MACD_LE,脚本如下:
Params
Numeric FastLength( 12 );
Numeric SlowLength( 26 );
Numeric MACDLength( 9 );
Numeric BuyLots(1);
Vars
NumericSeries MACDValue;
NumericSeries AvgMACD;
Numeric MACDDiff;
Bool Condition1;
Bool Condition2;
Begin
MACDValue = XAverage( Close, FastLength ) -
XAverage( Close, SlowLength ) ;
AvgMACD = XAverage(MACDValue,MACDLength);
MACDDiff = MACDValue - AvgMACD;
Condition1 = CrossOver(MACDValue, AvgMACD) ;
Condition2 = MACDValue > 0;
if (Condition1 And Condition2)
{
Buy(BuyLots,Close);
}
End
MACD_LE在零轴之上,当MACDValue向上穿过AvgMACD值时为产生多头买入指令。
花样很多,但很实用啊,特别是日内短线
内建平仓指令除了上节的Sell和BuyToCover可以进行平仓之外,TradeBlazer公式提供了额外的八种平仓函数,通过合理的应用内建平仓函数,可以帮助您有效的锁定风险并及时获利。
您可以组合使用内建平仓函数,也可以在自己的交易指令中调用内建平仓函数进行平仓,八个内建平仓函数如下:
函数名 描述
SetExitOnClose 该平仓函数用来在当日收盘后产生一个平仓动作,将当前所有的持仓按当日收盘价全部平掉。
SetBreakEven 该平仓函数在获利条件满足的情况下启动,当盈利回落达到保本时产生平仓动作,平掉指定的仓位。
SetStopLoss 该平仓函数在亏损达到设定条件时产生平仓动作,平掉指定的仓位。 :lol
SetProfitTarget 该平仓函数在盈利达到设定条件时产生平仓动作,平掉指定的仓位。 :lol
SetPeriodTrailing 该平仓函数在盈利回落到设定条件时产生平仓动作,平掉指定的仓位。:lol
SetPercentTrailing 该平仓函数在盈利回落到设定条件时产生平仓动作,平掉指定的仓位。 :lol
SetDollarTrailing 该平仓函数在盈利回落到设定条件时产生平仓动作,平掉指定的仓位。:lol
SetInactivate 该平仓函数在设定时间内行情一直在某个幅度内波动时产生平仓动作,平掉指定的仓位。 (就是高,要是用在股票那就爽了,不知TB什么时候可以用在股票啊,期特啊:loveliness: )
关于ExitPosition
上述多个平仓函数都用到了参数ExitPosition,作为平仓函数仓位控制的重要参数,有必要对该参数进行单独说明。
ExitPosition是布尔型参数,当ExitPosition=True时,表示将当前所有的持仓作为一个整体,根据其平均建仓成本,计算各平仓函数的盈亏,当条件满足时,会将所有仓位一起平掉;当ExitPosition=False时,表示单独对每个建仓位置进行平仓,单独计算各平仓函数盈亏时,当单个建仓位置条件满足后,平掉该建仓位置即可。
交易策略-虽然不尽相同的,但目的是相同
交易策略通常单个交易指令只完成建仓或平仓的单个动作,而一个完整的交易策略应该至少包含建仓、平仓交易指令,并且根据需要加上止损,获利等锁定风险和收益的交易指令。多个交易指令的组合才能更加有效的帮助我们完整的进行交易,因此,我们将多个交易指令的有效组合称之为交易策略。
假定我们创建一个交易策略,该交易策略由以下交易指令组成,并按照如下顺序应用到超级图表中。
当我们将该交易策略应用到超级图表上时,TradeBlazer公式将会从图表的第一个Bar开始执行交易策略,在第一个Bar上首先执行多头建仓指令A,可能会产生交易委托(开仓),该委托可能被设置为在当前Bar执行,也可以被设置为延迟到下一个Bar执行。当多头建仓指令A执行完成之后,将按顺序调用多头平仓指令B,同时该指令会判断当前的持仓状态,仓位等信息,当条件满足的时候会产生交易委托(平仓)。依次执行止损平仓指令C和获利平仓指令D,当四个交易指令在第一个Bar上都执行完之后,将会移到第二个Bar执行,这时候,系统会首先读取上一个Bar是否有延迟的交易委托,如果有延迟的交易委托,对这些委托先进行处理,然后像第一个Bar一样,依次调用各个交易指令。以此类推,从图表的第一个Bar到最后一个Bar这里和文华完全是相反的从左到右,不是从右到左:L ,全部执行完成之后,整个交易策略执行完毕。在整个执行过程产生的所有交易委托被保存下来供超级图表模块显示或进行性能测试分析。
当交易策略应用在超级图表中时,您可以设置交易策略开平仓的显示风格以及颜色、线条等, 使之显示在超级图表中,如下图所示:
....................................................
说两句海龟系统应该是目前公布公开最好的策略,但仍存大大量问题
....................................................
交易策略测试引擎
为了真实准确的模拟交易策略在过去时段的表现,并能在实时数据更新时使交易策略沿着预定的方向发展,TradeBlazer公式提供了一个强大的交易策略测试引擎,该处理引擎收集交易策略在历史过程中产生的所有委托单,将其应用在对应的图表中,并能根据交易设置创建交易策略性能测试报表供客户参考。
交易策略测试引擎包括了两大功能:历史数据测试和实时自动交易。历史数据测试分析交易策略在历史过程中的交易动作并计算出交易盈亏,收益等性能指数。实时自动交易收集实时数据,并根据实时数据生成相应的交易动作,条件满足时,将委托单直接发送到交易券商
[ 本帖最后由 sandboy2005 于 2010-5-9 18:34 编辑 ]
以完成规模化交易为前提
持仓统计该页面显示选中帐户的持仓信息,选中持仓项目,右键菜单包括如下菜单项:
当前帐户:设定当前帐户,在多帐户情况下,可选择不同帐户切换当前帐户,其功能等同于在帐户汇总页面双击帐户项;
交易师:用当前商品打开交易师,如果无选中商品,则直接打开交易师;
批量下单:用当前商品打开批量下单,如果无选中商品,则直接打开批量下单;
一键平仓:对当前选中商品进行快速平仓;
多帐户平仓:对当前选中商品进行多帐户快速平仓;
自动排列:对列表字段根据长度进行自动排列;
有意思了
大家帮忙看看程序那地方有问题啊If(MarketPosition == 1) //多头止损
{
ZSW = KCJG - IntPart(MyATR(20) * 2); //止损拉等于开仓价格减去两个ATR,(MYATR为自建函数,求ATR值用)
If(low < ZSW) //如果最低价低于止损位
{
If(Open < ZSW) //大跳空用开盘价平仓
Sell(1,Open);
Else
Sell(1,ZSW); //用止损位平仓
}
}
大家帮忙看一下这个程序有不对的地方吗?
为什么加载后止损的地方不对啊。
入市后交易日的最高收盘价减2ATR,退出
ParamsNumeric ratio(2);
Numeric ATR_length(10);
Vars
Numeric highest_close(0);
Numeric exit_price(0);
NumericSeries ATR;
Begin
if (MarketPosition <> 0)
{
ATR = AverageFC(TrueRange,ATR_length);
if (close > highest_close)
highest_close = close;
if (highest_close满足你的退出条件,或者其他你自己设定的退出条件得到满足)
{
exit_price = highest_close - ratio*ATR;
if (MarketPosition == 1) // 有多仓的情况
Sell(0, exit_price);
else
BuyToCover(0, exit_price);
}
}
End
全局变量的存取
//------------------------------------------------------------------------// 简称: ceshi
// 名称:
// 类别: 交易指令
// 类型: 多头建仓
// 输出:
//------------------------------------------------------------------------
Params
Vars
NumericSeries L1;
NumericSeries L2;
NumericSeries l30;
NumericSeries h30;
Numeric MyOffset;
Begin
L1 = XAverage(close,5); //5bar均线
L2 = XAverage(close,30); //30bar均线
H30=Highest(high,30); //30bar最大值
L30=Lowest(low,30); //30bar最小值
MyOffset = MinMove*PriceScale; //预防滑点
//----初始化全局变量
If(GetGlobalVar(1) == InvalidNumeric || CurrentBar==0 ) SetGlobalVar(1,0);
If(GetGlobalVar(0) == InvalidNumeric || CurrentBar==0 ) SetGlobalVar(0,0);
//---多头买入---5均线上穿30均线多头开仓
If(CrossOver(l1,l2) && GetGlobalVar(1)==0 && A_TotalPosition==0)
{
A_SendOrder(Enum_Buy,Enum_Entry,1,Q_askprice+ MyOffset);
SetGlobalVar(1,1);
}
//---空头买入---5均线下穿30均线多头开仓,全局变量GetGlobalVar(1)
If(CrossUnder(l1,l2) && GetGlobalVar(1)==0 && A_TotalPosition==0)
{
A_SendOrder(Enum_Sell,Enum_Entry,1,Q_BidPrice- MyOffset);
SetGlobalVar(1,1);
}
//---多头加仓---30bar最低值上移,全局变量GetGlobalVar(0)
if(A_BuyPosition>0 && l30>l30 && GetGlobalVar(1)==1 && GetGlobalVar(0)==0)
{
A_SendOrder(Enum_Buy,Enum_Entry,1,Q_askprice+ MyOffset);
SetGlobalVar(0,1);
}
//---空头加仓---30bar最高值下移,全局变量GetGlobalVar(0)
if(A_SellPosition>0 && h30<h30 && GetGlobalVar(1)==1 && GetGlobalVar(0)==0)
{
A_SendOrder(Enum_Sell,Enum_Entry,1,Q_BidPrice- MyOffset);
SetGlobalVar(0,1);
}
//---多头平仓---5bar均线下穿30bar均线或者收盘价跌穿30bar最小值
If((CrossUnder(l1,l2) || close<l30) && A_BuyPosition>0 && GetGlobalVar(1)==1 && GetGlobalVar(0)==1 )
{
A_SendOrder(Enum_Sell,Enum_Exit,A_BuyPosition,Q_BidPrice- MyOffset);
SetGlobalVar(1,0);
SetGlobalVar(0,0);
}
//---空头平仓---5bar均线上穿30bar均线或者收盘价上穿30bar最大值
If((CrossOver(l1,l2) || close>h30) && A_SellPosition>0 && GetGlobalVar(1)==1 && GetGlobalVar(0)==1)
{
A_SendOrder(Enum_Buy,Enum_Exit, A_SellPosition, Q_askprice + MyOffset);
SetGlobalVar(1,0);
SetGlobalVar(0,0);
}
End
//------------------------------------------------------------------------
// 编译版本 GS2004.06.12
// 用户版本 2010/03/30 11:34
// 版权所有 robbiey
// 更改声明 TradeBlazer Software保留对TradeBlazer平台
// 每一版本的TrabeBlazer公式修改和重写的权利
//------------------------------------------------------------------------
页:
[1]
2