Miscellaneous
0
Views
0
Downloads
0
Favorites
IND_Potential
#property indicator_separate_window
#property indicator_buffers 3
#property indicator_color1 Red
#property indicator_color2 Lime
#property indicator_color3 Blue
#property indicator_width1 2
#property indicator_width2 2
#property indicator_width3 2
#property indicator_minimum 0
#define MAX_POINTS 1000000
extern datetime StartTime = D'2011.01.01';
extern int Spread = 20;
extern int Profit = 20;
extern double ExpKoef = 0.05;
double PotentialSum[];
int PotentialCount[];
double Buffer[], Buffer2[], Buffer3[];
void init()
{
int TmpStep, Tmp, TmpHigh, Pos = 0;
if (Spread < Profit)
{
TmpStep = Spread;
TmpHigh = Profit;
}
else
{
TmpStep = Profit;
TmpHigh = Spread;
}
SetIndexBuffer(0, Buffer);
SetIndexStyle(0, DRAW_HISTOGRAM);
SetIndexBuffer(1, Buffer2);
SetIndexStyle(1, DRAW_LINE);
SetIndexBuffer(2, Buffer3);
SetIndexStyle(2, DRAW_LINE);
while(Tmp < TmpHigh)
{
SetLevelValue(Pos, Tmp);
Tmp += TmpStep;
Pos++;
}
SetLevelValue(Pos, TmpHigh);
SetIndexLabel(1, "Exponential (ExpKoef = " + DoubleToStr(ExpKoef, 2) + ")");
SetIndexLabel(2, "Average (StartTime " + TimeToStr(StartTime, TIME_DATE) + ")");
IndicatorShortName(WindowExpertName() + ": Spread = " + Spread + ", Profit = " + Profit + ", ExpKoef = " + DoubleToStr(ExpKoef, 2));
Profit += Spread;
ArrayResize(PotentialCount, 1440 / Period());
ArrayResize(PotentialSum, 1440 / Period());
return;
}
int GetCount( int& Count[] )
{
bool FlagUP = TRUE;
int Min, Max = 0;
int Amount = 0;
int NTime;
int PriceLow, PriceHigh;
int Pos = iBarShift(Symbol(), Period(), StartTime);
for (int i = Pos; i >= 0; i--)
{
PriceLow = Low[i] / Point + 0.1;
PriceHigh = High[i] / Point + 0.1;
if (FlagUP)
{
if (PriceHigh > Max)
{
Max = PriceHigh;
NTime = i;
}
else if (Max - PriceLow >= Profit)
{
Count[Amount] = NTime;
Amount++;
FlagUP = FALSE;
Min = PriceLow;
NTime = i;
}
}
else // (FlagUP == FALSE)
{
if (PriceLow < Min)
{
Min = PriceLow;
NTime = i;
}
else if (PriceHigh - Min >= Profit)
{
Count[Amount] = NTime;
Amount++;
FlagUP = TRUE;
Max = PriceHigh;
NTime = i;
}
}
}
Count[Amount] = NTime;
Amount++;
return(Amount);
}
void DrawIndicator()
{
static int Count[MAX_POINTS];
int Amount = GetCount(Count);
int Time1 = Count[0], Time2, TmpTime;
bool Flag = TRUE;
double Tmp, Tmp2 = 0;
int i, j;
ArrayInitialize(PotentialCount, 0);
ArrayInitialize(PotentialSum, 0);
for (i = 1; i < Amount; i++)
{
Time2 = Count[i];
if (Flag)
Tmp = ((High[Time1] - Low[Time2]) / Point - Spread) / (Time1 - Time2);
else
Tmp = ((High[Time2] - Low[Time1]) / Point - Spread) / (Time1 - Time2);
for (j = Time1; j > Time2; j--)
{
Tmp2 = Tmp2 * (1 - ExpKoef) + Tmp * ExpKoef;
TmpTime = Time[j];
TmpTime = (TimeHour(TmpTime) * PERIOD_H1 + TimeMinute(TmpTime)) / Period();
PotentialCount[TmpTime]++;
PotentialSum[TmpTime] += Tmp;
Buffer[j] = Tmp;
Buffer2[j] = Tmp2;
Buffer3[j] = PotentialSum[TmpTime] / PotentialCount[TmpTime];
}
Time1 = Time2;
Flag = !Flag;
}
return;
}
void start()
{
static int PrevTime = 0;
if (Time[0] == PrevTime)
return;
PrevTime = Time[0];
DrawIndicator();
return;
}
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
---