Nützliche Funktionen von KimIV - Seite 84

 
vopros писал(а) >>

Igor, hallo!

Könnten Sie mir bitte sagen, wie ich eine akustische Benachrichtigung in einen bestehenden Indikator implementieren kann?

Zum Beispiel in ZigZag. Wie kann ich hinzufügen, dass beim Ziehen der neuen Linie ein Ton zu hören ist?

//| ZIG-ZAG_RPoint_v2_m.mq4 |https://www.mql5.com/ru/code/8739
//| Copyright © 2004-2008, Poul_Trade_Forum |Reproduziert den Code des RPoint Indikators . RPoint".
//| Aborigen & Kharko |
//| http://forex.kbpauk.ru/ | QUALITÄT ZICKZACK
//+------------------------------------------------------------------+

 

Meine Herren Programmierer, bitte machen Sie einen EA (für vernünftiges Geld) aus Kims Indikator.

Details per Post

Wladimir

vladmo@mail.ru

//+------------------------------------------------------------------+
//| i-MorningRange.mq4 |
//| Kim Igor V. alias KimIV |
//| http://www.kimiv.ru |
//| |
//| 08.02.2006 Der morgendliche Reichweitenanzeiger.
//+------------------------------------------------------------------+
#property copyright "Kim Igor V. alias KimIV"
#Eigenschaftslink "http://www.kimiv.ru"

#property indicator_chart_window
#Eigenschaft indicator_buffers 2
#Eigenschaft indicator_color1 blau
#Eigenschaft indicator_color2 Orange

//------- Externe Indikatorparameter -------------------------------
extern string CheckTime = "08:00"; // Zeit des Prüfbereichs
extern bool ShowHistory = True; // Verlaufsebenen anzeigen
extern inttern NumberOfDays = 5; // Anzahl der Tage der Historie
extern bool ShowComment = True; // Kommentare anzeigen

//------- Indikatorpuffer ------------------------------------------
double dBuf0[], dBuf1[];

//+------------------------------------------------------------------+
//| Benutzerdefinierte Initialisierungsfunktion für Indikatoren |
//+------------------------------------------------------------------+
void init() {
SetIndexArrow(0, 217);
SetIndexBuffer(0, dBuf0);
SetIndexStyle (0, DRAW_ARROW, 1, 2);
SetIndexArrow(1, 218);
SetIndexBuffer(1, dBuf1);
SetIndexStyle (1, DRAW_ARROW, 1, 2);

DeleteLines();
for (int i=0; i<2; i++) {
ObjectCreate("HLine "+i, OBJ_HLINE, 0, 0,0);
}

for (i=0; i<NumberOfDays; i++) {
CreateLines("upLine "+i, indicator_color1);
CreateLines("dnLine "+i, indicator_color2);
}
}

//+------------------------------------------------------------------+
//| CreateLine-Objekte |
Parameter: //|
//| no - Zeilenname ||
//| cl - Linienfarbe |
//+------------------------------------------------------------------+
void CreateLines(string no, color cl) {
ObjectCreate(no, OBJ_TREND, 0, 0,0, 0,0);
ObjectSet(no, OBJPROP_STYLE, STYLE_SOLID);
ObjectSet(no, OBJPROP_WIDTH, 1);
ObjectSet(no, OBJPROP_COLOR, cl);
ObjectSet(no, OBJPROP_RAY, False);
}

//+------------------------------------------------------------------+
//| Benutzerdefinierte Indikator-Deinitialisierungsfunktion |
//+------------------------------------------------------------------+
void deinit() {
DeleteLines();
Kommentar(");
}

//+------------------------------------------------------------------+
//| Horizontale Linien löschen.
//+------------------------------------------------------------------+
void DeleteLines() {
for (int i=0; i<2; i++) {
ObjectDelete("HLine "+i);
}

for (i=0; i<NumberOfDays; i++) {
ObjectDelete("upLine "+i);
ObjectDelete("dnLine "+i);
}
}

//+------------------------------------------------------------------+
//| Benutzerdefinierte Indikator-Iterationsfunktion |
//+------------------------------------------------------------------+
void start() {
datetime t1, t2, tt;
double p1, p2;
int b1, b2; sd=0;

t1=StrToTime(TimeToStr(CurTime(), TIME_DATE)+" 00:00");
t2=StrToTime(TimeToStr(CurTime(), TIME_DATE)+""+CheckTime);
b1=iBarShift(NULL, 0, t1);
b2=iBarShift(NULL, 0, t2);
p1=High[Highest(NULL, 0, MODE_HIGH, b1-b2+1, b2)];
p2=Low[Niedrigste(NULL, 0, MODE_LOW, b1-b2+1, b2)];

SetHLine(0, p1);
SetHLine(1, p2);

if (ShowHistory) {
dt=decDateTradeDay(CurTime());
for (int i=0; i<NumberOfDays; i++) {
DrawLines(dt, i);
dt=decDateTradeDay(dt);
while (TimeDayOfWeek(dt)<1 || TimeDayOfWeek(dt)>5) dt=decDateTradeDay(dt);
}
}

if (ShowComment) Comment("CheckTime="+CheckTime);
}

//+------------------------------------------------------------------+
//| Legen Sie die Details der horizontalen Linie des aktuellen Tages fest.
//+------------------------------------------------------------------+
void SetHLine(int nl, double pp) {
Farbe cl;

if (pp!=EMPTY_VALUE) {
Schalter (nl) {
Fall 0: cl=indicator_color1; break;
Fall 1: cl=indicator_color2; break;
}
ObjectSet("HLine "+nl, OBJPROP_COLOR, cl);
ObjectSet("HLine "+nl, OBJPROP_PRICE1, pp);
ObjectSet("HLine "+nl, OBJPROP_STYLE, STYLE_DOT);
}
}

//+------------------------------------------------------------------+
//| Linien in das Diagramm einzeichnen
Parameter: //|
//| dt - Datum des Handelstages |
nd - Nummer des Tages (für die Nummerierung von Objekten) //|
//+------------------------------------------------------------------+
void DrawLines(datetime dt, int nd) {
datetime t1, t2;
double p1, p2;
int b1, b2;

t1=StrToTime(TimeToStr(dt, TIME_DATE)+" 00:00");
t2=StrToTime(TimeToStr(dt, TIME_DATE)+""+CheckTime);
b1=iBarShift(NULL, 0, t1);
b2=iBarShift(NULL, 0, t2);
p1=High[Highest(NULL, 0, MODE_HIGH, b1-b2+1, b2)];
p2=Low[Niedrigste(NULL, 0, MODE_LOW, b1-b2+1, b2)];

ObjectSet("upLine "+nd, OBJPROP_TIME1, t1);
ObjectSet("upLine "+nd, OBJPROP_PRICE1, p1);
ObjectSet("upLine "+nd, OBJPROP_TIME2, t2);
ObjectSet("upLine "+nd, OBJPROP_PRICE2, p1);

ObjectSet("dnLine "+nd, OBJPROP_TIME1, t1);
ObjectSet("dnLine "+nd, OBJPROP_PRICE1, p2);
ObjectSet("dnLine "+nd, OBJPROP_TIME2, t2);
ObjectSet("dnLine "+nd, OBJPROP_PRICE2, p2);
}

//+------------------------------------------------------------------+
//| Datum um einen Handelstag verringern |
Parameter: //|
//| dt - Datum des Handelstages |
//+------------------------------------------------------------------+
datetime decDateTradeDay(datetime dt) {
int ty=ZeitJahr(dt);
int tm=TimeMonth(dt);
int td=TimeDay(dt);
int th=ZeitStunde(dt);
int ti=ZeitMinute(dt);

td--;
wenn (td==0) {
tm--;
wenn (tm==0) {
Ty..;
tm=12;
}
if (tm==1 || tm==3 || tm==5 || tm==7 || tm==8 || tm==10 || tm==12) td=31;
if (tm==2) if (MathMod(ty, 4)==0) td=29; sonst td=28;
if (tm==4 || tm==6 || tm==9 || tm==11) td=30;
}
return(StrToTime(ty+"."+tm+"."+td+" "+th+":"+ti));
}
//+------------------------------------------------------------------+

 
Igor, hallo! Es gibt zwei Experten (Experte1 und Experte2) Experte1 hat eine Datei, in die er Daten von jeder neuen Zeile schreibt. Expert2 verfügt über einen Wert, der mit dem Höchstwert in der Datei zu vergleichen ist. Bitte helfen Sie mir, diese maximale Zahl herauszufinden.
 
Milka писал(а) >>
Hallo Igor, es gibt zwei Expert Advisors (Expert1 und Expert2). Expert1 hat eine Datei, in die er Daten von jeder neuen Zeile schreibt. Expert2 hat einen Wert, der mit dem Maximalwert in der Datei zu vergleichen ist. Bitte helfen Sie mir, diese maximale Zahl herauszufinden.

In Expert 2 laden Sie alle Zahlen in ein Array und verwenden dann ArrayMaximum().

 
KimIV >> :

In Expert 2 laden Sie alle Zahlen in ein Array und verwenden dann ArrayMaximum().

Ich kann die Daten einfach nicht in ein Array laden

 
Milka писал(а) >>

Ich habe Probleme beim Laden von Daten in ein Array.

Sehen Sie sich meine Array-Funktionen in diesem Thread an. Die Beispiele sollen Arrays mit Daten füllen.

 

Igor, hallo!

Wenn ich eine Linie in einem Diagramm erstelle (z.B. ObjectCreate(tLine,OBJ_TREND,0,Time[3],Low[3],Time[1],Low[1]), zeichnet die Plattform einen DRIVE von unendlicher Länge, während das Tutorial sagt - ein TREAD! Ich kann nicht herausfinden, wie ich OBJ_TREND in ein Segment mit der richtigen Länge verwandeln kann. Eine manuelle Umwandlung aller Strahlen oder ein Trick (sozusagen ein Dreieck zeichnen) scheint nicht in Frage zu kommen. Können Sie mir einen Tipp geben...

 
alexpert007 писал(а) >>

Igor, hallo!

Wenn ich eine Linie in einem Diagramm erstelle (z.B. ObjectCreate(tLine,OBJ_TREND,0,Time[3],Low[3],Time[1],Low[1]), zeichnet die Plattform einen DRIVE von unendlicher Länge, während das Tutorial sagt - ein TREAD! Ich kann nicht herausfinden, wie ich OBJ_TREND in ein Segment mit der richtigen Länge verwandeln kann. Eine manuelle Umwandlung aller Strahlen oder ein Trick (sozusagen ein Dreieck zeichnen) scheint nicht in Frage zu kommen. Ein Hinweis...

Verwenden Sie ObjectSet(tLine, OBJPROP_RAY, False).

 

Hallo Igor,

Ich habe bereits die Frage nach der teilweisen Schließung von Positionen und insbesondere nach dem Fehler 131 (S. 49-50 auth.6232) gestellt. Es ist kein Problem, Positionen teilweise zu schließen, aber der Fehler 131 im Log erlaubt es mir nicht, den EA weiter zu schreiben. Ich habe einen Link zu Ihrer Funktion "Ein Drittel einer Position schließen" im Zweig "Gibt es eine fertige Funktion zum teilweisen Schließen einer Position" gefunden, aber ich habe weder die angegebene Funktion hier, in diesem Zweig, noch Ihre Antwort auf die Frage von 6232 gefunden. Die Antwort (S.50) half, das Problem teilweise zu lösen. Das Protokoll erzeugte keinen Fehler, aber ein Nebeneffekt trat auf - die erste offene Position wurde nicht wie erforderlich geschlossen.

Zum Vergleich: Das erste Diagramm schloss sich "wie es sein sollte", aber mit 131 Fehlern konstant:

und ein Diagramm ohne Fehler, aber mit falscher Schließung der ersten (und aus irgendeinem Grund nur der ersten) offenen Position:

 

Der abschließende Code sah wie folgt aus:

Dateien:
codv1.mq4  8 kb
Grund der Beschwerde: