Da esso, cercate nel ciclo il primo alto corrispondente al basso del frattale conosciuto
Questo si può fare, ma io farei il contrario. Cioè prima trovare il massimo della candela precedente (formata), e poi l'ultimo frattale in basso. Se sono uguali, metti un punto.
Alexey Kozitsyn: Potremmo farlo, ma io farei il contrario. Cioè prima troviamo il massimo della candela precedente (formata), e poi l'ultimo frattale in basso. Se coincidono, mettiamo un punto.
Non capisco. Pensavo che fosse quello che stavamo facendo nella condizione.
if( High[i+1]==Low[isFractalDn()])//максимум первой свечи равен первому фракталу Dn
Il numero di barra del frattale inferiore è noto
Da esso, cercate nel ciclo il primo alto corrispondente al basso del frattale conosciuto
Potremmo farlo, ma io farei il contrario. Cioè prima troviamo il massimo della candela precedente (formata), e poi l'ultimo frattale in basso. Se coincidono, mettiamo un punto.
Non capisco. Pensavo che fosse quello che stavamo facendo nella condizione.
Inserisci LOGIN e PASSWORD da MQL5.community.
Dove si trova esattamente una linea?
Scusa, mi sono confuso con il terminale. Naturalmente è sufficiente inserire il LOGIN da MQL5.community.
Non capisco. Pensavo che fosse quello che stavamo facendo nella condizione.
Facile... fare questo...
#property link "https://www.mql5.com/ru/users/tapochun"
#property version "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots 2
//---
#property indicator_type1 DRAW_ARROW
#property indicator_width1 5
#property indicator_color1 clrAqua
#property indicator_type2 DRAW_ARROW
#property indicator_width2 5
#property indicator_color2 clrRed
//+------------------------------------------------------------------+
//| Глобальные переменные |
//+------------------------------------------------------------------+
double bufSell[];
double bufBuy[];
//+------------------------------------------------------------------+
//| Входные параметры |
//+------------------------------------------------------------------+
input int inpNum=50; // Количество свечей для поиска последнего фрактала
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
SetIndexBuffer(0,bufBuy);
SetIndexBuffer(1,bufSell);
SetIndexEmptyValue(0,EMPTY_VALUE);
SetIndexEmptyValue(1,EMPTY_VALUE);
SetIndexArrow(0,225);
SetIndexArrow(1,226);
IndicatorDigits(_Digits);
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
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[])
{
if(rates_total<=0 || prev_calculated<0)
return( 0 );
//---
if(prev_calculated>0) // Если не первый расчет индикатора
{
}
else // Если первый расчет индикатора
{
ArrayInitialize(bufBuy,EMPTY_VALUE);
ArrayInitialize(bufSell,EMPTY_VALUE);
//---
for(int i=1; i<rates_total-7; i++)
{
CheckBuyArrow(low[i],i,i+4,rates_total-3,time);
CheckSellArrow(high[i],i,i+4,rates_total-3,time);
}
}
//---
return(rates_total);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void CheckBuyArrow(const double price,
const int index,
const int first,
int last,
const datetime &time[]
)
{
last=(first+inpNum-1<last) ? first+inpNum-1 : last;
double iPrice;
//---
for(int i=first; i<=last; i++)
{
iPrice=iFractals(_Symbol,_Period,MODE_UPPER,i);
if(iPrice!=EMPTY_VALUE)
{
if(price==iPrice)
{
bufBuy[index]=iPrice-10*_Point;
Print(__FUNCTION__,": "+TimeToString(time[index])+" - "+TimeToString(time[i]));
}
return;
}
}
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void CheckSellArrow(const double price,
const int index,
const int first,
int last,
const datetime &time[]
)
{
last=(first+inpNum-1<last) ? first+inpNum-1 : last;
double iPrice;
//---
for(int i=first; i<=last; i++)
{
iPrice=iFractals(_Symbol,_Period,MODE_LOWER,i);
if(iPrice!=EMPTY_VALUE)
{
if(price==iPrice)
{
bufSell[index]=iPrice+10*_Point;
Print(__FUNCTION__,": "+TimeToString(time[index])+" - "+TimeToString(time[i]));
}
return;
}
}
}
//+------------------------------------------------------------------+
Grazie, ma non mostra alcun segno di vita... forse ho fatto qualcosa di sbagliato?
Sono possibili diverse opzioni:
Bene, il sistema è x64, perché ho 8GB di RAM, e il sistema win 10, ok, grazie, ho scollegato il firewall e ora riprovo!
Non capisco. Pensavo che fosse quello che stavamo facendo nella condizione.