Miscellaneous
0
Views
0
Downloads
0
Favorites
#TickA_SineWaveIndicator
//+------------------------------------------------------------------+
//| Instantaneous Trend Line by John Ehlers |
//| Copyright © 2004, Poul_Trade_Forum |
//| Aborigen |
//| http://forex.kbpauk.ru/ |
//+------------------------------------------------------------------+
#property copyright "JDP"
#property link ""
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Red
#property indicator_color2 Blue
//---- buffers
extern int Periods=200;
extern double PeriodPers=1.0;
extern int OffsetDegrees=45;
extern bool alert=false;
int alerttm=0;
int LastTm;
double SineWave[];
double LeadSine[];
double RealPart,ImagPart,DCPhase,Period_,tmp;
double Pi = 3.1415926535;
double Price[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
string short_name;
IndicatorBuffers(2);
//---- indicator line
SetIndexStyle(0,DRAW_LINE,EMPTY,2,Red);
SetIndexStyle(1,DRAW_LINE,EMPTY,2,Blue);
SetIndexBuffer(0,SineWave);
SetIndexBuffer(1,LeadSine);
SetIndexEmptyValue(0,0);
SetIndexEmptyValue(1,0);
//---- name for DataWindow and indicator subwindow label
short_name="Sine Wave Indicator";
IndicatorShortName(short_name);
SetIndexLabel(0,short_name);
//----
SetIndexDrawBegin(0,30);
SetIndexDrawBegin(1,30);
//----
return(0);
}
int deinit(){return(0);}
int start()
{
int i,shift,count;
if (LastTm < Time[0]) {
for (i = 0;i<1000;i++) {
SineWave[i] = SineWave[i+1];
LeadSine[i] = LeadSine[i+1];
}
LastTm = Time[0];
}
for (i = 1001;i>0;i--) {
SineWave[i] = SineWave[i-1];
LeadSine[i] = LeadSine[i-1];
}
i = 0;
for (shift=i; shift>=0;shift--)
{
Period_ = iCustom(Symbol(),0,"#TickA_SineWavePeriods",Periods,0,shift);
Period_ = Period_*PeriodPers;
Period_ = NormalizeDouble(Period_,0);
RealPart=0.0;
ImagPart=0.0;
for (count = 0;count<=Period_ - 1;count++)
{ RealPart = RealPart + MathSin(360*count/Period_*Pi/180) * ((iCustom(Symbol(),0,"#TickPrice",0,(shift+count))+iCustom(Symbol(),0,"#TickPrice",1,(shift+count)))/2);//Close[shift+count];
ImagPart = ImagPart + MathCos(360*count/Period_*Pi/180) * ((iCustom(Symbol(),0,"#TickPrice",0,(shift+count))+iCustom(Symbol(),0,"#TickPrice",1,(shift+count)))/2);//Close[shift+count];
}
if (MathAbs(ImagPart) != 0) {
DCPhase = 180/Pi*MathArctan(RealPart / ImagPart);
} else {
if (RealPart > 0) {
DCPhase = (Pi / 2);
} else {
DCPhase = -(Pi/2);
}
}
if (MathAbs(ImagPart) < 0) //(MathAbs(ImagPart) < 0.0001)
{
if (RealPart>0) {
DCPhase = DCPhase+90;
} else {
if (RealPart <0) {
DCPhase = DCPhase-90;
} else {
DCPhase = 0;
}
}
}
DCPhase=DCPhase+90;
if (ImagPart < 0) DCPhase = DCPhase + 180;//(ImagPart < 0.0001) DCPhase = DCPhase + 180;
if (DCPhase > 360) DCPhase = DCPhase - 360;
// if (Period_ > 0) Trendline = Trendline / (Period_ + 2);
// Value11[0] = 0.33*(Price[shift] + 0.5*(Price[shift] - Price[shift+3])) + 0.67*Value11[1];
SineWave[shift]=MathSin(DCPhase*Pi/180);
LeadSine[shift]=MathSin((DCPhase+OffsetDegrees)*Pi/180);
}
return(0);
}
Comments
Markdown Formatting Guide
# H1
## H2
### H3
**bold text**
*italicized text*
[title](https://www.example.com)

`code`
```
code block
```
> blockquote
- Item 1
- Item 2
1. First item
2. Second item
---