Saturday, September 04, 2010

Chaikin Oscillator Crossovers [COS]

Descripton
Summary:
This trading system script uses an Chaikin Oscillator indicator to generate trading signals whenever the oscillator crosses above and below zero.

Rules:
1. Buy Market - When the Chaikin Oscillator crosses over zero.
2. Sell Market - When the Chaikin Oscillator crosses under zero.
3. Sell Short Market -  When the Chaikin Oscillator crosses under zero.
4. Buy To Cover Market - When the Chaikin Oscillator crosses over zero.


Variables
TypeIdentifierDescription
IntegerArray_COKeysUse for holding all of the CO indicator keys indexed by symbol index.
Boolean_enableShortingUse for indicating whether to enable the trading system script to short symbols.
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
IntegershortPeriodsUse for the number of periods in the short / fast exponential moving average used to calculate the Chaikin Oscillator indicator. [Default 10]
IntegerlongPeriodsUse for the number of periods in the long / slow exponential moving average used to calculate the Chaikin Oscillator indicator. [Default 20]
IntegerfirstPeriodsUse for the number of periods to include in the calculation of the first value of the exponential moving averages used by the Chaikin Oscillator indicator. [Default 0]
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.
	_enableShorting = enableShorting
	_stopLoss = stopLoss
	_takeProfit = takeProfit
	_trailingStop = trailingStop
	_isPercent = isPercent
	
	 ' Use for holding indicator keys based on the specified indicator key, indexed by symbol index.
	Redefine _COKeys(SymbolCount() - 1)
	 ' Iterate over all of the account symbols.
	For i As Integer = 0 To SymbolCount() - 1
		 ' Create a CO indicator for each account symbol, based on the specified indicator.
		_COKeys(i) = IndicatorCO(i,shortPeriods, longPeriods, firstPeriods)
		 ' Add the indicator to the symbol chart.
		ChartIndicator(i, 0, C_MERGE_LEFT, _COKeys(i),C_LINE, 1,0)
	Next

OnSymbolBar
Function Parameters
TypeIdentifierDescription
IntegersymbolIndex
Implementation
	 ' Get the indicator value for the specified symbol index.
	Define values() As Number = IndicatorValues(_COKeys(symbolIndex),0, 2)
	
	 ' If the indicator value crosses over zero, generate a buy order.
	If (values(0) > 0 And values(1) < 0) Then
		 ' If a short position exists then generate a buy to cover order.
		If (_enableShorting And PositionExists(C_OPEN, symbolIndex, C_SHORT)) Then
			BrokerMarket(C_BUY_TO_COVER,symbolIndex, 0, C_DAY, "Positive crossover.")
		End If
		 ' If no long open positions exist.
		If (Not PositionExists(C_OPEN, symbolIndex, C_LONG))
			Define orderIndex As Number = BrokerMarket(C_BUY,symbolIndex, 0, C_DAY, "Positive crossover.")
			BrokerSetStopLossPercent(orderIndex, _stopLoss, True)
			BrokerSetTakeProfitPercent(orderIndex, _takeProfit, True)
			BrokerSetTrailingStopLoss(orderIndex, _isPercent, _trailingStop)
		End If
	 ' If the indicator value crosses under zero, generate a sell order.
	ElseIf (values(0) < 0 And values(1) > 0) 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, "Negative crossover.")
		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, "Negative crossover.")
			 ' 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.