MySAR ADX Trading System for Amibroker (AFL)

0
5981

sar

MySAR ADX Trading System for Amibroker (AFL) Parabolic Stop and Reversal, also known as Parabolic SAR, is a strategy that uses a trailing stop and reverse method to determine which helps traders enter good exit.J. Welles Wilder’s Parabolic Stop and Reversal is a simple study to use. The study continuously computes “stop and reverse” price points. Whenever the market  stock and securities market technical analysis, Parabolic SAR (Parabolic Stop and Reverse) is a method devised by J. Welles Wilder, Jr.,

It does look to be over all profitable. I think the trick is to take advantage of the trend. there is always going to be drawdown. The focus needs to be given to the trend.

My recommendation is to add lots to during the trend to maximize profits. The good thing about the indicator is that it will get you out of a losing trade without massive loss. So if the system is overall profitable, then we can care less of the whipsaws. Whipsaw is prelude to profit. One way I provided the chart and circled when a lot should be added. Notice when the line goes moves down its because of a price break. We should take advantage of the price movement. Then sell when we get the reversal signal. If this can be coded that would be awesome. This SAR indicator is awesome since I am a trend follower and nothing else.

This is a complete trading system using a customized SAR designed by Thomas Ludwig and ADX for filtering false signals. It tracks price movement and follows trend.

Formula

Copy & Paste Friendly

[sourcecode] //——————————————————————————
//
// Formula Name: MySAR ADX System
// Author/Uploader: Abhishek Gupta
// Date/Time Added: 2014-Mar-09
// Level: beginner/medium
// Flags: trading strategy
//
//——————————————————————————
//
// This is a complete trading system using a customized SAR designed
// by Thomas Ludwig and ADX for filtering false signals.
// It tracks price movement and follows trend.
//
// Uses PSAR xo by Thomas Ludwig
// http://www.wisestocktrader.com/indicators/2313-parabxo
//
// Written by: Abhishek Gupta
//
//——————————————————————————

SetBarsRequired(100);

_SECTION_BEGIN("Price");
SetChartOptions(0,chartShowArrows|chartShowDates);
_N(Title = StrFormat("{{NAME}} – {{INTERVAL}} {{DATE}} Open %g, Hi %g, Lo %g, Close %g (%.1f%%) Vol " +WriteVal( V, 1.0 ) +" {{VALUES}}", O, H, L, C, SelectedValue( ROC( C, 1 )) ));
Plot( C, "Close", ParamColor("Color", colorDefault ), styleNoTitle | ParamStyle("Style") | GetPriceStyle() );
_SECTION_END();

_SECTION_BEGIN("PSAR xo");
// http://www.wisestocktrader.com/indicators/2313-parabxo

//——————————————————————————
//
// Formula Name: ParabXO
// Author/Uploader: Thomas Ludwig
// E-mail: Thomas.Ludwi@gmx.de
// Date/Time Added: 2005-03-21 15:19:39
// Origin:
// Keywords:
// Level: medium
// Flags: indicator
// Formula URL: http://www.amibroker.com/library/formula.php?id=448
// Details URL: http://www.amibroker.com/library/detail.php?id=448
//
//——————————————————————————
//
// This is an enhancement of the famous Parabolic SAR indicator by Welles
// Wilder. For more details see the remarks below.
//
//——————————————————————————

/////////////////////////////////
// ParabXO implemented in AFL.
//
// The code below relies heavily on the AFL code for the
// Parabolic SAR by Tomasz Janeczko in the AB library
//
// Application: Drag & Drop.
//
// Aside from making the Accelerator Factor and its maximum
// value changeable via the Param() function I made 2 enhancements
// by some simple additional coding that were introduced by
// Dennis Meyers in an article in the S&C 4/1995 issue:
//
// 1. The start value of the AF can be set independently; thus you
// can make the indicator react considerably faster.
// 2. The ParabXO does not reverse unless penetrated
// by a specified amount (called "Crossover threshold in %" below)
// thus preventing too many whipsaws. It can be set to 0 if
// you don’t want to use this modification. Please note that
// in Meyers’ article he used an absolute number whereas a
// percentage makes more sense in my humble opinion.

// Written by: Thomas Ludwig

acc = Param("Acceleration factor", 0.1, 0.01, 0.1, 0.01);
acc = Optimize("Acceleration factor", acc, 0.01, 0.1, 0.01);

af_start = Param("Starting AF value", 0.03, 0.01, 0.1, 0.01);
af_start = Optimize("Starting AF value", af_start, 0.01, 0.1, 0.01);

af_max = Param("Maximum AF value", 0.06, 0.01, 0.1, 0.01);
af_max = Optimize("Maximum AF value", af_max, 0.01, 0.1, 0.01);

Ct = Param("Crossover threshold in %", 0, 0, 1, 0.1);
Ct = Optimize("Crossover threshold in %", Ct, 0, 1, 0.1);
Ct1=Ct/100;

IAF = acc;
MaxAF = af_max; // max acceleration

psar = Close; // initialize
psar_temp = Close;
long = 1; // assume long for initial conditions
af = af_start; // starting value of the acelleration factor
ep = Low[ 0 ]; // init extreme point
hp = High [ 0 ];
lp = Low [ 0 ];

for( i = 2; i < BarCount; i++ )
{
if ( long )
{
psar [ i ] = psar [ i-1 ] + af * ( hp – psar [ i-1 ] );
psar_temp [ i ] = psar [ i ] * (1-Ct1);
}
else
{
psar [ i ] = psar [ i-1 ] + af * ( lp – psar [ i-1 ] );
psar_temp [ i ] = psar [ i ] * (1+Ct1);
}

reverse = 0;
//check for reversal
if ( long )
{
if ( Low [ i ] < psar [ i ] * (1-Ct1) )
{
long = 0; reverse = 1; // reverse position to Short
psar [ i ] = hp; // SAR is High point in prev trade
psar_temp [ i ] = hp;
lp = Low [ i ];
af = af_start;
}
}
else
{
if ( High [ i ] > psar [ i ] * (1+Ct1) )
{
long = 1; reverse = 1; //reverse position to long
psar [ i ] = lp;
psar_temp [ i ] = lp;
hp = High [ i ];
af = af_start;
}
}

if ( reverse == 0 )
{
if ( long )
{
if ( High [ i ] > hp )
{
hp = High [ i ];
af = af + IAF;
if( af > MaxAF ) af = MaxAF;
}

if( Low[ i – 1 ] < psar[ i ] ) psar[ i ] = Low[ i – 1 ];
if( Low[ i – 2 ] < psar[ i ] ) psar[ i ] = Low[ i – 2 ];
}
else
{
if ( Low [ i ] < lp )
{
lp = Low [ i ];
af = af + IAF;
if( af > MaxAF ) af = MaxAF;
}

if( High[ i – 1 ] > psar[ i ] ) psar[ i ] = High[ i – 1 ];
if( High[ i – 2 ] > psar[ i ] ) psar[ i ] = High[ i – 2 ];

}
}
}

Plot( psar, _DEFAULT_NAME(), ParamColor( "Color", colorRed ), styleDots | styleNoLine | styleThick );
Plot( psar_temp, _DEFAULT_NAME(), ParamColor( "Color", colorRed ), styleDots | styleNoLine | styleThick );
_SECTION_END();

_SECTION_BEGIN("ADX");
range = Param("ADX Period", 13, 12, 25, 1);
range = Optimize("ADX Period", range, 20, 25, 1 );
MYADXFactor = Param("ADX Factor", 15, 12, 20, 1);
//MYADXFactor = Optimize("ADX Factor", MYADXFactor, 15, 20, 1);
MYADX = ADX(range);
_SECTION_END();

_SECTION_BEGIN("Trading signals");
Buy = Cross(Open, psar_temp) AND MYADX>MYADXFactor;
Short = Cross(psar_temp, Open) AND MYADX>MYADXFactor;
Sell = Cross(psar_temp, Open);
Cover = Cross(Open, psar_temp);

Buy = ExRem(Buy,Sell);
Sell = ExRem(Sell,Buy);
Short = ExRem(Short,Cover);
Cover = ExRem(Cover,Short);

BuyPrice = ValueWhen(Buy, Close);
ShortPrice = ValueWhen(Short, Close);
CoverPrice = ValueWhen(Cover, Close);
SellPrice = ValueWhen(Sell, Close);

dist = 1.5*ATR(10);
for (i=2; i<BarCount; i++) {
if (Cover[i]) {
PlotText( "\nCover short: " + CoverPrice[i], i+1.5, L[ i ]-dist[i]-3, colorLime);
PlotText( "\n\nProfit: " + (ShortPrice[i]-CoverPrice[i]), i+1.5, L[ i ]-dist[i]-3, colorLime);
} else if (Sell[i]) {
PlotText( "\nSell bought: " + SellPrice[i], i+1.5, H[ i ]+dist[i]+5, colorOrange);
PlotText( "\n\nProfit: " + (SellPrice[i]-BuyPrice[i]), i+1.5, H[ i ]+dist[i]+5, colorOrange);
}
if(Buy[i]) {
PlotText( "Buy: " + BuyPrice[i], i+1.5, L[ i ]-dist[i]-3, colorLime);
} else if( Short[i]) {
PlotText( "Short: " + ShortPrice[i], i+1.5, H[ i ]+dist[i]+5, colorOrange);
}
}

PlotShapes(Buy*shapeUpArrow, colorGreen, 0, Low, -28);
PlotShapes(Short*shapeDownArrow, colorRed, 0, High, -28);
PlotShapes(Cover*shapeHollowUpArrow, colorGreen, 0, Low, -45);
PlotShapes(Sell*shapeHollowDownArrow, colorRed, 0, High, -45);

printf("\nSignal came " + IIf(BarsSince(Short)>BarsSince(Buy), BarsSince(Buy), BarsSince(Short)) + " bars ago");
WriteIf(BarsSince(Short)>BarsSince(Buy), "\nBuy@ " + BuyPrice, "\nShort@ " + ShortPrice);
printf("Trailing SL: " + psar);

printf("\n\nPossiblities ");
printf("\nMax Profit: " + IIf(BarsSince(Short)>BarsSince(Buy), ((O+H+L+C)/4-BuyPrice), (ShortPrice-(O+H+L+C)/4)) );
printf("\nMin Profit: " + IIf(BarsSince(Short)>BarsSince(Buy), (psar-ShortPrice), (ShortPrice-psar)));

// Write Messages
printf("\n\nLet the profit run.");
printf("\nClose a call only when trailing SL hits");
_SECTION_END();
[/sourcecode]

SHARE

LEAVE A REPLY

Please enter your comment!
Please enter your name here