Summary: This trading strategy script generates orders based on the overbought / oversold status of a single indicator. Rules: 1. Buy Market - When the indicator is oversold. 2. Sell Market - When the indicator is overbought. 3. Sell Short Market - When the indicator is overbought. 4. Buy To Cover Market - When the indicator is oversold.
' Assign the script parameters to script variables. _overboughtValue = overboughtValue _oversoldValue = oversoldValue _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 _indicatorKeys(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) ' Add the indicator to the symbol chart. ChartIndicator(i, 0,C_MERGE_LEFT, _indicatorKeys(i),C_LINE,1, 0) Next
' 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 indicator value, indexed by bar index. Define value As Number = IndicatorValue(_indicatorKeys(symbolIndex)) ' Oversold. If (value < _oversoldValue) 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, "Oversold.") 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, "Oversold.") ' 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 ' Overbought. ElseIf (value > _overboughtValue) 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, "Overbought.") 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, "Overbought.") ' 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