Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 745
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
Ist es möglich, alle Umkehrniveaubänder im Indikator auszublenden, nicht getestet und den Rest, und nur getestete zu belassen, d. H. Hide extern bool zone_show_weak = true; und unten im Code if (zone_strength[i] == ZONE_WEAK && zone_show_weak == false) und andere können nicht ausgeblendet werden. Vielleicht versteht und korrigiert jemand den Code oder entfernt die Ebenen, die ich oben beschrieben habe. Indikatorcode:
#property copyright "Copyright © 2017 Andrew Sumner"
#property link ""
#property Indicator_Chart_Window
#Eigenschaftsindikator_Puffer 4
#Eigenschaftsanzeige_Farbe1 Rot
#Eigenschaftsanzeige_Farbe2 Rot
#Eigenschaftsanzeige_Farbe3 DodgerBlue
#Eigenschaftsanzeige_Farbe4 DodgerBlue
extern int BackLimit = 300; //Zurück zurück
extern int TimeFrame = 0;
extern string TimeString = "0=Aktuell, 60=H1, 240=H4, 1440=Tag, 10080=Woche, 43200=Monat";
extern color color_support_weak = MittelAquamarin; //support - Unterstützung für schwaches DarkSlateGray
extern color color_support_untested = SeaGreen; // ungeprüft
externe Farbe color_support_verified = Grün;
extern color color_support_proven = LimeGreen;
extern color color_support_turncoat = Olivgrün;
extern color color_resist_weak = Sienna;
extern color color_resist_untested = Orchidee;
externe Farbe color_resist_verified = Purpur;
extern color color_resist_proven = Rot;
externe Farbe color_resist_turncoat = DarkOrange;
extern bool zone_show_weak = wahr;
extern double zone_fuzzfactor = 0,2;
extern bool zone_solid = falsch; // true wenn false, gibt es keine vollen Bandzonen, sondern eingerahmt von einem Rechteck mit width width
extern int zone_linewidth = 2;
extern int zone_style = 0;
extern bool zone_show_info = wahr;
extern int zone_label_shift = 22; // horizontaler Versatz der Labels, aber erst nach dem Entfernen des Indikators
extern bool zone_show_alerts = falsch;
extern bool zone_alert_popups = wahr;
extern bool zone_alert_sounds = true;
extern bool send_email = falsch;
extern int zone_alert_waitseconds = 300;
extern bool zone_merge = wahr;
extern bool zone_extend = wahr;
extern bool fractals_show = falsch;
extern double fractal_fast_factor = 3.0;
extern double fractal_slow_factor = 6.0;
extern bool SetGlobals = wahr;
double FastDnPts[], FastUpPts[];
double SlowDnPts[], SlowUpPts[];
double zone_hi[1000], zone_lo[1000];
int zone_start[1000], zone_hits[1000], zone_type[1000], zone_strength[1000], zone_count = 0;
boolzone_turn[1000];
#define ZONE_SUPPORT 1
#define ZONE_RESIST 2
#define ZONE_WEAK 0
#define ZONE_TURNCOAT 1
#define ZONE_UNTESTED 2
#define ZONE_VERIFIED 3
#define ZONE_PROVEN 4
#define UP_POINT 1
#define DN_POINT -1
int time_offset = 0;
int init()
{
Indikatorpuffer (4);
SetIndexBuffer(0, SlowDnPts);
SetIndexBuffer(1, SlowUpPts);
SetIndexBuffer(2, FastDnPts);
SetIndexBuffer(3, FastUpPts);
if (fractals_show == wahr)
{
SetIndexStyle(0, DRAW_ARROW, 0, 3);
SetIndexStyle(1, DRAW_ARROW, 0, 3);
SetIndexStyle(2, DRAW_ARROW, 0, 1);
SetIndexStyle(3, DRAW_ARROW, 0, 1);
SetIndexArrow(0, 218);
SetIndexArrow(1, 217);
SetIndexArrow(2, 218);
SetIndexArrow(3, 217);
}
anders
{
SetIndexStyle(0, DRAW_NONE);
SetIndexStyle(1, DRAW_NONE);
SetIndexStyle(2, DRAW_NONE);
SetIndexStyle(3, DRAW_NONE);
}
if (Zeitrahmen != 1 && Zeitrahmen != 5 && Zeitrahmen != 15 &&
Zeitrahmen != 60 && Zeitrahmen != 240 && Zeitrahmen != 1440 &&
Zeitrahmen != 10080 && Zeitrahmen != 43200)
Zeitrahmen = 0;
if(Zeitrahmen <Periode())
Zeitrahmen = Zeitraum ();
Rückgabe (0);
}
int deinit()
{
Zonen löschen();
DeleteGlobalVars();
Rückgabe (0);
}
int start()
{
if (NewBar() == wahr)
{
int old_zone_count = zone_count;
Schnelle Fraktale();
SlowFractals();
Zonen löschen();
FindZones();
DrawZones();
if (zone_count < old_zone_count)
DeleteOldGlobalVars(old_zone_count);
}
wenn (zone_show_info == true)
{
for (int i=0; i<zone_count; i++)
{
Zeichenkette lbl;
if (zone_strength[i] == ZONE_PROVEN)
lbl=""; // Bewährt
sonst wenn (zone_strength[i] == ZONE_VERIFIED)
lbl=""; // Geprüft
sonst wenn (zone_strength[i] == ZONE_UNTESTED)
lbl=""; // NICHT testen
sonst wenn (zone_strength[i] == ZONE_TURNCOAT)
lbl=""; // Umkehrung
anders
lbl=""; // Schwach
if (Zonentyp[i] == ZONE_SUPPORT)
lbl = lbl + "unter"; //Unterstützung
anders
lbl = lbl + "sop"; //Widerstand
if (zone_hits[i] > 0 && zone_strength[i] > ZONE_UNTESTED)
{
if (zone_hits[i] == 1)
lbl = lbl + ",T=" + zone_hits[i]; //Zählung testen
anders
lbl = lbl + ",T=" + zone_hits[i]; //Zählung testen
}
int adjust_hpos;
int wbpc = WindowBarsPerChart();
int k;
k = Periode() * 60 + (20 + StringLen(lbl));
wenn (wbpc < 80)
adjust_hpos = Zeit[0] + k * 4;
sonst wenn (wbpc < 125)
adjust_hpos = Zeit[0] + k * 8;
sonst wenn (wbpc < 250)
adjust_hpos = Zeit[0] + k * 15;
sonst wenn (wbpc < 480)
adjust_hpos = Zeit[0] + k * 29;
sonst wenn (wbpc < 950)
adjust_hpos = Time[0] + k * 58;
anders
adjust_hpos = Zeit[0] + k * 115;
int shift = k * zone_label_shift;
double vpos = zone_hi[i] - (zone_hi[i] - zone_lo[i]) / 2;
// Text der Ebenenbeschreibungen
string s = "SSSR#"+i+"LBL";
ObjectCreate(s, OBJ_TEXT, 0, 0, 0);
ObjectSet(s, OBJPROP_TIME1, adjust_hpos + shift);
ObjectSet(s, OBJPROP_PRICE1, vpos);
ObjectSetText(s, StringRightPad(lbl, 36, " "), 11, "Courier New", clrWhite); //Schwarz
}
}
CheckAlerts();
Rückgabe (0);
}
ungültig CheckAlerts ()
{
statisch int lastalert = 0;
if (zone_show_alerts == false)
Rückkehr;
if (Time[0] - lastalert > zone_alert_waitseconds)
if (CheckEntryAlerts() == true)
letzterAlarm = Zeit[0];
}
bool CheckEntryAlerts()
{
// Aufzeichnungen prüfen
for (int i=0; i<zone_count; i++)
{
if (Close[0] >= zone_lo[i] && Close[0] < zone_hi[i])
{
if (zone_show_alerts == true)
{
if (zone_alert_popups == true)
{
if (Zonentyp[i] == ZONE_SUPPORT)
Alert(Symbol() + TimeFrameToString(TimeFrame) + ": Supportzone betreten"); //Unterstützungszone eingeführt
anders
Alert(Symbol() + TimeFrameToString(TimeFrame) + ": Widerstandszone betreten"); //Widerstandszone eingeführt
}
if (zone_alert_sounds == true)
PlaySound("alert.wav");
}
if (send_email == true)
{
string dir = "";
string msg = StringConcatenate(Symbol(), "-", TimeFrameToString(TimeFrame), "at", TimeToStr(Time[0], TIME_DATE|TIME_SECONDS),
" ", dir, "Zone betreten");
if (Zonentyp[i] == ZONE_SUPPORT)
{
dir = "Unterstützung";
SendMail("SS_SupRes_v04c-Alarm", msg);
}
anders
{
dir="Widerstand";
SendMail("SS_SupRes_v04c-Alarm", msg);
}
}
zurück (wahr);
}
}
falsch zurückgeben);
}
void DeleteGlobalVars()
{
if(SetGlobals==false)
Rückkehr;
GlobalVariableDel("SSSR_Count_"+Symbol()+TimeFrame);
GlobalVariableDel("SSSR_Updated_"+Symbol()+Zeitrahmen);
int old_count = zone_count;
zone_count = 0;
DeleteOldGlobalVars(old_count);
}
void DeleteOldGlobalVars(int old_count)
{
if(SetGlobals==false)
Rückkehr;
for (int i=zone_count; i<old_count; i++)
{
GlobalVariableDel("SSSR_HI_"+Symbol()+Zeitrahmen+i);
GlobalVariableDel("SSSR_LO_"+Symbol()+TimeFrame+i);
GlobalVariableDel("SSSR_HITS_"+Symbol()+TimeFrame+i);
GlobalVariableDel("SSSR_STRENGTH_"+Symbol()+TimeFrame+i);
GlobalVariableDel("SSSR_AGE_"+Symbol()+TimeFrame+i);
}
}
void FindZones()
{
int i, j, shift, bustcount=0, testcount = 0;
doppelt hival, loval;
bool gedreht = falsch, hasturned = falsch;
doppelt temp_hi[1000], temp_lo[1000];
int temp_start[1000], temp_hits[1000], temp_strength[1000], temp_count = 0;
bool temp_turn[1000], temp_merge[1000];
int merge1[1000], merge2[1000], merge_count = 0;
// Schleife durch die Zonen vom ältesten zum kleinsten (ignoriere die letzten 5 Balken),
// diejenigen finden, die bis heute überlebt haben...
for (shift=MathMin(iBars(NULL, TimeFrame)-1, BackLimit); shift>5; shift--)
{
double atr = iATR(NULL, TimeFrame, 7, shift);
double fu = atr/2 * zone_fuzzfactor;
bool isWeak;
bool touchOk = falsch;
bool isBust = falsch;
double close = iClose(NULL, TimeFrame, shift);
double high = iHigh(NULL, TimeFrame, shift);
Double Low = iLow (NULL, TimeFrame, Verschiebung);
doppelt hallo_i;
doppeltes lo_i;
if (FastUpPts[shift] > 0.001)
{
// Höhepunkt Zickzack
isWeak = true;
if (SlowUpPts[shift] > 0.001)
isWeak = falsch;
hival=hoch;
if (zone_extend == wahr)
hival += fu;
loval = MathMax(MathMin(close, high-fu), high-fu*2);
drehen = falsch;
hasturned=false;
isbust=false;
Buszahl = 0;
testcount = 0;
for (i=shift-1; i>=0; i--)
{
hi_i = iHigh(NULL, Zeitrahmen, i);
lo_i = iLow(NULL, Zeitrahmen, i);
if ((turned == false && FastUpPts[i] >= loval && FastUpPts[i] <= hival) ||
(gedreht == true && FastDnPts[i] <= hival && FastDnPts[i] >= loval))
{
// Mögliche Berührung, stellen Sie einfach sicher, dass es seit dem letzten Mal mehr als 10 Kerzen waren
touchOk = wahr;
für (j=i+1; j<i+11; j++)
{
if ((turned == false && FastUpPts[j] >= loval && FastUpPts[j] <= hival) ||
(gedreht == true && FastDnPts[j] <= hival && FastDnPts[j] >= loval))
{
touchOk = falsch;
brechen;
}
}
if (touchOk == true)
{
// Wir haben eine Berührung. Wenn es einmal gesprengt wurde, entferne den Bustcount
// da wir wissen, dass dieses Level noch gültig ist und gerade die Seite gewechselt hat
Buszahl = 0;
testcount++;
}
}
if ((turned == false && hi_i > hival) ||
(gedreht == wahr && lo_i < loval))
{
// Dieses Level wurde mindestens einmal gesprengt
Büstenzahl++;
if (bustcount > 1 || isWeak == true)
{
// zwei oder mehr
isBust = wahr;
brechen;
}
if (gedreht == wahr)
drehen = falsch;
sonst wenn (gedreht == falsch)
drehen = wahr;
hasturned = wahr;
// Vorherige Treffer vergessen
testcount = 0;
}
}
if(isBust==false)
{
// Level ist noch gültig, zu unserer Liste hinzufügen
temp_hi[temp_count] = hival;
temp_lo[temp_count] = loval;
temp_turn[temp_count] = hasturned;
temp_hits[temp_count] = testcount;
temp_start [temp_count] = Schicht;
temp_merge[temp_count] = falsch;
if (testcount > 3)
temp_strength[temp_count] = ZONE_PROVEN;
sonst wenn (testcount > 0)
temp_strength[temp_count] = ZONE_VERIFIED;
sonst wenn (hasturned == true)
temp_strength[temp_count] = ZONE_TURNCOAT;
sonst wenn (isWeak == false)
temp_strength[temp_count] = ZONE_UNTESTED;
anders
temp_strength[temp_count] = ZONE_WEAK;
temp_count++;
}
}
sonst wenn (FastDnPts[shift] > 0.001)
{
// niedriger Zickzackpunkt
isWeak = true;
if (SlowDnPts[shift] > 0.001)
isWeak = falsch;
loval = niedrig;
if (zone_extend == wahr)
loval = fu;
hival = MathMin(MathMax(close, low+fu), low+fu*2);
drehen = falsch;
hasturned=false;
Buszahl = 0;
testcount = 0;
isbust=false;
for (i=shift-1; i>=0; i--)
{
hi_i = iHigh(NULL, Zeitrahmen, i);
lo_i = iLow(NULL, Zeitrahmen, i);
if ((turned == true && FastUpPts[i] >= loval && FastUpPts[i] <= hival) ||
(gedreht == false && FastDnPts[i] <= hival && FastDnPts[i] >= loval))
{
// Mögliche Berührung, stellen Sie einfach sicher, dass es seit dem letzten Mal mehr als 10 Kerzen waren
touchOk = wahr;
für (j=i+1; j<i+11; j++)
{
if ((turned == true && FastUpPts[j] >= loval && FastUpPts[j] <= hival) ||
(gedreht == false && FastDnPts[j] <= hival && FastDnPts[j] >= loval))
{
touchOk = falsch;
brechen;
}
}
if (touchOk == true)
{
// Wir haben eine Berührung. Wenn es einmal gesprengt wurde, entferne den Bustcount
// da wir wissen, dass dieses Level noch gültig ist und gerade die Seite gewechselt hat
Buszahl = 0;
testcount++;
}
}
if ((turned == true && hi_i > hival) ||
(gedreht == falsch && lo_i < loval))
{
// Dieses Level wurde mindestens einmal gesprengt
Büstenzahl++;
if (bustcount > 1 || isWeak == true)
{
// zwei oder mehr
isBust = wahr;
brechen;
}
if (gedreht == wahr)
drehen = falsch;
sonst wenn (gedreht == falsch)
drehen = wahr;
hasturned = wahr;
// Vorherige Treffer vergessen
testcount = 0;
}
}
if(isBust==false)
{
// Level ist noch gültig, zu unserer Liste hinzufügen
temp_hi[temp_count] = hival;
temp_lo[temp_count] = loval;
temp_turn[temp_count] = hasturned;
temp_hits[temp_count] = testcount;
temp_start [temp_count] = Schicht;
temp_merge[temp_count] = falsch;
if (testcount > 3)
temp_strength[temp_count] = ZONE_PROVEN;
sonst wenn (testcount > 0)
temp_strength[temp_count] = ZONE_VERIFIED;
sonst wenn (hasturned == true)
temp_strength[temp_count] = ZONE_TURNCOAT;
sonst wenn (isWeak == false)
temp_strength[temp_count] = ZONE_UNTESTED;
anders
temp_strength[temp_count] = ZONE_WEAK;
temp_count++;
}
}
}
// nach überlappenden Zonen suchen...
if (zone_merge == wahr)
{
merge_count = 1;
int Iterationen = 0;
while (merge_count > 0 && Iterationen < 3)
{
merge_count = 0;
Iterationen++;
für (i = 0; i < temp_count; i++)
temp_merge[i] = falsch;
für (i = 0; i < temp_count-1; i++)
{
if (temp_hits[i] == -1 || temp_merge[j] == true)
fortsetzen;
für (j = i+1; j < temp_count; j++)
{
if (temp_hits[j] == -1 || temp_merge[j] == true)
fortsetzen;
if ((temp_hi[i] >= temp_lo[j] && temp_hi[i] <= temp_hi[j]) ||
(temp_lo[i] <= temp_hi[j] && temp_lo[i] >= temp_lo[j]) ||
(temp_hi[j] >= temp_lo[i] && temp_hi[j] <= temp_hi[i]) ||
(temp_lo[j] <= temp_hi[i] && temp_lo[j] >= temp_lo[i]))
{
merge1[merge_count] = i;
merge2[merge_count] = j;
temp_merge[i] = wahr;
temp_merge[j] = wahr;
merge_count++;
}
}
}
// ... und kombiniere sie ...
for (i=0; i<merge_count; i++)
{
int Ziel = merge1[i];
int Quelle = merge2[i];
temp_hi[Ziel] = MathMax(temp_hi[Ziel], temp_hi[Quelle]);
temp_lo[Ziel] = MathMin(temp_lo[Ziel], temp_lo[Quelle]);
temp_hits[Ziel] += temp_hits[Quelle];
temp_start[Ziel] = MathMax(temp_start[Ziel], temp_start[Quelle]);
temp_strength[Ziel] = MathMax(temp_strength[Ziel], temp_strength[Quelle]);
if (temp_hits[Ziel] > 3)
temp_strength[Ziel] = ZONE_PROVEN;
if (temp_hits[target] == 0 && temp_turn[target] == false)
{
temp_hits[Ziel] = 1;
if (temp_strength[Ziel] < ZONE_VERIFIED)
temp_strength[Ziel] = ZONE_VERIFIED;
}
if (temp_turn[target] == false || temp_turn[source] == false)
temp_turn[Ziel] = falsch;
if (temp_turn[target] == true)
temp_hits[Ziel] = 0;
temp_hits[Quelle] = -1;
}
}
}
// Kopieren Sie den Rest der Liste in unsere offiziellen Zonen
zone_count = 0;
für (i=0; i<temp_count; i++)
{
if (temp_hits[i] >= 0 && zone_count < 1000)
{
zone_hi[zone_count] = temp_hi[i];
zone_lo[zone_count] = temp_lo[i];
zone_hits[zone_count] = temp_hits[i];
zone_turn[zone_count] = temp_turn[i];
zone_start[zone_count] = temp_start[i];
zone_strength[zone_count] = temp_strength[i];
if (zone_hi[zone_count] < Schließen[4])
zone_type[zone_count] = ZONE_SUPPORT;
sonst wenn (zone_lo[zone_count] > Close[4])
zone_type[zone_count] = ZONE_RESIST;
anders
{
für (j=5; j<1000; j++)
{
if (iClose(NULL, TimeFrame, j) < zone_lo[zone_count])
{
zone_type[zone_count] = ZONE_RESIST;
brechen;
}
else if (iClose(NULL, TimeFrame, j) > zone_hi[zone_count])
{
zone_type[zone_count] = ZONE_SUPPORT;
brechen;
}
}
wenn (j == 1000)
zone_type[zone_count] = ZONE_SUPPORT;
}
zone_count++;
}
}
}
Ungültige DrawZones ()
{
if(SetGlobals==true)
{
GlobalVariableSet("SSSR_Count_"+Symbol()+TimeFrame, zone_count);
GlobalVariableSet("SSSR_Updated_"+Symbol()+TimeFrame, TimeCurrent());
}
for (int i=0; i<zone_count; i++)
{
if (zone_strength[i] == ZONE_WEAK && zone_show_weak == false)
fortsetzen;
Zeichenfolge s = "SSSR#"+i+" Stärke=";
if (zone_strength[i] == ZONE_PROVEN)
s = s + "Bewährt, Testanzahl = " + zone_hits[i];
sonst wenn (zone_strength[i] == ZONE_VERIFIED)
s = s + "Verifiziert, Testanzahl = " + zone_hits[i];
sonst wenn (zone_strength[i] == ZONE_UNTESTED)
s = s + "ungetestet";
sonst wenn (zone_strength[i] == ZONE_TURNCOAT)
s = s + "Überläufer";
anders
s = s + "schwach";
ObjectCreate(s, OBJ_RECTANGLE , 0, 0, 0, 0, 0);
ObjectSet(s, OBJPROP_TIME1, iTime(NULL, TimeFrame, zone_start[i]));
ObjectSet(s, OBJPROP_TIME2, TimeCurrent());
ObjectSet(s, OBJPROP_PRICE1, zone_hi[i]);
ObjectSet(s, OBJPROP_PRICE2, zone_lo[i]);
ObjectSet(s, OBJPROP_BACK, zone_solid);
ObjectSet(s, OBJPROP_WIDTH, zone_linewidth);
ObjectSet(s, OBJPROP_STYLE, zone_style);
if (Zonentyp[i] == ZONE_SUPPORT)
{
// Unterstützungszone
if (zone_strength[i] == ZONE_TURNCOAT)
ObjectSet(s, OBJPROP_COLOR, color_support_turncoat);
sonst wenn (zone_strength[i] == ZONE_PROVEN)
ObjectSet(s, OBJPROP_COLOR, color_support_proven);
sonst wenn (zone_strength[i] == ZONE_VERIFIED)
ObjectSet(s, OBJPROP_COLOR, color_support_verified);
sonst wenn (zone_strength[i] == ZONE_UNTESTED)
ObjectSet(s, OBJPROP_COLOR, color_support_ungetested);
anders
ObjectSet(s, OBJPROP_COLOR, color_support_weak);
}
anders
{
// Widerstandszone
if (zone_strength[i] == ZONE_TURNCOAT)
ObjectSet(s, OBJPROP_COLOR, color_resist_turncoat);
sonst wenn (zone_strength[i] == ZONE_PROVEN)
ObjectSet(s, OBJPROP_COLOR, color_resist_proven);
sonst wenn (zone_strength[i] == ZONE_VERIFIED)
ObjectSet(s, OBJPROP_COLOR, color_resist_verified);
sonst wenn (zone_strength[i] == ZONE_UNTESTED)
ObjectSet(s, OBJPROP_COLOR, color_resist_untested);
anders
ObjectSet(s, OBJPROP_COLOR, color_resist_weak);
}
if(SetGlobals==true)
{
GlobalVariableSet("SSSR_HI_"+Symbol()+TimeFrame+i, zone_hi[i]);
GlobalVariableSet("SSSR_LO_"+Symbol()+TimeFrame+i, zone_lo[i]);
GlobalVariableSet("SSSR_HITS_"+Symbol()+TimeFrame+i, zone_hits[i]);
GlobalVariableSet("SSSR_STRENGTH_"+Symbol()+TimeFrame+i, zone_strength[i]);
GlobalVariableSet("SSSR_AGE_"+Symbol()+TimeFrame+i, zone_start[i]);
}
}
}
bool Fractal(int M, int P, int shift)
{
wenn (Zeitrahmen > P)
P = Zeitrahmen;
P = P / Zeitrahmen*2 + MathCeil(P / Zeitrahmen / 2);
if(shift<p)
falsch zurückgeben);
if (shift > iBars(Symbol(), TimeFrame)-P)
falsch zurückgeben);
for (int i=1; i<=P; i++)
{
if (M == OBEN_PUNKT)
{
if (iHigh(NULL, TimeFrame, shift+i) > iHigh(NULL, TimeFrame, shift))
falsch zurückgeben);
if (iHigh(NULL, TimeFrame, shift-i) >= iHigh(NULL, TimeFrame, shift))
falsch zurückgeben);
}
wenn (M == DN_POINT)
{
if (iLow(NULL, TimeFrame, shift+i) < iLow(NULL, TimeFrame, shift))
falsch zurückgeben);
if (iLow(NULL, TimeFrame, shift-i) <= iLow(NULL, TimeFrame, shift))
falsch zurückgeben);
}
}
zurück (wahr);
}
void FastFractals()
{
int-Verschiebung;
int limit = MathMin(Bars-1, BackLimit);
int P = TimeFrame * fractal_fast_factor;
FastUpPts[0] = 0,0; FastUpPts[1] = 0,0;
FastDnPts[0] = 0,0; FastDnPts[1] = 0,0;
for (shift=limit; shift>1; shift--)
{
if (Fractal(UP_POINT, P, shift) == true)
FastUpPts[shift] = iHigh(NULL, TimeFrame, shift);
anders
FastUpPts [Verschiebung] = 0,0;
if (Fractal(DN_POINT, P, shift) == true)
FastDnPts[shift] = iLow(NULL, TimeFrame, shift);
anders
FastDnPts [Verschiebung] = 0,0;
}
}
void SlowFractals()
{
int-Verschiebung;
int limit = MathMin(iBars(Symbol(), TimeFrame) - 1, BackLimit);
int P = TimeFrame * fractal_slow_factor;
SlowUpPts[0] = 0,0; SlowUpPts[1] = 0,0;
SlowDnPts[0] = 0,0; SlowDnPts[1] = 0,0;
for (shift=limit; shift>1; shift--)
{
if (Fractal(UP_POINT, P, shift) == true)
SlowUpPts[shift] = iHigh(NULL, TimeFrame, shift);
anders
SlowUpPts [Verschiebung] = 0,0;
if (Fractal(DN_POINT, P, shift) == true)
SlowDnPts[shift] = iLow(NULL, TimeFrame, shift);
anders
SlowDnPts [Verschiebung] = 0,0;
}
}
bool NewBar()
{
Statisches datetime LastTime = 0;
if (iTime(NULL, TimeFrame, 0) != LastTime)
{
LastTime = iTime(NULL, TimeFrame, 0)+time_offset;
zurück (wahr);
}
anders
falsch zurückgeben);
}
void DeleteZones()
{
intlen = 5;
int ich;
while (i < ObjectsTotal())
{
string objName = Objektname(i);
if (StringSubstr(objName, 0, len) != "SSSR#")
{
i++;
fortsetzen;
}
ObjectDelete(objName);
}
}
string TimeFrameToString(int tf) // Code von TRO
{
Zeichenkette tfs;
Schalter (tf)
{
Fall PERIODE_M1:
tfs="M1" ;
brechen;
Fall PERIODE_M5:
tfs="M5" ;
brechen;
Fall PERIODE_M15:
tfs="M15" ;
brechen;
Fall PERIOD_M30:
tfs="M30" ;
brechen;
Fall PERIODE_H1:
tfs="H1" ;
brechen;
Fall PERIODE_H4:
tfs="H4" ;
brechen;
Fall PERIODE_D1:
tfs="D1" ;
brechen;
Fall PERIODE_W1:
tfs="W1" ;
brechen;
Fall PERIOD_MN1:
tfs="MN";
}
Rückkehr (tfs);
}
string StringRepeat(string str, int n = 1)
{
string outstr = "";
for(int i = 0; i < n; i++) outstr = outstr + str;
return(outstr);
}
string StringRightPad(string str, int n=1, string str2=" ")
{
return(str + StringRepeat(str2,n-StringLen(str)));
Umstellung auf MT5. Hilf mir mit einem Wort. Wie in MT5 ist es in Code geschrieben, was ist falsch?
FRAGE: Warum fällt so viel Müll in den Puffer?
Ich bin auf der Stufe des Lego-Konstrukteurs, d.h. ich kopiere das Modul und verstehe die Eigenheiten von MT% aus Erfahrung. Dokumentation natürlich.
Umstellung auf MT5. Hilf mir mit einem Wort. Wie schreibt MT5 im Code, was ist falsch?
FRAGE: Warum fällt so viel Müll in den Puffer?
in mt5 geht die Zeitreihe in die andere Richtung
wenn Sie es auf die gleiche Weise wie in mt4 brauchen, das istArraySetAsSeries
Umstellung auf MT5. Hilf mir mit einem Wort. Wie in MT5 ist es in Code geschrieben, was ist falsch?
FRAGE: Warum fällt so viel Müll in den Puffer?
Ich bin auf der Stufe des Lego-Konstrukteurs, d.h. ich kopiere das Modul und verstehe die Eigenheiten von MT% aus Erfahrung. Dokumentation natürlich.
Vielen Dank für die Antwort.
Überprüft in MT5... Was für ein Chaos... Die Punkte sind auf seltsame Weise über das ganze Diagramm verstreut, irgendwo tief in der Geschichte... Ich verstehe nicht, was und warum MT5 nicht mag? Das Problem ist einfach!!!
NIMM ES IN MT4
.
UND SO IN MT5. Natürlich in einem Puffer. Aber das Problem ist, dass der Indikator Punkte fängt, aber nicht diese und nicht dort...(((
Bitte sagen Sie es mir noch einmal. Was ich im Code MT5???? falsch gemacht habe
Ich habe etwas in MT5. Aber Puffer ... ein Rätsel
Vielen Dank für die Antwort.
Überprüft in MT5... Was für ein Chaos... Die Punkte sind auf seltsame Weise über das ganze Diagramm verstreut, irgendwo tief in der Geschichte... Ich verstehe nicht, was und warum MT5 nicht mag? Das Problem ist einfach!!!
NIMM ES IN MT4
.
UND SO IN MT5 . Natürlich in einem Puffer. Aber das Problem ist, dass der Indikator Punkte fängt, aber nicht diese und nicht dort...(((
Bitte helfen Sie mir noch einmal. Was ich im Code MT5???? falsch gemacht habe
Ich habe etwas in MT5. Aber Puffer ... ein Rätsel
Es gibt kein Geheimnis. Die Nummerierung ist anders als bei mql4 und die Indikatorpuffer werden nicht automatisch auf Null gesetzt. Um den "Müll" zu beseitigen, muss der Programmierer für die Sauberkeit der Indizes sorgen, wenn sie keine Werte enthalten sollen.
Kein Geheimnis. Die Nummerierung ist anders als bei mql4 und die Indikatorpuffer werden nicht automatisch auf Null gesetzt. Um den "Müll" zu beseitigen, muss der Programmierer auf die Reinheit der Indizes achten, wenn sie keine Werte enthalten sollen.
Die Frage ist, WARUM werden die Markierungen (Punkte) irgendwo angebracht? Ich habe im Code den Algorithmus !!!! definiert. Die MA-Bedingung im Körper der Kerze. Ist das nicht genug?
Die Frage ist, WARUM werden die Markierungen (Punkte) irgendwo angebracht? Ich habe im Code den Algorithmus !!!! definiert. Die MA-Bedingung im Körper der Kerze. Ist das nicht genug?
Sehen Sie hier.
Umstellung auf MT5. Hilf mir mit einem Wort.
Artem hat den vollständigen Code anstelle des Wortes Hilfe angegeben. Jeder hat seinen eigenen Zugang dazu. Ich versuche, keinen vorgefertigten Code zu geben, aber ich scheitere trotzdem manchmal.
Vielen Dank für die Antwort.
Überprüft in MT5... Es ist ein ziemliches Durcheinander...Aber die Vergleichsgrafiken sind völlig unterschiedliche Zeiten. Wie kann man beurteilen, ob die Punkte richtig oder falsch sind???
Daher ein Wort der Hilfe.
Forum zum Thema Handel, automatisierte Handelssysteme und Strategietests
Alle MQL4 Anfänger Fragen, Hilfe und Diskussion über Algorithmen und Codes
Alexey Viktorov, 2019.01.21 11:04
Kein Geheimnis. Die Nummerierung ist anders als bei mql4 und die Indikatorpuffer werden nicht automatisch auf Null gesetzt. Um den "Müll" zu beseitigen, sollte der Programmierer selbst für die Sauberkeit der Indizes sorgen, wenn sie keine Werte enthalten sollen.
Hier ist ein Blick darauf.
Artiom gab den vollständigen Code an, anstatt mit dem Wort zu helfen. Jeder hat eine andere Herangehensweise an dieses Thema. Ich versuche, keinen vorgefertigten Code zu geben, aber trotzdem schlägt es manchmal fehl.
Aber die Vergleichsgrafiken sind völlig unterschiedliche Zeiten. Wie kann man beurteilen, ob die Punkte richtig oder falsch sind?
Daher ein Wort der Hilfe.
Halleluja!!!!! Geändert open[i] und close[i] zu iOpen(NULL,PERIOD_H1,i)
Halleluja!!!!! Geändert open[i] und close[i] zu iOpen(NULL,PERIOD_H1,i)
Was ist der Unterschied? Wenn die Anzeige auf H1 steht, liegt das nur an der Zugriffsgeschwindigkeit - Sie haben eine langsamere. In meinem Beispiel haben Sie wahrscheinlich übersehen, dass Sie die Arrays open und close auf serielle Indizierung einstellen müssen. Ich habe hervorgehoben, was Sie nicht hatten. Sie haben eine Schleife vom Anfang bis zum Ende - vom Grenzwert bis 0, und Sie haben keine Arrays indiziert - also wurde sie vorwärts und rückwärts gezeichnet.