Thanks
Announcement
Collapse
No announcement yet.
Partner 728x90
Collapse
NinjaTrader
Elliott Oscillator
Collapse
X
-
Elliott Oscillator
Hello , somebody has this indicator? or knows program it?
ThanksLast edited by QWERTY1; 09-20-2016, 09:08 PM. -
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
-
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 NasdaqAnalytica, Today, 03:33 PM
|
0 responses
3 views
0 likes
|
Last Post Today, 03:33 PM | ||
Started by jamesbhardwaj, Today, 04:41 AM
|
1 response
14 views
0 likes
|
Last Post Today, 03:09 PM | ||
Started by diorfo, Today, 12:48 PM
|
5 responses
23 views
0 likes
|
Last Post Today, 03:06 PM | ||
Started by cp202822, Today, 01:38 PM
|
2 responses
13 views
0 likes
|
Last Post
by cp202822
Today, 02:55 PM
|
||
Started by birdog, Today, 06:25 AM
|
2 responses
16 views
0 likes
|
Last Post Today, 02:47 PM |
Comment