开拓者期货期权程序化系统交易论坛

标题: TB再学习 [打印本页]

作者: sandboy2005    时间: 2010-5-9 16:11:08     标题: TB再学习

首先跑马圈地一块,完成一列项目,让自己的投资操盘再升级一下
未改变前的状况:自己公司现在有5名主要独立操盘手在分别负责自己公司分配下来的帐号,大约各自手头上有5-12个帐号,这些主要是客户理财型,不包括客户自己操作的,5名的操盘风格不尽相同
希望改变后的样子:运用自动化交易,一个交易员可以操作50个帐号,风格相当持有同样的持仓
愿望要有才会实现

系统的两个目的
1.发现机会
2.处理风险与羸利

[ 本帖最后由 sandboy2005 于 2010-5-9 17:54 编辑 ]
作者: sandboy2005    时间: 2010-5-9 18:11:36     标题: 这是文华不能做到的工具、好爽啊

Params
    NumericSeries 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
作者: sandboy2005    时间: 2010-5-9 18:17:57     标题: 特征走势创历史新高,有点变但还是可以的

特征走势创历史新高,脚本如下:

Params
    Numeric Length(5);
Vars
    Bool Condition(False);
Begin
    Condition = (High ==Highest(High,Length)) ;
    If (Condition)
    {
        PlotNumeric("CLSXG",High)
    }
End
作者: sandboy2005    时间: 2010-5-9 18:19:33     标题: 最终的目的

交易指令
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值时为产生多头买入指令。
作者: sandboy2005    时间: 2010-5-9 18:23:55     标题: 花样很多,但很实用啊,特别是日内短线

内建平仓指令
除了上节的Sell和BuyToCover可以进行平仓之外,TradeBlazer公式提供了额外的八种平仓函数,通过合理的应用内建平仓函数,可以帮助您有效的锁定风险并及时获利。

您可以组合使用内建平仓函数,也可以在自己的交易指令中调用内建平仓函数进行平仓,八个内建平仓函数如下:

函数名 描述
SetExitOnClose 该平仓函数用来在当日收盘后产生一个平仓动作,将当前所有的持仓按当日收盘价全部平掉。
SetBreakEven 该平仓函数在获利条件满足的情况下启动,当盈利回落达到保本时产生平仓动作,平掉指定的仓位。
SetStopLoss 该平仓函数在亏损达到设定条件时产生平仓动作,平掉指定的仓位。
SetProfitTarget 该平仓函数在盈利达到设定条件时产生平仓动作,平掉指定的仓位。
SetPeriodTrailing 该平仓函数在盈利回落到设定条件时产生平仓动作,平掉指定的仓位。  
SetPercentTrailing 该平仓函数在盈利回落到设定条件时产生平仓动作,平掉指定的仓位。 :lol
SetDollarTrailing 该平仓函数在盈利回落到设定条件时产生平仓动作,平掉指定的仓位。:lol  
SetInactivate 该平仓函数在设定时间内行情一直在某个幅度内波动时产生平仓动作,平掉指定的仓位。 (就是高,要是用在股票那就爽了,不知TB什么时候可以用在股票啊,期特啊

关于ExitPosition
上述多个平仓函数都用到了参数ExitPosition,作为平仓函数仓位控制的重要参数,有必要对该参数进行单独说明。

ExitPosition是布尔型参数,当ExitPosition=True时,表示将当前所有的持仓作为一个整体,根据其平均建仓成本,计算各平仓函数的盈亏,当条件满足时,会将所有仓位一起平掉;当ExitPosition=False时,表示单独对每个建仓位置进行平仓,单独计算各平仓函数盈亏时,当单个建仓位置条件满足后,平掉该建仓位置即可。
作者: sandboy2005    时间: 2010-5-9 18:28:18     标题: 交易策略-虽然不尽相同的,但目的是相同

交易策略
通常单个交易指令只完成建仓或平仓的单个动作,而一个完整的交易策略应该至少包含建仓、平仓交易指令,并且根据需要加上止损,获利等锁定风险和收益的交易指令。多个交易指令的组合才能更加有效的帮助我们完整的进行交易,因此,我们将多个交易指令的有效组合称之为交易策略。

假定我们创建一个交易策略,该交易策略由以下交易指令组成,并按照如下顺序应用到超级图表中。




当我们将该交易策略应用到超级图表上时,TradeBlazer公式将会从图表的第一个Bar开始执行交易策略,在第一个Bar上首先执行多头建仓指令A,可能会产生交易委托(开仓),该委托可能被设置为在当前Bar执行,也可以被设置为延迟到下一个Bar执行。当多头建仓指令A执行完成之后,将按顺序调用多头平仓指令B,同时该指令会判断当前的持仓状态,仓位等信息,当条件满足的时候会产生交易委托(平仓)。依次执行止损平仓指令C和获利平仓指令D,当四个交易指令在第一个Bar上都执行完之后,将会移到第二个Bar执行,这时候,系统会首先读取上一个Bar是否有延迟的交易委托,如果有延迟的交易委托,对这些委托先进行处理,然后像第一个Bar一样,依次调用各个交易指令。以此类推,从图表的第一个Bar到最后一个Bar这里和文华完全是相反的从左到右,不是从右到左 ,全部执行完成之后,整个交易策略执行完毕。在整个执行过程产生的所有交易委托被保存下来供超级图表模块显示或进行性能测试分析。

当交易策略应用在超级图表中时,您可以设置交易策略开平仓的显示风格以及颜色、线条等, 使之显示在超级图表中,如下图所示:



....................................................
说两句海龟系统应该是目前公布公开最好的策略,但仍存大大量问题
....................................................
交易策略测试引擎
为了真实准确的模拟交易策略在过去时段的表现,并能在实时数据更新时使交易策略沿着预定的方向发展,TradeBlazer公式提供了一个强大的交易策略测试引擎,该处理引擎收集交易策略在历史过程中产生的所有委托单,将其应用在对应的图表中,并能根据交易设置创建交易策略性能测试报表供客户参考。

交易策略测试引擎包括了两大功能:历史数据测试和实时自动交易。历史数据测试分析交易策略在历史过程中的交易动作并计算出交易盈亏,收益等性能指数。实时自动交易收集实时数据,并根据实时数据生成相应的交易动作,条件满足时,将委托单直接发送到交易券商

[ 本帖最后由 sandboy2005 于 2010-5-9 18:34 编辑 ]
作者: sandboy2005    时间: 2010-5-9 18:45:01     标题: 以完成规模化交易为前提

持仓统计
该页面显示选中帐户的持仓信息,选中持仓项目,右键菜单包括如下菜单项:

当前帐户:设定当前帐户,在多帐户情况下,可选择不同帐户切换当前帐户,其功能等同于在帐户汇总页面双击帐户项;

交易师:用当前商品打开交易师,如果无选中商品,则直接打开交易师;

批量下单:用当前商品打开批量下单,如果无选中商品,则直接打开批量下单;

一键平仓:对当前选中商品进行快速平仓;

多帐户平仓:对当前选中商品进行多帐户快速平仓;

自动排列:对列表字段根据长度进行自动排列;
作者: sandboy2005    时间: 2010-5-9 19:27:30     标题: 有意思了

大家帮忙看看程序那地方有问题啊
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);  //用止损位平仓
                    }
            }
大家帮忙看一下这个程序有不对的地方吗?
为什么加载后止损的地方不对啊。
作者: sandboy2005    时间: 2010-5-16 04:03:42     标题: 入市后交易日的最高收盘价减2ATR,退出

Params
   Numeric 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
作者: sandboy2005    时间: 2010-5-16 16:25:57     标题: 全局变量的存取

//------------------------------------------------------------------------
// 简称: 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[1] && 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[1] && 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公式修改和重写的权利
//------------------------------------------------------------------------
作者: sandboy2005    时间: 2010-5-17 12:50:44     标题: 序列变量比全局变量会更加不会出错

Vars
    NumericSeries conFailureCnt(0);
Begin
    If(BarStatus==0)
    {
        conFailureCnt = 0;
    }else
    {
        conFailureCnt = conFailureCnt[1];
    }

    YourBuyCon = ?
    YourSellShortCon = ?
    If(YourBuyCon&&MarketPosition==0)
   {
        If(conFailureCnt > 3)
        {
              Buy(2,NextOpen,True);
        }else
        {
              Buy(1,NextOpen,True);
        }
    }

    If(YourSellShortCon&&MarketPosition==0)
    {
        If(conFailureCnt > 3)
        {
              SellShort(2,NextOpen,True);
        }else
        {
              SellShort(1,NextOpen,True);
        }
    }

    YourSellCon = ?
    YourBuyToCoverCon = ?
    If(MarketPosition==1 && YourSellCon)
    {
           If(PositionProfit < 0)
           {
                 conFailureCnt = conFailureCnt  + 1;
            }else
           {
                 conFailureCnt = 0;
           }

          sell(....);
    }


     If(MarketPosition==-1 && YourBuyToCoverCon )
    {
           If(PositionProfit < 0)
           {
                 conFailureCnt = conFailureCnt  + 1;
            }else
           {
                 conFailureCnt = 0;
           }

          BuyToCover(....);
    }

End
作者: sandboy2005    时间: 2010-5-17 13:25:15     标题: 另外实例

Vars
    BoolSeries LastTradeLoss(false);
begin
    If(CurrentBar==0)
         LastTradeLoss = false;
    else
         LastTradeLoss = LastTradeLoss[1];

      If(BuyCon)
      {
            If(LastTradeLoss )
               Buy(2,.....);
            else
               Buy(1,.....);            
       }
   
       If(SellCon)
       {
            If(Positionprofit < 0)
               LastTradeLoss  = true;
           else
             LastTradeLoss = false;

           sell(........);
        }
end
作者: sandboy2005    时间: 2010-5-17 17:58:51     标题: while经典写文

求个while循环的代码。 明天的作业。。。 0分
标签:
回答:1   浏览:406   提问时间:2008-11-25 20:13
有个题目 如下:
现在有水缸可装50升水, 里面已经有15升水了。
每次挑可挑5升水。 请问要挑多少次才能挑满?
提示:1用整行变量warter表示水缸里的水int warter=15
2 用整行变量i表示挑水的次数 int i=0
3 分析循环条件(水少于50) 循环操作(水增加5升 挑水次数增加1次)
4 要 套用while循环 写出代码
对你们来说 应该很简单 JAVA循环入门的题目而已
麻烦你们了。。。 谢谢
作者: sandboy2005    时间: 2010-5-17 17:59:57     标题: 海龟加仓的问题

while(Low <= preEntryPrice - 0.5*N) // 以最低价为标准,判断能进行几次增仓
{
myEntryPrice = preEntryPrice - 0.5 * N;
preEntryPrice = myEntryPrice;  //注意这个地方PreEntryPrice=PreEntryPric-0.5*N 为什么不可以这样写呢
SellShort(TurtleUnits,myEntryPrice);
SendOrderThisBar = True;
     }
作者: sandboy2005    时间: 2010-5-18 04:46:18     标题: 这个问题为什么没有人跟进啊,老大

貌似简单的策略,但很难写,求教高手!
百分比转向交易系统,从低点上涨百分之N做多,一直持有到从高点下跌百分之N平仓,并反手开空。
本人用金字塔编了一个指标,源码如下,开拓者也学了半年了,但编这个还是很困难,求教各位高手了!

参数N默认值:1
ZX:ZIG(4,N);
Z1:=PEAKBARS(4,N,1)+1;
Z2:=TROUGHBARS(4,N,1)+1;
HH:=HHV(HIGH,Z2)*(1-N*0.01);//多头止损线
LL:=LLV(LOW,Z1)*(1+N*0.01);//空头止损线
DRAWSL(HH>=REF(HH,1) AND HH>=TROUGH(4,N,1),HH,0,1,0,COLORMAGENTA,1);//画多头止损线
VERTLINE(HH>REF(HH,1) AND HH>=TROUGH(4,N,1),HH,REF(HH,1),COLORMAGENTA,1);//画多头止损线
DRAWSL(LL<=REF(LL,1) AND LL<=PEAK(4,N,1),LL,0,1,0,COLORGREEN,1);//画空头止损线
VERTLINE(LL<=REF(LL,1) AND LL<=PEAK(4,N,1),LL,REF(LL,1),COLORGREEN,1);//画空头止损线
作者: sandboy2005    时间: 2010-5-18 04:49:03     标题: 未来函数

ZIG 含ZIG族未来函数:Zig zig(K,N): 价格之字N%转向,k=0,1,2,3 (开,高,低,收)
PEAK 含ZIG族未来函数:Peak peak(K,N,M): 第前m个zig转向波峰值
PEAKBARS 含ZIG族未来函数:PeakBars peakbars(K,N,M): 前m个zig转向波峰到当前的周期数。
TROUGH 含ZIG族未来函数:Trough trough(K,N,M):前m个zig转向波谷值。
TROUGHBARS 含ZIG族未来函数:TroughBars troughbars(K,N,M): 前m个zig转向波谷到当前的周期数。
BACKSET 含BackSet未来函数 BACKSET(X,N):向前赋值。若X非0,则将当前位置和前面共N个周期的数值设为1。
作者: sandboy2005    时间: 2010-5-18 13:07:54     标题: 确保不发单

If  ( ( Date!=Date[1]  &&  High  ==  Low  )  || Q_Last == 0 )   Return
作者: TB839295651    时间: 2020-3-26 22:16:31






欢迎光临 开拓者期货期权程序化系统交易论坛 (http://bbs.tb18.net/) Powered by Discuz! X2