I've got an issues with my stretegy based on triple screen by Alexander Elder concept.
I'm using two timeframes. Weekly for detecting the trend and daily for entering the positions.
On weekly I'm testing if current price closed above EMA(26) and if MACD is raising (if current bar is above previous one - for bull trend).
If there is a trend of weekly I'm trying to enter the position on daily by WilliamsR. In other words WilliamsR can't be overbought (above -20) for long positions and oversold (below -80) for short positions.
But as you can see from the attached screenshot I was executed into short position despite oversold WilliamsR.
I've run out of bullets already and I'd highly appreciate any hints.
Thanks in advance!
Regards,
Ondrej
------------------------------------
Dump of my triple screen strategy:
protected override void OnBarUpdate()
{
if (Position.MarketPosition == MarketPosition.Flat) //no open positions at the moment
{
// 1. screen on Weekly
if (Closes[1][0] > EMA(BarsArray[1],26)[0]
&& (MACD(BarsArray[1],12, 26, 9)[0] > MACD(BarsArray[1],12, 26, 9)[1]))
{
//bull trend on weekly chart
// 2. screen on Daily
if (WilliamsR(14)[0] < -20)
{
SetStopLoss(100);
EnterLong(DefaultQuantity, "Long");
stoploss = GetCurrentAsk()-2;
Print ("Stoploss" +stoploss);
Print ("%R: " +WilliamsR(14)[0]);
}
}
// 1. screen on Weekly
if (Closes[1][0] < EMA(BarsArray[1],26)[0]
&& (MACD(BarsArray[1],12, 26, 9)[0] < MACD(BarsArray[1],12, 26, 9)[1]))
{
//bear trend on weekly
// 2. screen on Daily
if (WilliamsR(14)[0] > -80)
{
SetStopLoss(100);
EnterShort(DefaultQuantity, "Short");
stoploss = GetCurrentBid()-2;
Print ("Stoploss" +stoploss);
Print ("%R: " +WilliamsR(14)[0]);
}
}
}
Print("Open PnL: " + Position.GetProfitLoss(Close[0], PerformanceUnit.Points));
if (Position.MarketPosition == MarketPosition.Long && Position.GetProfitLoss(Close[0], PerformanceUnit.Points) > 0 && Close[0] > EMA(13)[0])
{
SetStopLoss(CalculationMode.Price, EMA(13)[0]);
}
if (Position.MarketPosition == MarketPosition.Short && Position.GetProfitLoss(Close[0], PerformanceUnit.Points) > 0 && Close[0] < EMA(13)[0])
{
SetStopLoss(CalculationMode.Price, EMA(13)[0]);
}
}

Comment