oscillatore per le onde di Elliott
Forums › ProRealTime forum Italiano › Supporto ProBuilder › oscillatore per le onde di Elliott
- This topic has 5 replies, 5 voices, and was last updated 4 years ago by deleted2104.
-
-
08/24/2017 at 6:30 PM #44585
Ciao, volevo chiedere se qualcuno sa tradurre questo codice da MT4 a prorealtime. E’ un oscillatore per le onde di Elliott
//+——————————————————————+
//| elliot oscillator – waves.mq4 |
//+——————————————————————+
#property copyright “mladen”
#property link “mladenfx@gmail.com”#property indicator_separate_window
#property indicator_buffers 6
#property indicator_color1 DeepSkyBlue
#property indicator_color2 PaleVioletRed
#property indicator_color3 Gold
#property indicator_color4 Gold
#property indicator_color5 DimGray
#property indicator_color6 DimGray
#property indicator_width1 2
#property indicator_width2 2
#property indicator_width3 2
#property indicator_width4 2
#property indicator_width5 2
#property indicator_width6 2//
//
//
//
//extern int shortPeriod = 5;
extern int longPeriod = 35;
extern string linesIdentifier = “elliotWaveLines”;
extern color linesColor = Black;
extern int linesStyle = STYLE_DOT;
extern int levelsShiftRight = 10;
extern int levelsLength = 20;
extern color levelsColor = Silver;
extern int levelsStyle = STYLE_SOLID;extern bool alertsOn = false;
extern bool alertsOnCurrent = true;
extern bool alertsMessage = true;
extern bool alertsSound = false;
extern bool alertsEmail = false;//
//
//
//
//double ellBuffer[];
double ellUBuffer[];
double ellDBuffer[];
double mauBuffer[];
double madBuffer[];
double peakUp[];
double peakDn[];
double trend[];//+——————————————————————+
//| |
//+——————————————————————+
//
//
//
//
//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”);
}08/28/2017 at 3:17 PM #44768Ciao , hai provato a vedere nella libreria se c’è già un’indicatore delle onde di elliott???
Buonagiornata
07/14/2018 at 8:42 AM #75950Ciao,
Anche a me interesserebbe ma non ho trovato nulla nella libreria.
Ciao
07/14/2018 at 10:17 AM #75957E’ piuttosto difficile, credo. realizzarlo, anche su altre piattaforme.
Questo è quello che ho trovato per MarketScope (TradeStation), non so se Nicolas potrà tradurlo, non ho altre informazioni.
04/13/2020 at 3:40 PM #125949ciao, è possibile tradurre questo codice d’onda Eliott oggi con il nuovo sviluppo e il miglioramento del tempo di proreal?
grazie -
AuthorPosts