Сам изучаю MQL4. Я зарегистрировался в IQOptions для торговли бинарными опционами.
Я планирую сам написать несколько индикаторов для своей торговой системы. Мне очень нравятся фракталы, не из фрактальной логики, поддерживаемой MQL4, но мне очень нравится конкретная IQOptions.
В MQL4 для поиска фрактала используется iFractal()
, который не принимает никаких параметров, кроме смещения.
Я убедил себя, что фрактал просто находит через 3 бара. Проделав большую домашнюю работу, я понял, что индикатор IQOptions делает больше, чем фрактал. Пожалуйста, найдите приложенный снимок экрана.
Я написал много программ, к которым недавно добавил. Мне нужна помощь, чтобы выяснить, что там было. Изображение, которое я прикрепил, взято из скриншота IQOption с фракталами более 20 бар.
//+------------------------------------------------------------------+
//| Bulls.mq4 |
//| Copyright 2005-2014, MetaQuotes Software Corp. |
//| http://www.mql4.com |
//+------------------------------------------------------------------+
#property copyright "2005-2014, MetaQuotes Software Corp."
#property link "http://www.mql4.com"
#property description "Fractals Tanya"
#property strict
//--- indicator settings
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Red
#property indicator_color2 Green
#property indicator_width1 1
#property indicator_width2 1
#property indicator_style1 STYLE_SOLID
#property indicator_style2 STYLE_SOLID
//--- input parameter
input int B_F=20;
//extern int AllB=240;
//--- buffers
double ExtFractalsUPBuffer[];
double ExtFractalsDownBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
void OnInit(void)
{
//--- 1 additional buffer used for counting.
IndicatorBuffers(2);
IndicatorDigits(Digits);
//--- indicator line
SetIndexBuffer( 0, ExtFractalsUPBuffer );
SetIndexStyle( 0, DRAW_ARROW );
SetIndexArrow( 0, 234 );
SetIndexLabel( 0, NULL );
SetIndexEmptyValue( 0, 0.0 );
SetIndexBuffer( 1, ExtFractalsDownBuffer );
SetIndexStyle( 1, DRAW_ARROW );
SetIndexArrow( 1, 233 );
SetIndexLabel( 1, NULL );
SetIndexEmptyValue( 1, 0.0 );
SetIndexDrawBegin(0,B_F);
SetIndexDrawBegin(1,B_F);
IndicatorShortName( "FractalsTanya" );
IndicatorDigits( Digits );
}
//+------------------------------------------------------------------+
//| Bulls Power |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
int limit=rates_total-prev_calculated;
//---
if(rates_total<=B_F || B_F<=0)
return(0);
//---
if(prev_calculated>0)
limit++;
int i=0,j=0,k=0;
double upFratal=0.0;
double downFratal=0.0;
int x=0; int y=0;
for(int t=0; t<limit+B_F; t++)
{
double upTempFractal=iFractals(NULL,Period(),MODE_UPPER,t);
double downTempFractal=iFractals(NULL,Period(),MODE_LOWER,t);
if(upTempFractal!=0&&upTempFractal>upFratal)
{
upFratal=upTempFractal;
j=t;
}
if(downTempFractal!=0.0&&downFratal==0.0)
{
downFratal=downTempFractal;
}
if(downTempFractal!=0.0&&downTempFractal<=downFratal)
{
downFratal=downTempFractal;
k=t;
}
i++;
if(i==B_F)
{
if(upFratal!=0.0)
{
if(x==0||(j-x)>=B_F)
{
x=j;
ExtFractalsUPBuffer[j]=upFratal;
}
}
if(downFratal!=0.0)
{
if(y==0||(k-y)>=B_F)
{
y=k;
ExtFractalsDownBuffer[k]=downFratal;
}
}
i=0;
upFratal=0.0;
downFratal=0.0;
}
}
/*for(int t=0; t<limit; t++)
{
double upFratal=iFractals(NULL,Period(),MODE_UPPER,t);
double downFratal=iFractals(NULL,Period(),MODE_LOWER,t);
if(upFratal!=0.0)ExtFractalsUPBuffer[t]=upFratal;
else if(downFratal!=0.0)ExtFractalsDownBuffer[t]=downFratal;
}*/
return(rates_total);
}