Announcement

Collapse

Looking for a User App or Add-On built by the NinjaTrader community?

Visit NinjaTrader EcoSystem and our free User App Share!

Have a question for the NinjaScript developer community? Open a new thread in our NinjaScript File Sharing Discussion Forum!
See more
See less

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 terkk, Today, 01:16 PM
        1 response
        14 views
        0 likes
        Last Post NinjaTrader_Heath  
        Started by TraderElegante, Today, 12:14 PM
        1 response
        17 views
        0 likes
        Last Post NinjaTrader_PaulH  
        Started by dgee949, Today, 11:44 AM
        1 response
        14 views
        0 likes
        Last Post NinjaTrader_JustinD  
        Started by NinjaTrader_Kate, Today, 12:01 PM
        0 responses
        19 views
        0 likes
        Last Post NinjaTrader_Kate  
        Started by efeuvejota01, Today, 11:42 AM
        3 responses
        36 views
        0 likes
        Last Post NinjaTrader_ChrisL  
        Working...
        X