Indicators Used
Miscellaneous
0
Views
0
Downloads
0
Favorites
Homodyne Discriminator
//+------------------------------------------------------------------+
//| Homodyne Discriminator.mq4 |
//| Tantalus - from J. Ehlers |
//| |
//+------------------------------------------------------------------+
#property copyright "Tantalus - from J. Ehlers"
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 DodgerBlue
#property indicator_color2 Salmon
double dDomPeriod[];
double dSmoothDomPeriod[];
double dDeTrend[];
double Q1[];
double I1[];
double jQ, jI;
double I2, Q2, LastI2, LastQ2;
double Re, Im, LastRe, LastIm;
int init()
{
IndicatorBuffers(5);
SetIndexStyle(0, DRAW_LINE);
SetIndexBuffer(0, dDomPeriod);
SetIndexStyle(1, DRAW_LINE);
SetIndexBuffer(1, dSmoothDomPeriod);
SetIndexStyle(4, DRAW_NONE);
SetIndexBuffer(4, dDeTrend);
SetIndexStyle(2, DRAW_NONE);
SetIndexBuffer(2, Q1);
SetIndexStyle(3, DRAW_NONE);
SetIndexBuffer(3, I1);
int k;
for (k = Bars; k >= 0; k --)
{
dDomPeriod[k] = 0.0;
dDeTrend[k] = 0.0;
Q1[k] = 0.0;
I1[k] = 0.0;
}
return(0);
}
int start()
{
int k;
for (k = Bars - 6; k >= 0; k --)
{
dDeTrend[k] = (0.0962 * iMA(Symbol(), 0, 4, 0, MODE_LWMA, PRICE_MEDIAN, k)
+ 0.5769 * iMA(Symbol(), 0, 4, 0, MODE_LWMA, PRICE_MEDIAN, k + 2)
- 0.5769 * iMA(Symbol(), 0, 4, 0, MODE_LWMA, PRICE_MEDIAN, k + 4)
- 0.0962 * iMA(Symbol(), 0, 4, 0, MODE_LWMA, PRICE_MEDIAN, k + 6))
* (0.075 * dDomPeriod[k + 1] + 0.54);
Q1[k] = (0.0962 * dDeTrend[k] + 0.5769 * dDeTrend[k + 2]
- 0.5769 * dDeTrend[k + 4] - 0.0962 * dDeTrend[k + 6])
* (0.075 * dDomPeriod[k + 1] + 0.54);
I1[k] = dDeTrend[k + 3];
jI = (0.0962 * I1[k] + 0.5769 * I1[k + 2] - 0.5769 * I1[k + 4] - 0.0962 * I1[k + 6])
* (0.075 * dDomPeriod[k + 1] + 0.54);
jQ = (0.0962 * Q1[k] + 0.5769 * Q1[k + 2] - 0.5769 * Q1[k + 4] - 0.0962 * Q1[k + 6])
* (0.075 * dDomPeriod[k + 1] + 0.54);
I2 = I1[k] - jQ;
Q2 = Q1[k] + jI;
I2 = 0.2 * I2 + 0.8 * LastI2;
Q2 = 0.2 * Q2 + 0.8 * LastQ2;
Re = I2 * LastI2 + Q2 * LastQ2;
Im = I2 * LastQ2 - Q2 * LastI2;
Re = 0.2 * Re + 0.8 * LastRe;
Im = 0.2 * Im + 0.8 * LastIm;
LastI2 = I2; LastQ2 = Q2;
LastRe = Re; LastIm = Im;
if (Im != 0 && Re != 0)
dDomPeriod[k] = 6.28 / MathArctan(Im / Re);
if (dDomPeriod[k] > 1.5 * dDomPeriod[k + 1])
dDomPeriod[k] = 1.5 * dDomPeriod[k + 1];
if (dDomPeriod[k] < 0.6667 * dDomPeriod[k + 1])
dDomPeriod[k] = 0.6667 * dDomPeriod[k + 1];
if (dDomPeriod[k] < 6.0) dDomPeriod[k] = 6.0;
if (dDomPeriod[k] > 50.0) dDomPeriod[k] = 50.0;
dDomPeriod[k] = 0.2 * dDomPeriod[k] + 0.8 * dDomPeriod[k + 1];
dSmoothDomPeriod[k] = 0.33 * dDomPeriod[k] + 0.67 * dSmoothDomPeriod[k + 1];
}
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
---