Я сам изучаю MQL4. Я зарегистрировался в IQOptions для торговли бинарными опционами.Как решить фракталы над периодом N-баров на MQL4, как и индикатор IQOptions Fractals?
Я планирую написать некоторые индикаторы для своей торговой системы. Мне очень нравятся фракталы, а не из фрактальной логики, поддерживаемой 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);
}
Не могли бы вы уточнить, что ваш вопрос - какие проблемы вы сталкиваетесь в MCVE-оф-кода, с помощью которого вы пытались решить некоторые поведение/функции, но предыдущие результаты пока не показали полезности? – user3666197
На самом деле, я решил это, наконец, после того, как пошла специальная фрактальная методология. Снимок экрана, который я опубликовал, является желательным поведением, я не считаю его реальной фрактальной логикой. Мы можем достичь этого, найдя каждое (i + 20/2) свечу с высоким/низким значением и проверяя, все ли i + 20 до i + 10 свечей и i + 10 к i свечи поднимаются/опускаются ниже, чем высота свечи i + 10/низкое значение – VyshuRam