NexusFi: Find Your Edge


Home Menu

 





Interactive Brokers' PSAR


Discussion in Platforms and Indicators

Updated
    1. trending_up 1,470 views
    2. thumb_up 1 thanks given
    3. group 2 followers
    1. forum 4 posts
    2. attach_file 1 attachments




 
Search this Thread

Interactive Brokers' PSAR

  #1 (permalink)
OneTwoThree
Orlando, FL
 
Posts: 6 since Dec 2017
Thanks Given: 0
Thanks Received: 5

Hi all,

I am trying to write a PSAR indicator for my automated trading program. My current results match freestockcharts.com and yahoo finance but do not match Interactive Brokers' PSAR at the trend reversal. I noticed that Interactive Brokers' PSAR can have PSARs within the bars (See Below image)
d9GjkoZ.png on imgur

I know there has been previous discussion on this forum 37444 is the topic number. I can't post links or images yet because I am a new user.

There looks like there is some debate over how to correctly calculate the PSAR and I would like to match IB's PSAR since I believe it is better and has fewer false signals.

Here is the my PSAR class along with some recent SPY data for debugging:
 
Code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace PSAR_Analyze
{
    // PSAR Class
    public class PSAR
    {
        public PSAR()
        {
            this.m_high_prices_5 = new List<double>();
            this.m_low_prices_5 = new List<double>();

            this.m_ep = -9999;
            this.m_prev_ep = -9999;
            this.m_acc = 0.02;
            this.m_acc_upper = 0.2;
            this.m_init_psar = -9999;
            this.m_psar = -9999;
            this.m_psar_inter = -9999;
            this.m_trend_up = false;
            this.m_prev_trend_up = false;
        }

        public void CalculatePSAR(double p_open_price, double p_close_price, double p_high_price, double p_low_price)
        {
            if (this.m_ep == -9999)
            {
                this.m_ep = p_low_price;
                this.m_psar = p_high_price;
                this.m_trend_up = false;
            }

            this.m_high_prices_5.Add(p_high_price);
            // Keep only the latest close prices
            if (this.m_high_prices_5.Count == 6)
            {
                this.m_high_prices_5.RemoveAt(0);
            }

            this.m_low_prices_5.Add(p_low_price);
            // Keep only the latest close prices
            if (this.m_low_prices_5.Count == 6)
            {
                this.m_low_prices_5.RemoveAt(0);
            }

            this.m_psar_inter = (this.m_psar - this.m_ep) * this.m_acc;

            if (this.m_trend_up == false)
            {
                List<double> init_psar_list = new List<double>();

                init_psar_list.Add(this.m_psar - this.m_psar_inter);
                if (this.m_high_prices_5.Count == 1)
                {
                    init_psar_list.Add(m_high_prices_5[0]);
                }
                else
                {
                    init_psar_list.Add(this.m_high_prices_5[this.m_high_prices_5.Count - 2]);
                    init_psar_list.Add(this.m_high_prices_5.Last());
                }

                this.m_init_psar = init_psar_list.Max();
            }
            else
            {
                List<double> init_psar_list = new List<double>();

                init_psar_list.Add(this.m_psar - this.m_psar_inter);
                if (this.m_low_prices_5.Count == 1)
                {
                    init_psar_list.Add(m_low_prices_5[0]);
                }
                else
                {
                    init_psar_list.Add(this.m_low_prices_5[this.m_low_prices_5.Count - 2]);
                    init_psar_list.Add(this.m_low_prices_5.Last());
                }

                this.m_init_psar = init_psar_list.Min();
            }

            if (this.m_trend_up == false && this.m_high_prices_5.Last() < this.m_init_psar)
            {
                this.m_psar = this.m_init_psar;
            }

            if (this.m_trend_up == true && this.m_low_prices_5.Last() > this.m_init_psar)
            {
                this.m_psar = this.m_init_psar;
            }

            if (this.m_trend_up == false && this.m_high_prices_5.Last() >= this.m_init_psar)
            {
                this.m_psar = this.m_ep;
            }

            if (this.m_trend_up == true && this.m_low_prices_5.Last() <= this.m_init_psar)
            {
                this.m_psar = this.m_ep;
            }

            if (this.m_psar > p_close_price)
            {
                this.m_prev_trend_up = this.m_trend_up;
                this.m_trend_up = false;
            }
            else
            {
                this.m_prev_trend_up = this.m_trend_up;
                this.m_trend_up = true;
            }

            if (this.m_trend_up == false)
            {
                this.m_prev_ep = this.m_ep;
                this.m_ep = Math.Min(this.m_ep, p_low_price);
            }
            else
            {
                this.m_prev_ep = this.m_ep;
                this.m_ep = Math.Max(this.m_ep, p_high_price);
            }

            if (this.m_trend_up == this.m_prev_trend_up && this.m_ep != this.m_prev_ep && this.m_acc < this.m_acc_upper)
            {
                this.m_acc += 0.02;
            }

            if (this.m_trend_up != this.m_prev_trend_up)
            {
                this.m_acc = 0.02;
            }
        }

        public List<double> m_high_prices_5;
        public List<double> m_low_prices_5;

        public double m_ep { get; set; }
        public double m_prev_ep { get; set; }
        public double m_acc { get; set; }
        public double m_acc_upper { get; set; }
        public double m_init_psar { get; set; }
        public double m_psar_inter { get; set; }
        public double m_psar { get; set; }
        public bool m_trend_up { get; set; }
        public bool m_prev_trend_up { get; set; }
    }

    class Program
    {
        static void Main(string[] args)
        {
            PSAR psar = new PSAR();
            psar.CalculatePSAR(249.419998, 249.080002, 249.699997, 248.809998);
            psar.CalculatePSAR(249.880005, 250.050003, 250.490005, 248.869995);
            psar.CalculatePSAR(249.729996, 250.350006, 250.440002, 249.630005);
            psar.CalculatePSAR(250.339996, 251.229996, 251.320007, 250.130005);
            psar.CalculatePSAR(251.490005, 252.320007, 252.320007, 251.289993);
            psar.CalculatePSAR(252.320007, 252.860001, 252.889999, 252.229996);
            psar.CalculatePSAR(252.690002, 253.160004, 253.440002, 252.559998);
            psar.CalculatePSAR(253.539993, 254.660004, 254.679993, 253.199997);
            psar.CalculatePSAR(254.149994, 254.369995, 254.699997, 253.850006);
            psar.CalculatePSAR(254.630005, 253.949997, 254.699997, 253.649994);
            psar.CalculatePSAR(254.600006, 254.619995, 255.050003, 253.979996);
            psar.CalculatePSAR(254.509995, 255.020004, 255.020004, 254.320007);
            psar.CalculatePSAR(254.660004, 254.639999, 255.059998, 254.369995);
            psar.CalculatePSAR(255.139999, 254.949997, 255.270004, 254.639999);
            psar.CalculatePSAR(255.210007, 255.289993, 255.509995, 254.820007);
            psar.CalculatePSAR(255.229996, 255.470001, 255.520004, 254.979996);
            psar.CalculatePSAR(255.899994, 255.720001, 255.949997, 255.5);
            psar.CalculatePSAR(254.830002, 255.789993, 255.830002, 254.350006);
            psar.CalculatePSAR(256.700012, 257.109985, 257.140015, 255.770004);
            psar.CalculatePSAR(257.480011, 256.109985, 257.51001, 256.019989);
            psar.CalculatePSAR(256.600006, 256.559998, 256.829987, 256.149994);
            psar.CalculatePSAR(256.179993, 255.289993, 256.309998, 254);
            psar.CalculatePSAR(255.990005, 255.619995, 256.299988, 255.479996);
            psar.CalculatePSAR(256.470001, 257.709991, 257.890015, 255.630005);
            psar.CalculatePSAR(256.470001, 256.75, 257.600006, 256.410004);
            psar.CalculatePSAR(257.179993, 257.149994, 257.440002, 256.809998);
            psar.CalculatePSAR(258.040009, 257.48999, 258.429993, 257.070007);
            psar.CalculatePSAR(257.410004, 257.589996, 257.75, 256.190002);
            psar.CalculatePSAR(257.769989, 258.450012, 258.5, 257.299988);
            DateTime cur_day = new DateTime(2017, 11, 3);
            Console.WriteLine(String.Format("DATE: {0}, PSAR: {1}, TREND_UP: {2}", cur_day.ToShortDateString(), Math.Round(psar.m_psar, 2), psar.m_trend_up));

            psar.CalculatePSAR(258.299988, 258.850006, 259, 258.220001);
            cur_day = cur_day.AddDays(3);
            Console.WriteLine(String.Format("DATE: {0}, PSAR: {1}, TREND_UP: {2}", cur_day.ToShortDateString(), Math.Round(psar.m_psar, 2), psar.m_trend_up));

            psar.CalculatePSAR(258.970001, 258.670013, 259.350006, 258.089996);
            cur_day = cur_day.AddDays(1);
            Console.WriteLine(String.Format("DATE: {0}, PSAR: {1}, TREND_UP: {2}", cur_day.ToShortDateString(), Math.Round(psar.m_psar, 2), psar.m_trend_up));

            psar.CalculatePSAR(258.470001, 259.109985, 259.220001, 258.149994);
            cur_day = cur_day.AddDays(1);
            Console.WriteLine(String.Format("DATE: {0}, PSAR: {1}, TREND_UP: {2}", cur_day.ToShortDateString(), Math.Round(psar.m_psar, 2), psar.m_trend_up));

            psar.CalculatePSAR(257.730011, 258.170013, 258.390015, 256.359985);
            cur_day = cur_day.AddDays(1);
            Console.WriteLine(String.Format("DATE: {0}, PSAR: {1}, TREND_UP: {2}", cur_day.ToShortDateString(), Math.Round(psar.m_psar, 2), psar.m_trend_up));

            psar.CalculatePSAR(257.730011, 258.089996, 258.290009, 257.369995);
            cur_day = cur_day.AddDays(1);
            Console.WriteLine(String.Format("DATE: {0}, PSAR: {1}, TREND_UP: {2}", cur_day.ToShortDateString(), Math.Round(psar.m_psar, 2), psar.m_trend_up));

            psar.CalculatePSAR(257.309998, 258.329987, 258.589996, 257.269989);
            cur_day = cur_day.AddDays(3);
            Console.WriteLine(String.Format("DATE: {0}, PSAR: {1}, TREND_UP: {2}", cur_day.ToShortDateString(), Math.Round(psar.m_psar, 2), psar.m_trend_up));

            psar.CalculatePSAR(257.410004, 257.730011, 257.850006, 256.519989);
            cur_day = cur_day.AddDays(1);
            Console.WriteLine(String.Format("DATE: {0}, PSAR: {1}, TREND_UP: {2}", cur_day.ToShortDateString(), Math.Round(psar.m_psar, 2), psar.m_trend_up));
            
            psar.CalculatePSAR(256.619995, 256.440002, 257.220001, 255.630005);
            cur_day = cur_day.AddDays(1);
            Console.WriteLine(String.Format("DATE: {0}, PSAR: {1}, TREND_UP: {2}", cur_day.ToShortDateString(), Math.Round(psar.m_psar, 2), psar.m_trend_up));

            psar.CalculatePSAR(257.519989, 258.619995, 259.040009, 257.470001);
            cur_day = cur_day.AddDays(1);
            Console.WriteLine(String.Format("DATE: {0}, PSAR: {1}, TREND_UP: {2}", cur_day.ToShortDateString(), Math.Round(psar.m_psar, 2), psar.m_trend_up));

            psar.CalculatePSAR(258.220001, 257.859985, 258.589996, 257.769989);
            cur_day = cur_day.AddDays(1);
            Console.WriteLine(String.Format("DATE: {0}, PSAR: {1}, TREND_UP: {2}", cur_day.ToShortDateString(), Math.Round(psar.m_psar, 2), psar.m_trend_up));

            psar.CalculatePSAR(258.140015, 258.299988, 258.519989, 257.859985);
            cur_day = cur_day.AddDays(3);
            Console.WriteLine(String.Format("DATE: {0}, PSAR: {1}, TREND_UP: {2}", cur_day.ToShortDateString(), Math.Round(psar.m_psar, 2), psar.m_trend_up));

            psar.CalculatePSAR(259.179993, 259.98999, 260.200012, 258.26001);
            cur_day = cur_day.AddDays(1);
            Console.WriteLine(String.Format("DATE: {0}, PSAR: {1}, TREND_UP: {2}", cur_day.ToShortDateString(), Math.Round(psar.m_psar, 2), psar.m_trend_up));

            psar.CalculatePSAR(260, 259.76001, 260.149994, 259.570007);
            cur_day = cur_day.AddDays(1);
            Console.WriteLine(String.Format("DATE: {0}, PSAR: {1}, TREND_UP: {2}", cur_day.ToShortDateString(), Math.Round(psar.m_psar, 2), psar.m_trend_up));

            psar.CalculatePSAR(260.320007, 260.359985, 260.480011, 260.160004);
            cur_day = cur_day.AddDays(2);
            Console.WriteLine(String.Format("DATE: {0}, PSAR: {1}, TREND_UP: {2}", cur_day.ToShortDateString(), Math.Round(psar.m_psar, 2), psar.m_trend_up));

            psar.CalculatePSAR(260.410004, 260.230011, 260.75, 260);
            cur_day = cur_day.AddDays(3);
            Console.WriteLine(String.Format("DATE: {0}, PSAR: {1}, TREND_UP: {2}", cur_day.ToShortDateString(), Math.Round(psar.m_psar, 2), psar.m_trend_up));

            psar.CalculatePSAR(260.76001, 262.869995, 262.899994, 260.649994);
            cur_day = cur_day.AddDays(1);
            Console.WriteLine(String.Format("DATE: {0}, PSAR: {1}, TREND_UP: {2}", cur_day.ToShortDateString(), Math.Round(psar.m_psar, 2), psar.m_trend_up));

            psar.CalculatePSAR(263.019989, 262.709991, 263.630005, 262.200012);
            cur_day = cur_day.AddDays(1);
            Console.WriteLine(String.Format("DATE: {0}, PSAR: {1}, TREND_UP: {2}", cur_day.ToShortDateString(), Math.Round(psar.m_psar, 2), psar.m_trend_up));

            psar.CalculatePSAR(263.76001, 265.01001, 266.049988, 263.670013);
            cur_day = cur_day.AddDays(1);
            Console.WriteLine(String.Format("DATE: {0}, PSAR: {1}, TREND_UP: {2}", cur_day.ToShortDateString(), Math.Round(psar.m_psar, 2), psar.m_trend_up));

            psar.CalculatePSAR(264.76001, 264.459991, 265.309998, 260.76001);
            cur_day = cur_day.AddDays(1);
            Console.WriteLine(String.Format("DATE: {0}, PSAR: {1}, TREND_UP: {2}", cur_day.ToShortDateString(), Math.Round(psar.m_psar, 2), psar.m_trend_up));
            
            psar.CalculatePSAR(266.309998, 264.140015, 266.799988, 264.079987);
            cur_day = cur_day.AddDays(3);
            Console.WriteLine(String.Format("DATE: {0}, PSAR: {1}, TREND_UP: {2}", cur_day.ToShortDateString(), Math.Round(psar.m_psar, 2), psar.m_trend_up));

            psar.CalculatePSAR(263.190002, 263.190002, 265.149994, 263.040009);
            cur_day = cur_day.AddDays(1);
            Console.WriteLine(String.Format("DATE: {0}, PSAR: {1}, TREND_UP: {2}", cur_day.ToShortDateString(), Math.Round(psar.m_psar, 2), psar.m_trend_up));
            
            Console.ReadLine();
        }
    }
}
Thank you for any help

Reply With Quote

Can you help answer these questions
from other members on NexusFi?
Quantum physics & Trading dynamics
The Elite Circle
static margin on the right side of a chart
NinjaTrader
ZombieSqueeze
Platforms and Indicators
Strategy stop orders partially filled
EasyLanguage Programming
Pivot Indicator like the old SwingTemp by Big Mike
NinjaTrader
 
Best Threads (Most Thanked)
in the last 7 days on NexusFi
Funded Trader platforms
33 thanks
Spoo-nalysis ES e-mini futures S&P 500
16 thanks
GFIs1 1 DAX trade per day journal
15 thanks
The Trading Pit "Futures VIP" Account Journal
15 thanks
Trading with Intuition
14 thanks
  #2 (permalink)
 
rleplae's Avatar
 rleplae 
Gits (Hooglede) Belgium
Legendary Market Wizard
 
Experience: Master
Platform: NinjaTrader, Proprietary,
Broker: Ninjabrokerage/IQfeed + Synthetic datafeed
Trading: 6A, 6B, 6C, 6E, 6J, 6S, ES, NQ, YM, AEX, CL, NG, ZB, ZN, ZC, ZS, GC
Posts: 3,003 since Sep 2013
Thanks Given: 2,442
Thanks Received: 5,863

This is my PSAR.
It does not match investing.com but i does match ProRealtime

 
Code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using Theta_AEX.Infrastructure;
using Theta_AEX.Models;

namespace Theta_AEX.Indicators
{
    public class ParabolicSar
    {

        bool SARlongPosition;
        decimal SARaf;
        decimal SARxp;
        bool SARafIncreased = false;
        int SARprevBar = 0;
        int SARreverseBar = -1;
        decimal SARprevSAR = 0;

        decimal SARAcceleration = 0.02M;
        decimal SARAccelerationMax = 0.2M;
        decimal SARAccelerationStep = 0.02M;

        decimal SARtodaySAR;
        decimal SARreverseValue;


        /// SAR indicator
        /// 
        public void calcSAR(List<DailyBarData> Bars)
        {
            for (int i=0;i < Bars.Count; i++)
            {
                loopcalcSAR(Bars, i);
            }
        }

        void loopcalcSAR(List<DailyBarData> Bars, int BarsCount)
        { 
            if (BarsCount < 2)
                return;

            else if (BarsCount == 2)
            {
                SARlongPosition = Bars[BarsCount ].High > Bars[BarsCount - 1].High;

                if (SARlongPosition)
                    SARxp = Math.Max(Math.Max(Bars[BarsCount ].High, Bars[BarsCount - 1].High),
                        Bars[BarsCount - 2].High);
                else
                    SARxp = Math.Min(Math.Min(Bars[BarsCount ].Low, Bars[BarsCount - 1].Low),
                        Bars[BarsCount - 2].Low);

                SARaf = 0.02M;
                Bars[BarsCount ].SAR = (SARxp + (SARlongPosition ? -1 : 1) * ((Math.Max(Math.Max(Bars[BarsCount ].High, Bars[BarsCount - 1].High),
                        Bars[BarsCount - 2].High) - Math.Min(Math.Min(Bars[BarsCount ].Low, Bars[BarsCount - 1].Low),
                        Bars[BarsCount - 2].Low)) * SARaf));
                return;
            }

            // reset accelerator increase limiter on new bars
            if (SARafIncreased && SARprevBar != BarsCount )
                SARafIncreased = false;

            if (SARreverseBar != BarsCount )
            {
                SARtodaySAR = TodaySAR(Bars[BarsCount - 1].SAR + SARaf * (SARxp - Bars[BarsCount - 1].SAR), Bars, BarsCount);
                //Console.WriteLine("SAR-Y:"+ Bars[BarsCount - 2].SAR + " SARtodaySAR:"+SARtodaySAR);
                for (int x = 1; x <= 2; x++)
                {
                    if (SARlongPosition)
                    {
                        if (SARtodaySAR > Bars[BarsCount  - x].Low)
                            SARtodaySAR = Bars[BarsCount  - x].Low;
                    }
                    else
                    {
                        if (SARtodaySAR < Bars[BarsCount  - x].High)
                            SARtodaySAR = Bars[BarsCount  - x].High;

                    }
                }

                //Console.WriteLine("SAR-Y:" + Bars[BarsCount - 2].SAR + " SARtodaySAR:" + SARtodaySAR);

                // Reverse Position
                if ((SARlongPosition && (Bars[BarsCount ].Low < SARtodaySAR || Bars[BarsCount - 1].Low < SARtodaySAR))
                    || (!SARlongPosition && (Bars[BarsCount ].High > SARtodaySAR || Bars[BarsCount - 1].High > SARtodaySAR)))
                {
                    Bars[BarsCount ].SAR = (Reverse(Bars, BarsCount));
                    Bars[BarsCount ].SARUptrend = SARlongPosition;

                    return;
                }
                else if (SARlongPosition)
                {
                    // Process a new SAR value only on a new bar or if SAR value was penetrated
                    if (SARprevBar != BarsCount  || Bars[BarsCount ].Low < SARprevSAR)
                    {
                        Bars[BarsCount ].SAR = SARtodaySAR;
                        SARprevSAR = SARtodaySAR;
                    }
                    else
                    {
                        Bars[BarsCount ].SAR = SARprevSAR;
                    }
                    if (Bars[BarsCount ].High > SARxp)
                    {
                        SARxp = Bars[BarsCount ].High;
                        AfIncrease();
                    }
                    Bars[BarsCount ].SARUptrend = SARlongPosition;

                }
                else if (!SARlongPosition)
                {
                    // Process a new SAR value only on a new bar or if SAR value was penetrated
                    if (SARprevBar != BarsCount || Bars[BarsCount ].High > SARprevSAR)
                    {
                        Bars[BarsCount ].SAR = SARtodaySAR;
                        SARprevSAR = SARtodaySAR;
                    }
                    else
                    {
                        Bars[BarsCount ].SAR = SARprevSAR;
                    }
                    if (Bars[BarsCount ].Low < SARxp)
                    {
                        SARxp = Bars[BarsCount ].Low;
                        AfIncrease();
                    }
                    Bars[BarsCount ].SARUptrend = SARlongPosition;
                }
            }
            // Current event is on the same bar as the reversal bar
            else
            {
                //  Only set new xp value. No Increasing af since this is the first bar
                if (SARlongPosition && Bars[BarsCount ].High > SARxp)
                    SARxp = Bars[BarsCount ].High;
                else if (!SARlongPosition && Bars[BarsCount ].Low < SARxp)
                    SARxp = Bars[BarsCount ].Low;

                Bars[BarsCount ].SAR = SARprevSAR;
                Bars[BarsCount ].SARUptrend = SARlongPosition;

                SARtodaySAR = TodaySAR(SARlongPosition ? Math.Min(SARreverseValue, Bars[BarsCount ].Low) :
                    Math.Max(SARreverseValue, Bars[BarsCount ].High) , Bars, BarsCount);
            }

            SARprevBar = BarsCount ;
        }

        private void AfIncrease()
        {
            if (!SARafIncreased)
            {
                SARaf = Math.Min(SARAccelerationMax, SARaf + SARAccelerationStep);
                SARafIncreased = true;
            }
            return;
        }

        // Additional rule. SAR for today can't be placed inside the bar of day - 1 or day - 2.
        private decimal TodaySAR(decimal todaySAR, List<DailyBarData> Bars, int BarsCount)
        {
            if (SARlongPosition)
            {
                decimal lowestSAR = Math.Min(Math.Min(todaySAR, Bars[BarsCount ].Low), Bars[BarsCount - 1].Low);
                if (Bars[BarsCount ].Low > lowestSAR)
                    todaySAR = lowestSAR;
                else
                    todaySAR = Reverse(Bars, BarsCount);
            }
            else
            {
                decimal highestSAR = Math.Max(Math.Max(todaySAR, Bars[BarsCount ].High), Bars[BarsCount - 1].High);
                if (Bars[BarsCount ].High < highestSAR)
                    todaySAR = highestSAR;
                else
                    todaySAR = Reverse(Bars, BarsCount);
            }
            return todaySAR;
        }

        private decimal Reverse(List<DailyBarData> Bars, int BarsCount)
        {
            decimal todaySAR = SARxp;
            if ((SARlongPosition && SARprevSAR > Bars[BarsCount ].Low || (!SARlongPosition && SARprevSAR < Bars[BarsCount ].High) || SARprevBar != BarsCount ))
            {
                SARlongPosition = !SARlongPosition;
                SARreverseBar = BarsCount ;
                SARreverseValue = SARxp;
                SARaf = SARAcceleration;
                SARxp = SARlongPosition ? Bars[BarsCount ].High : Bars[BarsCount ].Low;
                SARprevSAR = todaySAR;
            }
            else
                todaySAR = SARprevSAR;
            return todaySAR;
        }

    }
}

Follow me on Twitter Visit my NexusFi Trade Journal Reply With Quote
  #3 (permalink)
OneTwoThree
Orlando, FL
 
Posts: 6 since Dec 2017
Thanks Given: 0
Thanks Received: 5


Hi rleplae,

Thank you for providing me your class. However, I did some testing with it and it will put out the Yahoo Finance calculation, not the IB calculation which can pierce the bars.

Reply With Quote
  #4 (permalink)
 
rleplae's Avatar
 rleplae 
Gits (Hooglede) Belgium
Legendary Market Wizard
 
Experience: Master
Platform: NinjaTrader, Proprietary,
Broker: Ninjabrokerage/IQfeed + Synthetic datafeed
Trading: 6A, 6B, 6C, 6E, 6J, 6S, ES, NQ, YM, AEX, CL, NG, ZB, ZN, ZC, ZS, GC
Posts: 3,003 since Sep 2013
Thanks Given: 2,442
Thanks Received: 5,863

Can you create a spread sheet with 100 points ?
O, H, L, C, PSAR

Follow me on Twitter Visit my NexusFi Trade Journal Reply With Quote
  #5 (permalink)
OneTwoThree
Orlando, FL
 
Posts: 6 since Dec 2017
Thanks Given: 0
Thanks Received: 5

I attached to this post a 100 point csv.

I included the date and the psar trend value also.

Attached Files
Elite Membership required to download: SPY.csv
Reply With Quote
Thanked by:




Last Updated on December 7, 2017


© 2024 NexusFi™, s.a., All Rights Reserved.
Av Ricardo J. Alfaro, Century Tower, Panama City, Panama, Ph: +507 833-9432 (Panama and Intl), +1 888-312-3001 (USA and Canada)
All information is for educational use only and is not investment advice. There is a substantial risk of loss in trading commodity futures, stocks, options and foreign exchange products. Past performance is not indicative of future results.
About Us - Contact Us - Site Rules, Acceptable Use, and Terms and Conditions - Privacy Policy - Downloads - Top
no new posts