Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 34
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Zeigen Sie mir Ihren gesamten Indikator, damit wir sehen, was falsch ist.
Ich danke Ihnen.
Hier ist sie.
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 LawnGreen
#property indicator_color2 DeepPink
#property indicator_width1 1
#property indicator_width2 1
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
extern string Stochastic = "Configure Stochastic Settings";
extern int TimeFrame1=1;
extern int KPeriod = 5;
extern int DPeriod = 3;
extern int Slowing = 3;
extern int OverBought = 80;
extern int OverSold = 20;
extern int TimeFrame2=5;
extern int KPeriod1 = 5;
extern int DPeriod1 = 3;
extern int Slowing1 = 3;
extern int OverBought1 = 55;
extern int OverSold1 = 45;
extern string Alerts = "Configure Alerts";
extern bool PopUpAlert = true; //Popup Alert
extern bool EmailAlert = true; //Email Alert
extern bool PushAlert = true; //Push Notifications Alert
// UP and DOWN Buffers
double UP[];
double DOWN[];
// Distance of arrows from the high or low of a bar
int distance = 3;
double MyPoint;
datetime CTime;
int OnInit()
{
//--- indicator buffers mapping
//UP Arrow Buffer
SetIndexEmptyValue(0,0.0);
SetIndexStyle(0,DRAW_ARROW,0,EMPTY);
SetIndexArrow(0,233);
SetIndexBuffer(0,UP);
//DOWN Arrow Buffer
SetIndexEmptyValue(1,0.0);
SetIndexStyle(1,DRAW_ARROW,0,EMPTY);
SetIndexArrow(1,234);
SetIndexBuffer(1,DOWN);
//Auto Adjustment for broker digits
if (Digits()==5||Digits()==3){MyPoint=Point*10;} else{MyPoint=Point;}
CTime=Time[0];
//---
return(INIT_SUCCEEDED);
}
void OnDeinit(const int reason)
{
//--- delete an object from a chart
Comment("");
}
//+------------------------------------------------------------------+
//| 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[])
{
//---
Comment("");
int limit = rates_total;
int count=prev_calculated;
for(int i=limit-count; i>=1;i--)
{
//Getting Stochastic buffer values using the iCustom function
double Stoch1 = iStochastic(NULL,TimeFrame1,KPeriod,DPeriod,Slowing,MODE_SMA,0,MODE_MAIN,i);
double Stoch2 = iStochastic(NULL,TimeFrame1,KPeriod,DPeriod,Slowing,MODE_SMA,0,MODE_MAIN,i+1);
double Stoch50_1 = iStochastic(NULL,TimeFrame2,KPeriod1,DPeriod1,Slowing1,MODE_SMA,0,MODE_MAIN,i);
double Stoch50_2 = iStochastic(NULL,TimeFrame2,KPeriod1,DPeriod1,Slowing1,MODE_SMA,0,MODE_MAIN,i+1);
if(Stoch1>20 && Stoch2<20&&Stoch50_1>50&&Stoch50_1>Stoch50_2)
{
UP[i]=Low[i]-distance*MyPoint;
}
if(Stoch1<80 && Stoch2>80&&Stoch50_1<50&&Stoch50_1<Stoch50_2)
{
DOWN[i]=High[i]+distance*MyPoint;
}
}
//--- return value of prev_calculated for next call
return(rates_total);
}
//+------------------------------------------------------------------+
Ich danke Ihnen.
Hier ist sie
...
Nur zur Klarstellung.
Ich möchte den Pfeil nach oben setzen, wenn die Indikatorlinie in der M1-Periode das Niveau 20 überschritten hat und die Indikatorlinie in der M5-Periode nach oben, über das Niveau 50, gerichtet ist.
Schauen wir uns an, wie man die Werte aus dem höheren Zeitrahmen erhält, wenn man sich auf dem niedrigeren befindet:
//| iTwoStoch.mq4 |
//| Copyright 2016, Artem A. Trishkin, Skype artmedia70 |
//| https://login.mql5.com/ru/users/artmedia70 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, Artem A. Trishkin, Skype artmedia70"
#property link "https://login.mql5.com/ru/users/artmedia70"
#property version "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots 2
//--- plot UP
#property indicator_label1 "UP"
#property indicator_type1 DRAW_ARROW
#property indicator_color1 clrLawnGreen
#property indicator_style1 STYLE_SOLID
#property indicator_width1 1
//--- plot DN
#property indicator_label2 "DN"
#property indicator_type2 DRAW_ARROW
#property indicator_color2 clrDeepPink
#property indicator_style2 STYLE_SOLID
#property indicator_width2 1
//--- enums
enum enumYN
{
enYes=1, // Да
enNo=0, // Нет
};
//--- input parameters
extern string Stochastic1 = "Параметры стохастика 1";
input ENUM_TIMEFRAMES TimeFrame1 = PERIOD_M1; // Таймфрейм
input int KPeriod1 = 5; // Период %K
input int DPeriod1 = 3; // Период %D
input int Slowing1 = 3; // Замедление
input double OverBought1 = 80; // Уровень перекупленности
input double OverSold1 = 20; // Уровень перепроданности
extern string Stochastic2 = "Параметры стохастика 2";
input ENUM_TIMEFRAMES TimeFrame2 = PERIOD_M5; // Таймфрейм
input int KPeriod2 = 5; // Период %K
input int DPeriod2 = 3; // Период %D
input int Slowing2 = 3; // Замедление
input double OverBought2 = 55; // Уровень перекупленности
input double OverSold2 = 45; // Уровень перепроданности
extern string Alerts = "Configure Alerts";
input enumYN UsePopUpAlert = enYes; // Popup Alert
input enumYN UseEmailAlert = enYes; // Email Alert
input enumYN UsePushAlert = enYes; // Push Notifications Alert
//--- indicator buffers
double BufferUP[];
double BufferDN[];
//--- global variables
int kperiod1; // Период %K стох.1
int dperiod1; // Период %D стох.1
int slowing1; // Замедление стох.1
double overBought1; // Уровень перекупленности стох.1
double overSold1; // Уровень перепроданности стох.1
//---
int kperiod2; // Период %K стох.2
int dperiod2; // Период %D стох.2
int slowing2; // Замедление стох.2
double overBought2; // Уровень перекупленности стох.2
double overSold2; // Уровень перепроданности стох.2
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- indicator buffers mapping
SetIndexBuffer(0,BufferUP);
SetIndexBuffer(1,BufferDN);
//--- setting a code from the Wingdings charset as the property of PLOT_ARROW
SetIndexArrow(0,233);
SetIndexArrow(1,234);
//---
kperiod1=(KPeriod1<1?1:KPeriod1);
kperiod2=(KPeriod2<1?1:KPeriod2);
dperiod1=(DPeriod1<1?1:DPeriod1);
dperiod2=(DPeriod2<1?1:DPeriod2);
slowing1=(Slowing1<1?1:Slowing1);
slowing2=(Slowing2<1?1:Slowing2);
//---
overBought1=(OverBought1>100.0?100.0:OverBought1<0.1?0.1:OverBought1);
overSold1=(OverSold1<0?0:OverSold1>99.9?99.9:OverSold1);
if(overBought1<=overSold1) overBought1=overSold1+0.1;
if(overSold1>=overBought1) overSold1=overBought1-0.1;
//---
overBought2=(OverBought2>100.0?100.0:OverBought2<0.1?0.1:OverBought2);
overSold2=(OverSold2<0?0:OverSold2>99.9?99.9:OverSold2);
if(overBought2<=overSold2) overBought2=overSold2+0.1;
if(overSold2>=overBought2) overSold2=overBought2-0.1;
//---
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<2) return(0);
int limit=rates_total-prev_calculated;
if(limit>1) {
limit=rates_total-2;
ArrayInitialize(BufferUP,EMPTY_VALUE);
ArrayInitialize(BufferDN,EMPTY_VALUE);
}
for(int i=limit; i>=0; i--) {
int bar_sto2_0=iBarShift(Symbol(),TimeFrame2,iTime(Symbol(),TimeFrame2,i));
int bar_sto2_1=iBarShift(Symbol(),TimeFrame2,iTime(Symbol(),TimeFrame2,i+1));
double sto1_0=iStochastic(Symbol(),TimeFrame1,kperiod1,dperiod1,slowing1,MODE_SMA,STO_LOWHIGH,MODE_MAIN,i);
double sto1_1=iStochastic(Symbol(),TimeFrame1,kperiod1,dperiod1,slowing1,MODE_SMA,STO_LOWHIGH,MODE_MAIN,i+1);
double sto2_0=iStochastic(Symbol(),TimeFrame2,kperiod2,dperiod2,slowing2,MODE_SMA,STO_LOWHIGH,MODE_MAIN,bar_sto2_0);
double sto2_1=iStochastic(Symbol(),TimeFrame2,kperiod2,dperiod2,slowing2,MODE_SMA,STO_LOWHIGH,MODE_MAIN,bar_sto2_1);
Comment(
"\n",
"Stoch ",EnumToString(TimeFrame1),
", бар ",(i+1)," > время: ",TimeToString(time[i+1],TIME_MINUTES),", значение: ",DoubleToString(sto1_1,Digits()),
"; бар ",i," > время: ",TimeToString(time[i],TIME_MINUTES),", значение: ",DoubleToString(sto1_0,Digits()),"\n",
//---
"Stoch ",EnumToString(TimeFrame2),
", бар ",bar_sto2_1," > время: ",TimeToString(iTime(Symbol(),TimeFrame2,bar_sto2_1),TIME_MINUTES),", значение: ",DoubleToString(sto2_1,Digits()),
"; бар ",bar_sto2_0," > время: ",TimeToString(iTime(Symbol(),TimeFrame2,bar_sto2_0),TIME_MINUTES),", значение: ",DoubleToString(sto2_0,Digits())
);
}
//--- return value of prev_calculated for next call
return(rates_total);
}
//+------------------------------------------------------------------+
Versuchen Sie als nächstes, die gewünschte Logik anstelle von Comment() auszuführen.
Schauen wir mal...
Schauen wir uns an, wie man Werte aus einem höheren Zeitrahmen erhält, während man sich in einem niedrigeren befindet:
Und dann versuchen Sie, die gewünschte Logik anstelle von Comment() auszuführen.
Wir werden sehen...
Danke, es hat funktioniert)
Im Expert Advisor muss ich beim Aufruf des Indikators nur die Nummer des gewünschten Zeitrahmens angeben, während der Indikator mit der Verschiebung "tanzt". Wo kann ich mehr darüber lesen?
Danke, es hat funktioniert)
Im EA, wenn ich den Indikator aufrufe, muss ich nur die Nummer des gewünschten Zeitrahmens angeben, und der Indikator "tanzt" mit der Verschiebung. Wo kann ich mehr darüber lesen?
Ich habe es nirgendwo gelesen - ich habe keine Ahnung.
Stellen Sie sich Folgendes vor: Sie fahren mit dem Fahrrad durch die Bars auf der M1. Die Indikatorwerte entnehmen Sie der Taktnummer, auf die sich der Zyklusindex i bezieht.
In der Tabelle steht in der Kopfzeile oben der Zyklusindex M1, darunter der Wert der Taktzeit, auf den sich der Index M1 bezieht
Ganz unten der Zyklusindex M5, darüber der Wert der Taktzeit, auf die sich der Index M5 bezieht
Wenn Sie den Indexwert des aktuellen Zeitrahmens, in dem der Zyklus beginnt, an die Funktion iCustom() übergeben, erhalten Sie die Werte des Indikators aus dem älteren Zeitrahmen entsprechend dem Index. Der Index bezieht sich jedoch nicht auf den erforderlichen Balken, wie aus der Tabelle ersichtlich ist.
Und das sollte auch in den Expertenberatern geschehen, sonst nimmt man nicht die Werte aus dem erwarteten Balken und denkt, dass man es richtig gemacht hat. Nun, Sie haben es richtig gemacht, aber nicht aus der falschen Bar. Dies muss bekannt sein und berücksichtigt werden.
D.h., beim Empfang von Multitime-Daten muss man sich auf die Zeit verlassen und sie zur Taktnummer im gewünschten Zeitrahmen neu berechnen.
Artyom, bitte helfen Sie mir auch, ich habe Probleme mit Indikatoren.
Die Funktionen im Expert Advisor funktionieren und sind einfach zu verbinden, nun, es ist verständlich - sie brauchen nur aktuelle Werte, aber wie überträgt man sie auf den Indikator, um die Koinzidenz auf der Historie zu zeichnen...?
Die Pfeile sollten auf eine Kerze gezeichnet werden, sobald das Hoch[1] und das Tief[1] zusammenfallen.
//| iTwo.mq4 |
//| Copyright 2016, Artem A. Trishkin, Skype artmedia70 |
//| https://login.mql5.com/ru/users/artmedia70 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, Artem A. Trishkin, Skype artmedia70"
#property link "https://login.mql5.com/ru/users/artmedia70"
#property version "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots 2
//--- plot UP
#property indicator_label1 "UP"
#property indicator_type1 DRAW_ARROW
#property indicator_color1 clrLawnGreen
#property indicator_style1 STYLE_SOLID
#property indicator_width1 1
//--- plot DN
#property indicator_label2 "DN"
#property indicator_type2 DRAW_ARROW
#property indicator_color2 clrDeepPink
#property indicator_style2 STYLE_SOLID
#property indicator_width2 1
//--- input parameters
input ENUM_TIMEFRAMES TimeFrame = PERIOD_H1;
input string dSymbol = "AUDUSD";
//--- indicator buffers
double BufferUP[];
double BufferDN[];
//--- global variables
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- indicator buffers mapping
SetIndexBuffer(0,BufferUP);
SetIndexBuffer(1,BufferDN);
//--- setting a code from the Wingdings charset as the property of PLOT_ARROW
SetIndexArrow(0,233);
SetIndexArrow(1,234);
//---
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<2) return(0);
int limit=rates_total-prev_calculated;
if(limit>1) {
limit=rates_total-2;
ArrayInitialize(BufferUP,EMPTY_VALUE);
ArrayInitialize(BufferDN,EMPTY_VALUE);
}
int NumFrUp = GetFractalBar(dSymbol,PERIOD_CURRENT,0,MODE_UPPER); // номер бара Up
int NumFrDn = GetFractalBar(dSymbol,PERIOD_CURRENT,0,MODE_LOWER); // номер бара Dn
Comment( "Bear: " , GetBearBull(dSymbol, TimeFrame, 3) == 1, // Подряд 3 бара вверх
"\nBull: ", GetBearBull(dSymbol, TimeFrame, 3) == 2, // Подряд 3 бара вниз
"\nNumFrUp: " , NumFrUp, // номер бара Up
"\nNumFrDn: ", NumFrDn, // номер бара Dn
"\nPriceFrUp: " ,iHigh(dSymbol,PERIOD_CURRENT,NumFrUp), // Цена верхнего фрактала
"\nPriceDn: ", iLow(dSymbol,PERIOD_CURRENT,NumFrDn) // Цена нижнего фрактала
);
for(int i=limit; i>=0; i--) {
//--
if(/* что сюда */0)
{
BufferUP[i]=Low[i]-50*_Point;
}
//--
if(/* что сюда */0)
{
BufferDN[i]=High[i]+50*_Point;
}
} // end for
//--- return value of prev_calculated for next call
return(rates_total);
}
//===============================================================================================
//---------------------- Возвращает номер бара фрактала по его номеру --------------------------+
//===============================================================================================
int GetFractalBar(string symb="0", int tf=0, int nf=0, int mode=MODE_UPPER) {
if(symb=="0") { symb=Symbol();}
double f=0;
int kf=0;
for(int i=3; i<iBars(symb, tf)-1; i++) {
if(mode==MODE_LOWER){
f=iFractals(symb, tf, MODE_LOWER, i);
if(f!=0) {
kf++;
if(kf>nf) { return(i);}
}}
if(mode==MODE_UPPER){
f=iFractals(symb, tf, MODE_UPPER, i);
if(f!=0) {
kf++;
if(kf>nf) { return(i);}
}}}
return(-1);
}
//===============================================================================================
//------------------------ Функция возвращает направление баров подряд -------------------------+
//===============================================================================================
int GetBearBull(string symb="0", int tf=0, int ne=5) {
if(symb=="0") { symb=Symbol();}
double open1=0,close1=0,open2=0,close2=0;
int b=1,s=1;
for(int i=1; i<ne; i++) {
open1=iOpen(symb,tf,i);
close1=iClose(symb,tf,i);
open2= iOpen(symb,tf,i+1);
close2= iClose(symb,tf,i+1);
if(open2<close2 && open1<close1 && open2<open1) { // бычьи
b++;
if(b==ne) { return(1);}
}
if(open2>close2 && open1>close1 && open2>open1) { // медвежьи
s++;
if(s==ne) { return(2);}
}
}
return(0);
}
//===============================================================================================
Dann werde ich versuchen, andere Muster einzugeben, die der Analogie folgen, um den Expert Advisor nicht zu stören.
Ich danke Ihnen!
Artyom, bitte helfen Sie mir auch, ich habe Probleme mit Indikatoren.
Die Funktionen im Expert Advisor funktionieren und sind einfach zu verbinden, nun, es ist verständlich - sie benötigen nur aktuelle Werte, aber wie überträgt man sie auf den Indikator, um ein Zusammentreffen auf der Geschichte zu zeichnen...?
Die Pfeile werden auf einer Kerze gezeichnet, wenn das Zusammentreffen von High[1] und Low[1] eintritt.
...
Dann werde ich versuchen, andere Muster einzugeben, die der Analogie folgen, um den Expert Advisor nicht zu stören.
Ich danke Ihnen!
Es sollte eine unterschiedliche Logik für verschiedene Muster geben, da nicht alle gleich sind. Und für ein und dasselbe Muster sollte die Logik von verschiedenen Programmierern unterschiedlich geschrieben werden.
Und was genau, welches Muster wollen Sie bestimmen?
Beginnen wir mit dem hier.
Es muss eine unterschiedliche Logik für verschiedene Muster geben, denn nicht alle Muster sind gleich. Und für dasselbe Muster werden verschiedene Programmierer unterschiedliche Logiken schreiben.
Und was genau, welches Muster wollen Sie definieren?
Fangen wir mit diesem an.
Ich habe ein Bild beigefügt.
Die Bedingung: Fraktal "3" ist höher als Fraktal "2" und Fraktal "1" ist höher als "2" -FrDn3 > FrDn2&& FrDn2< FrDn1 Wir schauen uns die Kerzen an, die Fraktale sind bereits gebildet und warten auf die Bestätigung des Candlestick-Musters,
und wenn es"3" steigende in einer Reihe gibt - kaufen (Pfeil) -GetBearBull(dSymbol,0,3)==1(1 - kaufen)
Beim Verkauf ist es genau umgekehrt.
Es ist einfach, sie in einen Expert Advisor einzubauen, aber in einen Indikator ...
Ich habe das Bild beigefügt.
Erforderliche Bedingung: Fraktal "3" ist höher als Fraktal "2" und Fraktal "1" ist höher als "2" -FrDn3 > FrDn2&& FrDn2< FrDn1 Wir betrachten den Candlestick, die Fraktale haben sich bereits gebildet und warten auf die Bestätigung des Candlestick-Musters,
und wenn es"3" steigende in einer Reihe gibt - kaufen (Pfeil) -GetBearBull(dSymbol,0,3)==1(1 - kaufen)
Beim Verkauf ist es genau umgekehrt.
Es ist einfach, sie in einen Expert Advisor einzubauen, aber in einen Indikator...
Im Indikator ist es umgekehrt - wenn Sie die Suche in der Tiefe der Geschichte beginnen, im Indikator - von seinem Anfang an. Suchen Sie zuerst das linke Fraktal, dann das mittlere und dann das rechte.
Verwalten Sie die Flaggen.
Im Indikator ist die Logik umgekehrt - wenn Sie im EA tief in der Historie suchen, dann beginnen Sie im Indikator am Anfang der Historie. Suchen Sie zuerst das linke Fraktal, dann das mittlere und dann das rechte.
Verwalten Sie die Flaggen.
Ich bitte darum, die fertige Variante zu zeigen. Vielleicht sehe ich sie einmal und die Fragen fallen weg, aber jetzt habe ich tausend Fragen und kann mich nicht entscheiden.
Was man mit all dem in einem Indikator machen kann - ich habe keine Ahnung(
//---------------------- Возвращает номер бара фрактала по его номеру --------------------------+
//===============================================================================================
int GetFractalBar(string symb="0", int tf=0, int nf=0, int mode=MODE_UPPER) {
if(symb=="0") { symb=Symbol();}
double f=0;
int kf=0;
for(int i=3; i<iBars(symb, tf)-1; i++) {
if(mode==MODE_LOWER){
f=iFractals(symb, tf, MODE_LOWER, i);
if(f!=0) {
kf++;
if(kf>nf) { return(i);}
}}
if(mode==MODE_UPPER){
f=iFractals(symb, tf, MODE_UPPER, i);
if(f!=0) {
kf++;
if(kf>nf) { return(i);}
}}}
return(-1);
}
//===============================================================================================
//------------------------ Функция возвращает направление баров подряд -------------------------+
//===============================================================================================
int GetBearBull(string symb="0", int tf=0, int ne=5) {
if(symb=="0") { symb=Symbol();}
double open1=0,close1=0,open2=0,close2=0;
int b=1,s=1;
for(int i=1; i<ne; i++) {
open1=iOpen(symb,tf,i);
close1=iClose(symb,tf,i);
open2= iOpen(symb,tf,i+1);
close2= iClose(symb,tf,i+1);
if(open2<close2 && open1<close1 && open2<open1) { // бычьи
b++;
if(b==ne) { return(1);}
}
if(open2>close2 && open1>close1 && open2>open1) { // медвежьи
s++;
if(s==ne) { return(2);}
}
}
return(0);
}
//===============================================================================================
Wenn ich könnte, dann keine Fragen, ich verstehe die Logik, aber ich kann sie nicht in den Code implementieren, also bitte ich darum, mir eine fertige Variante zu zeigen, ich werde sie einmal sehen und die Fragen werden in Zukunft verschwinden, aber jetzt gibt es Tausende von ihnen und ich kann sie nicht selbst lösen.
Was man mit all dem in einem Indikator machen kann - keine Ahnung(
//---------------------- Возвращает номер бара фрактала по его номеру --------------------------+
//===============================================================================================
int GetFractalBar(string symb="0", int tf=0, int nf=0, int mode=MODE_UPPER) {
if(symb=="0") { symb=Symbol();}
double f=0;
int kf=0;
for(int i=3; i<iBars(symb, tf)-1; i++) {
if(mode==MODE_LOWER){
f=iFractals(symb, tf, MODE_LOWER, i);
if(f!=0) {
kf++;
if(kf>nf) { return(i);}
}}
if(mode==MODE_UPPER){
f=iFractals(symb, tf, MODE_UPPER, i);
if(f!=0) {
kf++;
if(kf>nf) { return(i);}
}}}
return(-1);
}
//===============================================================================================
//------------------------ Функция возвращает направление баров подряд -------------------------+
//===============================================================================================
int GetBearBull(string symb="0", int tf=0, int ne=5) {
if(symb=="0") { symb=Symbol();}
double open1=0,close1=0,open2=0,close2=0;
int b=1,s=1;
for(int i=1; i<ne; i++) {
open1=iOpen(symb,tf,i);
close1=iClose(symb,tf,i);
open2= iOpen(symb,tf,i+1);
close2= iClose(symb,tf,i+1);
if(open2<close2 && open1<close1 && open2<open1) { // бычьи
b++;
if(b==ne) { return(1);}
}
if(open2>close2 && open1>close1 && open2>open1) { // медвежьи
s++;
if(s==ne) { return(2);}
}
}
return(0);
}
//===============================================================================================
Benötigen Sie eine Funktion, die eine fraktale Balkennummer nach ihrer Anzahl zurückgibt?
Sie benötigen eine Funktion, die das Vorhandensein eines Fraktals auf dem gewünschten Balken (Zyklusindex+3) zurückgibt