TB编程整理

  • 格式:docx
  • 大小:18.15 KB
  • 文档页数:5

TB编程整理

索引:

1) 图表的第一根k线,或者是新的一天

2) 求当天第一根Bar到现在的BAR数

3) TB的时间表示

4) 收盘平仓的例子

5) 限制连续建仓

6) 主动的加仓示例

7) CurrentContracts函数 获得当前持仓的持仓合约数。

8) 止损止盈的编写

9) buy,sell函数注意事项

内容:

1) 图表的第一根k线,或者是新的一天

If(CurrentBar == 0 || Date != Date[1])

2) 求当天第一根Bar到现在的BAR数

// 使用普通变量

Vars

Numeric TodayBars;

Begin

TodayBars = 0;

While ( CurrentBar > TodayBars and

date[TodayBars] == date[TodayBars+1] )

{

TodayBars = TodayBars + 1;

}

Commentary("TodayBars = " + text(TodayBars));

End

// 使用序列变量

Vars NumericSeries ReBars;

Begin

If(CurrentBar == 0 || Date != Date[1])

{

ReBars = 0;

}Else

{

ReBars = ReBars + 1;

}

Return ReBars;

End

3) TB的时间表示

Time()函数表示当前公式应用商品在当前Bar的时间, 如果当前时间为11:34:21.356,Time返回值为0.113421356

函数中传递时间的时候可以传个整形,然后乘以一个小数, 如:

Numeric TradeEndTime(145500);

if (Time <= RangeEndTime * 0.000001)

4) 收盘平仓的例子

// 收盘平仓

If ((Date[-1]!=InvalidInteger && Date!=Date[-1])||(Date[-1]==InvalidInteger

&& Date < CurrentDate)) //代码中将消失的信号补上

{

Sell(0,Close);

BuyToCover(0,Close);

}

Else If (Date==CurrentDate && Time==0.1455 &&

CurrentTime>=0.1459)

{

Sell(0,Close); BuyToCover(0,Close);

}

5) 限制连续建仓

MarketPosition获得当前持仓状态。

-1 当前位置为持空仓

0 当前位置为持平

1 当前位置为持多仓

// 在买卖指令的条件中加入MarketPosition条件, 以限制连续建仓

If (MarketPosition <> 1 and MA1[1] > MA2[1])

{

Buy(Lots,Open);

}

If (MarketPosition <> -1 and MA1[1] < MA2[1])

{

SellShort(lots,Open);

}

6) 主动的加仓示例

//加仓部分代码

If (MarketPosition <> 1 and MA1[1] > MA2[1]) //限制连续建仓

{

Buy(Lots,Open);

} else if (marketposition == 1 and MA1[1] > MA2[1] and high >

High[1]) //主动的加仓

{

Buy(Lots,Max(Open,High[1]));

}

If (MarketPosition <> -1 and MA1[1] < MA2[1]) //限制连续建仓 {

SellShort(lots,Open);

} Else if (marketposition == -1 and MA1[1] < MA2[1] and low

< Low[1]) //主动的加仓

{

SellShort(Lots,Min(Open,Low[1]));

}

7) CurrentContracts函数 获得当前持仓的持仓合约数。如:当前空头持仓2手,CurrentContracts则返回-2。

8) 止损止盈的编写

固定跳数的止盈或止损的写法:

// EntryPrice() 获得当前持仓的第一个建仓价格。

// PriceScale() 当前公式应用商品的计数单位。

// MinMove() 当前公式应用商品的最小变动量。

if (MarketPosition==1)

{

TargetPrice = EntryPrice + TakeProfit * MinMove *

PriceScale;

StopPrice = EntryPrice – Stoploss * MinMove * PriceScale;

if (High >= TargetPrice) Sell(0, Max(Open, TargetPrice));

Else if ( Low <= StopPrice) Sell(0, Min(Open, StopPrice));

}

//价格百分比的止盈或止损的写法:

TargetPrice = EntryPrice * (1+ TakeProfit * 0.01);

StopPrice = EntryPrice * (1 – Stoploss * 0.01);

9) buy,sell函数注意事项

buy,sell函数如果有止损止盈指令就必须限制在开仓bar不平仓,当然也会导致在开仓bar可能导致损失较大,

否则,就会有在开仓bar同时执行开平仓。

这没办法,buy,sell是通过图表信号去驱动指令的,当图表上一条K线即满足开仓、平仓时它就同时执行。

开仓后就止损止盈平仓指令用A_SendOrder发单, A_SendOrder可以满足即时发单,止损止盈具体算法需要用户自己写