Didn't find the time anymore to dive into this, so I publish it as is.
It can act as a base to be build upon.
The two things which matters are the values used for periods and pds, and those can be optimized.
_SECTION_BEGIN("DetrendedPriceOsc_System");
Hc=(O+H+L+O)/4; // CLOSE REPLACED BY OPEN
Ho = AMA( Ref( Hc, -1 ), 0.5 );
pds = Optimize("pds ",Param("pds ",1,1,14,1),1,14,1);//4
period = Optimize("period ",Param("period ",1,1,14,1),1,14,1);
function DetrendedPriceOsc( Periods )
{
return Hc - AMA(Ref( MA( Hc, Periods ), -( 1 + Periods/2 ) ),0.5);
}
myArray1 = ( RSIa( DetrendedPriceOsc( period ),pds ) + Ref(RSIa(DetrendedPriceOsc( period ),pds),-1) + Ref(RSIa(DetrendedPriceOsc( period ),pds),-2) +Ref(RSIa(DetrendedPriceOsc( period ),pds),-3))/4 ;
myArray2 = ( RSIa( Ho,pds )+ Ref(RSIa( Ho,pds ),-1) +Ref(RSIa( Ho,pds ),-2) + Ref(RSIa(Ho,pds),-3))/4 ;
Plot( myArray1 , " RSI_myArray1 ", IIf( myArray1 >Ref(myArray1 ,-1), colorGreen, colorRed ));
Plot( myArray2 , " RSI_myArray2 ", IIf( myArray2 >Ref(myArray2 ,-1), colorGreen, colorRed ));
Plot(80,"RESISTENCE",colorRed, styleLine|styleDashed | styleThick);
Plot(50,"",colorBlack, styleLine|styleDashed | styleThick);
Plot(20,"SUPPORT",colorBlue, styleLine|styleDashed | styleThick);
Buy=Cover=Cross(myarray1,myarray2) ;
Short=Sell=Cross(myarray2,myarray1) ;
Plot ( 2, "", IIf( Buy , colorGreen, IIf( Short, colorRed, colorPink )), styleOwnScale|styleArea|styleNoLabel, -0.5, 100 );
ExRem(Buy,Sell);
ExRem(Short,Cover);
PlotShapes( Buy * shapeUpTriangle, colorBrightGreen, 0);
PlotShapes( Short * shapeDownTriangle, colorOrange, 0);
PlotShapes( Sell * shapeSmallCircle, colorRed, 0,myarray1,Offset=25);
PlotShapes( Cover * shapeSmallCircle, colorDarkGreen, 0,myarray1,Offset=-25);
ApplyStop(stopTypeLoss, stopModePercent, Optimize( "stopTypeLoss", 3.0, 2.5, 2.5, 0.5 ) ,1, True );
ApplyStop(stopTypeProfit , stopModePercent, Optimize( "stopTypeProfit ", 2.5, 2.5, 2.5, 0.5 ) ,1, True );
ApplyStop(stopTypeTrailing , stopModePercent, Optimize( "stopTypeProfit ", 3.5, 2.5, 2.5, 0.5 ) ,1, True );
// change the questionmarks the the value which is used to plot the indicator
base_array=myarray1;
////////////////////////////// HIGHLY IMPORTANT ////////////////////
//ACTIVATE STOPS IN SETTINGS
e = Equity(1,0); /* Highly Important!!. "Removes all extra signals, evaluates
stops AND writes BACK signals to Sell/Cover arrays". As it should be!!*/
PlotShapes( Buy* shapeUpArrow , colorBlack, 0);
PlotShapes( Short* shapeDownArrow , colorBlack, 0);
/*
1 - regular exit
2 - Max. loss
3 - profit target
4 - trailing
5 - ruin stop
6 - n-bar stop
*/
PlotShapes(IIf(Ref(Cover==2,-1), shapeCircle, shapeNone),colorRed,0,base_array,0); //stoploss
PlotShapes(IIf(Ref(Cover==3,-1), shapeCircle, shapeNone),colorGreen,0,base_array,0); //profit target
PlotShapes(IIf(Ref(Sell==2,-1), shapeCircle, shapeNone),colorRed,0,base_array,0); //stoploss
PlotShapes(IIf(Ref(Sell==3,-1), shapeCircle, shapeNone),colorGreen,0,base_array,0); //profit target
////////////////////////////////////////////////////////////////////////////////
OffsetBuy = Param("Offset_Buy (green)", -9, -25, 25, 1 );
OffsetSell = Param("Offset_Sell (blue)", 2, -25, 25, 1 );
OffsetShort = Param("Offset_Short (red)", 7, -25, 25, 1 );
OffsetCover = Param("Offset_Cover (orange)", -4, -25, 25, 1 );
OND=Ref(O,1); //OPEN NEXT DAY
base_arrayBUY=base_array+OffsetBuy ; //just for offset
base_arraySELL=base_array+OffsetSell ; //just for offset
base_arraySHORT=base_array+OffsetShort ; //just for offset
base_arrayCOVER=base_array+OffsetCover ; //just for offset
for( i = 0; i < BarCount; i++ )
{
if( Buy ) PlotText( "EL " + OND[ i ], i, base_arrayBUY[ i ], colorGreen );
if( Sell AND NOT Short ) PlotText( "LE " + OND[ i ], i, base_arraySELL[ i ], colorBlue);
if( Short ) PlotText( "ES " + OND[ i ], i, base_arraySHORT[ i ], colorRed);
if( Cover AND NOT Buy ) PlotText( "SE " + OND[ i ], i, base_arrayCOVER[ i ], colorOrange);
}
_SECTION_END();
_SECTION_BEGIN("trending ribbon");
GraphXSpace=15;
uptrend=Buy;
downtrend=Short;
Plot( 2, "ribbon",IIf( uptrend, colorGreen, IIf( downtrend, colorRed, colorLavender )), styleOwnScale|styleArea|styleNoLabel, -0.5, 100 );
_SECTION_END();
//////////////////////////////////////////////////////////////////////////////