Saturday, September 04, 2010

Bollinger Band Support / Resistance [BBSR]

Descripton
Summary:
This trading system script uses Bollinger Band indicators to generate trading signals whenever an underlying indicator touches the band.

Rules:
1. Buy Market - When the underlying indicator touces the lower band.
2. Sell Market - When the underlying indicator touches the upper band.
3. Sell Short Market - When the underlying indicator touches the upper band.
4. Buy To Cover Market - When the underlying indicator touches the lower band.


Variables
TypeIdentifierDescription
IntegerArray_indicatorKeysUse for holding all of the specified indicator keys indexed by symbol index.
IntegerArray_BBLKeysUse for holding all of the BBL indicator keys indexed by symbol index.
IntegerArray_BBUKeysUse for holding all of the BBU indicator keys indexed by symbol index.
Number_hitDistanceUse for indicating the percentage distance from which the specified indicator is considered near one of the bands.
Boolean_enableShortingUse for indicating whether to enable the trading system script to short symbols. [Default False]
Number_stopLossUse for the percent distance from the current price in which to place a stop order which would limit the maximum loss.
Number_takeProfitUse for the percent distance from the current price in which to place a limit order which would take profit after a specified gain.
Number_trailingStopUse for placing a trailing stop order which would limit the maximum trailing loss.
Boolean_isPercentUse for indicating whether the trailing stop is measured in percent or absolute value.

OnInitialize
Function Parameters
TypeIdentifierDescription
IndicatorindicatorKeyUse for the underlying indicator key on which to calculate the Bollinger Band indicators.
IntegerperiodsUse for the number of periods in the Bollinger Band calculations. [Default 10]
NumberfactorUse for the number of standard deviations to apply in the Bollinger Band calculations. [Default 2]
NumberhitDistanceUse for indicating the percentage distance from which the specified indicator is considered near one of the bands. [Default 0.2]
BooleanenableShortingUse for indicating whether to enable the trading system script to short symbols. [Default False]
NumberstopLossUse for the percent distance from the current price in which to place a stop order which would limit the maximum loss. [Default 0] (0 to ignore).
NumbertakeProfitUse for the percent distance from the current price in which to place a limit order which would take profit after a specified gain. [Default 0] (0 to ignore).
NumbertrailingStopUse for placing a trailing stop order which would limit the maximum trailing loss. [Default 0] (0 to ignore).
BooleanisPercentUse for indicating whether the trailing stop is measured in percent or absolute value. [Default True]
Implementation
	 ' Assign the script parameters to script variables.
	_hitDistance = hitDistance
	_enableShorting = enableShorting
	_stopLoss = stopLoss
	_takeProfit = takeProfit
	_trailingStop = trailingStop
	_isPercent = isPercent

	 ' Use for holding the specified indicator keys, indexed by symbol index.
	Redefine _indicatorKeys(SymbolCount() - 1)
	 ' Use for holding the BBL indicator keys based on the specified indicator key, indexed by symbol index.
	Redefine _BBLKeys(SymbolCount() - 1)
	 ' Use for holding the BBU indicator keys based on the specified indicator key, indexed by symbol index.
	Redefine _BBUKeys(SymbolCount() - 1)
	 ' Iterate over all of the account symbols.
	For i As Integer = 0 To SymbolCount() - 1
		 ' Create an indicator for each account symbol, based on the specified indicator.
		_indicatorKeys(i) = IndicatorCopy(indicatorKey, i)
		 ' Create a BBL indicator for each account symbol, based on the specified indicator.
		_BBLKeys(i) = IndicatorBBL(_indicatorKeys(i) ,periods, factor)
		 ' Create a BBU indicator for each account symbol, based on the specified indicator.
		_BBUKeys(i) = IndicatorBBU(_indicatorKeys(i) ,periods, factor)
		 ' Add the indicators to the symbol chart.
		ChartIndicator(i, 0, C_INVISIBLE, _indicatorKeys(i),C_LINE, 1,0)
		ChartIndicator(i, 0, C_MERGE_RIGHT, _BBLKeys(i),C_LINE, 1,1)
		ChartIndicator(i, 0, C_MERGE_RIGHT, _BBUKeys(i),C_LINE, 1,1)
	Next

OnSymbolBar
Function Parameters
TypeIdentifierDescription
IntegersymbolIndex
Implementation
	 ' Get the indicator value for the specified symbol index.
	Define value As Number = IndicatorValue(_indicatorKeys(symbolIndex))
	 ' Get the BBL indicator value for the specified symbol index.
	Define BBL As Number = IndicatorValue(_BBLKeys(symbolIndex))
	 ' Get the BBU indicator value for the specified symbol index.
	Define BBU As Number = IndicatorValue(_BBUKeys(symbolIndex))
	
	 ' If the indicator value is near the lower band.
	If (BBL < value And value < BBL * (1 + _hitDistance)) Then
		 ' If a short position exists then generate a buy to cover order.
		If (_enableShorting And PositionExists(C_OPEN, symbolIndex, C_SHORT)) Then
			 ' Generate a buy to cover market order.
			BrokerMarket(C_BUY_TO_COVER,symbolIndex, 0, C_DAY, "Near lower band.")
		End If
		 ' If no long open positions exist.
		If (Not PositionExists(C_OPEN, symbolIndex, C_LONG))
			 ' Generate a buy market order.
			Define orderIndex As Number = BrokerMarket(C_BUY,symbolIndex, 0, C_DAY, "Near lower band.")
			 ' Set a stop loss on the order.
			BrokerSetStopLossPercent(orderIndex, _stopLoss, True)
			 ' Set a take profit on the order.
			BrokerSetTakeProfitPercent(orderIndex, _takeProfit, True)
			 ' Set a trailing stop loss on the order.
			BrokerSetTrailingStopLoss(orderIndex, _isPercent, _trailingStop)
		End If
	 ' If the indicator value is near the upper band.
	ElseIf (BBU * (1 - _hitDistance) <= value And value <= BBU) Then
		 ' If a long open position exists.
		If (PositionExists(C_OPEN, symbolIndex, C_LONG))
			 ' Generate a sell market order.
			BrokerMarket(C_SELL,symbolIndex, 0, C_DAY, "Near upper band.")
		End If
		 ' If no short open positions exist.
		If (_enableShorting And Not PositionExists(C_OPEN, symbolIndex, C_SHORT)) Then
			 ' Generate a sell short market order.
			Define orderIndex As Number = BrokerMarket(C_SELL_SHORT,symbolIndex, 0, C_DAY, "Near upper band.")
			 ' Set a stop loss on the order.
			BrokerSetStopLossPercent(orderIndex, _stopLoss, True)
			 ' Set a take profit on the order.
			BrokerSetTakeProfitPercent(orderIndex, _takeProfit, True)
			 ' Set a trailing stop loss on the order.
			BrokerSetTrailingStopLoss(orderIndex, _isPercent, _trailingStop)
		End If
	End If
	
	

OnExchangeBar
Function Parameters
TypeIdentifierDescription
IntegerArraysymbolIndexes
Implementation

Copyright © 2010 IQBroker, LLC. All rights reserved.