Tuesday, September 07, 2010

Indicator Crossover [IC]

Descripton
Summary:
This trading strategy script generates orders based on the crossing of two indicators.

Rules:
1. Buy Market - When the first indicator crosses over the second indicator.
2. Sell Market - When the second indicator crosses over the first indicator.
3. Sell Short Market - When the second indicator crosses over the first indicator.
4. Buy To Cover Market -  When the first indicator crosses over the second indicator.


Variables
TypeIdentifierDescription
IntegerArray_indicatorKeys1Use for holding all of the first indicator keys duplicated from the specified indicator key and indexed by symbol index.
IntegerArray_indicatorKeys2Use for holding all of the second indicator keys duplicated from the specified indicator key and 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 stop loss, take profit and trailing stop are measured in percentages or absolute values.

OnInitialize
Function Parameters
TypeIdentifierDescription
IndicatorindicatorKey1Use for the first indicator key to duplicate for all of the account symbols and with which trading signals will be generated.
IndicatorindicatorKey2Use for the second indicator key to duplicate for all of the account symbols and with which trading signals will be generated.
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 stop loss, take profit and trailing stop are measured in percentages or absolute values. [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 first specified indicator key, indexed by symbol index.
	Redefine _indicatorKeys1(SymbolCount() - 1)
	 ' Use for holding indicator keys based on the second specified indicator key, indexed by symbol index.
	Redefine _indicatorKeys2(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 first specified indicator.
		_indicatorKeys1(i) = IndicatorCopy(indicatorKey1, i)
		 ' Add the indicator to the symbol chart.
		ChartIndicator(i, 0,C_MERGE_RIGHT, _indicatorKeys1(i),C_LINE,1, 1)
		 ' Create an indicator for each account symbol, based on the second specified indicator.
		_indicatorKeys2(i) = IndicatorCopy(indicatorKey2, i)
		 ' Add the indicator to the symbol chart.
		ChartIndicator(i, 0,C_MERGE_RIGHT, _indicatorKeys2(i),C_LINE,1, 2)
	Next

OnSymbolBar
Function Parameters
TypeIdentifierDescription
IntegersymbolIndex
Implementation
	 ' Check whether the current symbol is a futures contract which isn 't a front month contract
	If (SymbolInstrument(symbolIndex) = C_FUTURES And Not SymbolIsFrontMonthContract(symbolIndex))
		Return
	End If
	
	 ' Get the first indicator values, indexed by bar index.
	Define values1() As Number = IndicatorValues(_indicatorKeys1(symbolIndex), 0, 2)
	 ' Get the second indicator values, indexed by bar index.
	Define values2() As Number = IndicatorValues(_indicatorKeys2(symbolIndex), 0, 2)

	 ' Positive crossover.
	If (values1(0) > values2(0) And values1(1) <= values2(1)) Then
		 ' If a short position exists.
		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, "Positive crossover.")
		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, "Positive 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
	 ' Negative crossover.
	ElseIf (values1(0) < values2(0) And values1(1) >= values2(1)) 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.