海阔天空

海阔凭鱼跃 天高任鸟飞

 

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可以满足即时发单,止损止盈具体算法需要用户自己写

posted on 2012-06-22 22:35  liuym  阅读(2889)  评论(0编辑  收藏  举报

导航