Announcement

Collapse
No announcement yet.

Partner 728x90

Collapse

Elliott Oscillator

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

    Elliott Oscillator

    Hello , somebody has this indicator? or knows program it?


    Thanks
    Attached Files
    Last edited by QWERTY1; 09-20-2016, 09:08 PM.

    #2
    Hello QWERT1,

    Thank you for your post and welcome to the NinjaTrader Support Forum!

    You can find two examples at the following links.

    Comment


      #3
      Thanks PatrickH,
      if you look , the oscillator interests me has a few lines ( in gray ) . I have code designed to mq4 , can adapt to NinjaTrader?

      int init()
      {
      IndicatorBuffers(8);
      SetIndexBuffer(0,ellUBuffer); SetIndexStyle(0,DRAW_HISTOGRAM);
      SetIndexBuffer(1,ellDBuffer); SetIndexStyle(1,DRAW_HISTOGRAM);
      SetIndexBuffer(2,peakUp); SetIndexStyle(2,DRAW_HISTOGRAM);
      SetIndexBuffer(3,peakDn); SetIndexStyle(3,DRAW_HISTOGRAM);
      SetIndexBuffer(4,mauBuffer);
      SetIndexBuffer(5,madBuffer);
      SetIndexBuffer(6,trend);
      SetIndexBuffer(7,ellBuffer);
      IndicatorShortName("Elliot oscillator ( "+shortPeriod+","+longPeriod+")");
      return(0);
      }
      int deinit() { deleteLines(); return(0); }

      //
      //
      //
      //
      //

      int start()
      {
      double alpha = 2.0/(1.0+longPeriod+MathCeil(shortPeriod/2.0));
      int counted_bars = IndicatorCounted();
      int limit,i,k;

      if(counted_bars < 0) return(-1);
      if(counted_bars > 0) counted_bars--;
      limit = MathMin(Bars-counted_bars,Bars-longPeriod);

      //
      //
      //
      //
      //

      int count = 0;
      int direction = 0;
      int startFrom = 0;
      double lastPeakPrice = 0;
      datetime lastPeakTime = 0;
      for (;limit<(Bars-longPeriod); limit++)
      {
      if (peakDn[limit]!=EMPTY_VALUE) { if (count==0) { count ++; continue; } direction=-1; startFrom = limit; break; }
      if (peakUp[limit]!=EMPTY_VALUE) { if (count==0) { count ++; continue; } direction= 1; startFrom = limit; break; }
      }

      //
      //
      //
      //
      //

      for(i = limit; i >= 0; i--)
      {
      ellBuffer[i] = iMA(NULL,0,shortPeriod,0,MODE_SMA,PRICE_MEDIAN,i)-iMA(NULL,0,longPeriod,0,MODE_SMA,PRICE_MEDIAN,i);
      ellUBuffer[i] = EMPTY_VALUE;
      ellDBuffer[i] = EMPTY_VALUE;

      if (mauBuffer[i+1]==EMPTY_VALUE) if (ellBuffer[i]>0) mauBuffer[i+1] = ellBuffer[i]; else mauBuffer[i+1] = 0;
      if (madBuffer[i+1]==EMPTY_VALUE) if (ellBuffer[i]<0) madBuffer[i+1] = ellBuffer[i]; else madBuffer[i+1] = 0;

      madBuffer[i] = madBuffer[i+1];
      mauBuffer[i] = mauBuffer[i+1];
      trend[i] = trend[i+1];
      peakUp[i] = EMPTY_VALUE;
      peakDn[i] = EMPTY_VALUE;

      //
      //
      //
      //
      //

      if (ellBuffer[i] < 0) { madBuffer[i] = madBuffer[i+1]+alpha*(ellBuffer[i]-madBuffer[i+1]); ellDBuffer[i] = ellBuffer[i]; }
      if (ellBuffer[i] > 0) { mauBuffer[i] = mauBuffer[i+1]+alpha*(ellBuffer[i]-mauBuffer[i+1]); ellUBuffer[i] = ellBuffer[i]; }
      deleteLine(i);

      //
      //
      //
      //
      //

      if (ellBuffer[i] > 0 && ellBuffer[i]>mauBuffer[i])
      {
      if (direction < 0) { markLow(i,startFrom,lastPeakPrice,lastPeakTime); startFrom = i; k++; }
      direction = 1; trend[i] = 1;
      }
      if (ellBuffer[i] < 0 && ellBuffer[i]<madBuffer[i])
      {
      if (direction > 0) { markHigh(i,startFrom,lastPeakPrice,lastPeakTime); startFrom = i; k++; }
      direction = -1; trend[i] = -1;
      }
      }
      if (direction > 0) markHigh(0,startFrom,lastPeakPrice,lastPeakTime);
      if (direction < 0) markLow (0,startFrom,lastPeakPrice,lastPeakTime);
      if (alertsOn)
      {
      if (alertsOnCurrent)
      int whichBar = 0;
      else whichBar = 1;
      if (trend[whichBar] != trend[whichBar+1])
      {
      if (trend[whichBar] == 1) doAlert(whichBar,DoubleToStr(mauBuffer[whichBar],5)+" crossed up");
      if (trend[whichBar] ==-1) doAlert(whichBar,DoubleToStr(madBuffer[whichBar],5)+" crossed down");
      }
      }

      //
      //
      //
      //
      //

      return(0);
      }

      //+------------------------------------------------------------------+
      //| |
      //+------------------------------------------------------------------+
      //
      //
      //
      //
      //

      void markLow(int start, int end, double& lastPeakPrice, datetime& lastPeakTime)
      {
      while (ellBuffer[start+1]>0 && start<Bars) start++;
      while (ellBuffer[end+1] <0 && end <Bars) end++;
      int peakAt = ArrayMinimum(Low,end-start+1,start); peakDn[peakAt] = ellBuffer[peakAt];

      //
      //
      //
      //
      //

      if (lastPeakPrice!=0) drawLine(lastPeakPrice,lastPeakTime,Low[peakAt],Time[peakAt]);
      lastPeakPrice = Low[peakAt];
      lastPeakTime = Time[peakAt];
      }
      void markHigh(int start, int end, double& lastPeakPrice, datetime& lastPeakTime)
      {
      while (ellBuffer[start+1]<0 && start<Bars) start++;
      while (ellBuffer[end+1] >0 && end <Bars) end++;
      int peakAt = ArrayMaximum(High,end-start+1,start); peakUp[peakAt] = ellBuffer[peakAt];

      //
      //
      //
      //
      //

      if (lastPeakPrice!=0) drawLine(lastPeakPrice,lastPeakTime,High[peakAt],Time[peakAt]);
      lastPeakPrice = High[peakAt];
      lastPeakTime = Time[peakAt];
      }

      //
      //
      //
      //
      //

      void drawLine(double startPrice, datetime startTime, double endPrice, datetime endTime)
      {
      string name = linesIdentifier+":"+startTime;
      ObjectCreate(name,OBJ_TREND,0,startTime,startPrice ,endTime,endPrice);
      ObjectSet(name,OBJPROP_STYLE,linesStyle);
      ObjectSet(name,OBJPROP_COLOR,linesColor);
      ObjectSet(name,OBJPROP_RAY,false);
      }
      void deleteLine(int i)
      {
      ObjectDelete(linesIdentifier+":"+Time[i]);
      }
      void deleteLines()
      {
      string lookFor = linesIdentifier+":";
      for (int i=ObjectsTotal(); i>=0; i--)
      {
      string name = ObjectName(i);
      if (StringFind(name,lookFor)==0) ObjectDelete(name);
      }
      }

      //+-------------------------------------------------------------------
      //|
      //+-------------------------------------------------------------------
      //
      //
      //
      //
      //

      void doAlert(int forBar, string doWhat)
      {
      static string previousAlert="nothing";
      static datetime previousTime;
      string message;

      if (previousAlert != doWhat || previousTime != Time[forBar]) {
      previousAlert = doWhat;
      previousTime = Time[forBar];

      //
      //
      //
      //
      //

      message = StringConcatenate(Symbol()," at ",TimeToStr(TimeLocal(),TIME_SECONDS)," Elliot oscillator level ",doWhat);
      if (alertsMessage) Alert(message);
      if (alertsEmail) SendMail(StringConcatenate(Symbol(),"Elliot oscillator "),message);
      if (alertsSound) PlaySound("alert2.wav");
      }
      }
      Last edited by QWERTY1; 09-21-2016, 12:37 PM.

      Comment


        #4
        Hello QWERTY1,

        Thank you for your response.

        You can convert this code to NinjaScript. If you wish to get started with NinjaTrader we have a fully documented help guide which will help you get started with Ninja Script. You will find language references to all of the methods and functions you will be using. You will also see a tutorial section which will help you create your first indicator and get you started with some of these concepts.
        A link to our Help Guide can be found below: http://www.ninjatrader.com/support/h...stribution.htm

        I am also linking you to the Educational Resources section of the Help Guide to help you get started with NinjaScript: http://www.ninjatrader.com/support/h..._resources.htm

        You will find Reference Samples online as well as some Tips and Tricks for both indicators and strategies:
        Click here to see our NinjaScript Reference Samples: http://www.ninjatrader.com/support/f...splay.php?f=30
        Click here to see our NinjaScript Tips: http://www.ninjatrader.com/support/f...ead.php?t=3229

        These samples can be downloaded, installed and modified from NinjaTrader and hopefully serve as a good base for your custom works.

        There is a also a growing library of user submitted custom indicators (100+) that can be downloaded from our support form. Please look in the NinjaScript File Sharing section of our support forum as you may find what you are looking for there: http://www.ninjatrader.com/support/f...splay.php?f=37

        Please let me know if you have any questions.

        Comment

        Latest Posts

        Collapse

        Topics Statistics Last Post
        Started by RubenCazorla, 10-04-2024, 08:46 AM
        5 responses
        29 views
        0 likes
        Last Post NinjaTrader_Jesse  
        Started by Mindset, 10-12-2024, 11:57 AM
        2 responses
        22 views
        0 likes
        Last Post NinjaTrader_Jesse  
        Started by Irukandji, 05-03-2019, 12:24 PM
        51 responses
        3,482 views
        0 likes
        Last Post NinjaTrader_ChelseaB  
        Started by birdog, Yesterday, 07:23 PM
        3 responses
        32 views
        0 likes
        Last Post backtester831  
        Started by unpronounceable1700, 10-12-2024, 03:53 PM
        1 response
        16 views
        0 likes
        Last Post NinjaTrader_Gaby  
        Working...
        X