Wie programmiert man? - Seite 151

 
luxinterior:
Verwenden Sie die Include-Datei OrderReliable. Lux

scheint ein bisschen zu fehlen für die OrderSendReliable Funktion haben Sie eine neuere Version?

 

Wie man Zeit in Berechnungen verwendet

Ich bin neu in MQL4 und war gerade versuchen, zu sehen, wenn ich eine einfache EA, die einige grundlegende Funktionen verwenden würde machen könnte. Ich weiß, C++ gut, aber muss schrecklich an MQL4 sein, weil ich etwas ist worng mit diesem Code und ich denke, es hat mit der Zeit-Funktionen oder möglicherweise die Kauf/Verkauf-Funktionen zu tun, hier ist der Code: ...und nebenbei bemerkt wurde dies nicht entwickelt, um Geld zu verdienen, sondern um die Funktionen zu testen Danke!

int start()

{

//----

double currenttimeN, currentvalue;

double timeM = TimeMinute (TimeCurrent());

double timeH = TimeHour(TimeCurrent());

currenttimeN = (timeH / 24) + (timeM / 1440);//gibt die Tageszeit in Prozent oder 1 (1 = ein ganzer Tag), also immer kleiner als 1

currentvalue = Ask;

wenn (currentvalue > currenttimeN){

OrderSend(Symbol(),OP_SELL,1,Ask,3,Ask-25*Point,Ask+25*Point, "Mein Auftrag #2",16384,0,Green);

}

/* KAUFBEFEHL */

else if (currentvalue < currenttimeN){

OrderSend(Symbol(),OP_BUY,1,Ask,3,Ask-25*Point,Ask+25*Point, "Meine Order #2",16384,0,Green);

}

//----

return(0);

}

 

...................

 

Falscher String:

currenttimeN = (timeH / 24) + (timeM / 1440);//gives the time of day as a percent or 1 (1 = one complete day) so always less than 1[/CODE]

could be:

[CODE]currenttimeN = (timeH *60 + timeM) / 1440;

Wie kann man Tageszeit und Preis vergleichen?

 

kaufen und verkaufen zur gleichen Zeit

Kann mir jemand helfen, so zu programmieren, dass ich gleichzeitig kaufen und verkaufen kann...ein paar Skripte oder so...

Ich wäre dankbar dafür...

Beispiel:

if (Stoch1>=Stoch2)

{

ticket=OrderSend(Symbol(), OP_BUY, Lots, Ask, 3, Ask-Stoploss*Point, Ask+TakeProfit*Point, "-", 0, 0, Green);

ticket=OrderSend(Symbol(), OP_SELL, Lots, Bid, 3, Ask-Stoploss*Point, Bid-TakeProfit*Point,"-", 0, 0, Rot);

}

Das Problem ist, dass es nur kaufen will..aber ich brauchte es, um beide Aufträge auszuführen...danke...

 
kk81:
Kann mir jemand helfen, so zu programmieren, dass ich gleichzeitig kaufen und verkaufen kann...ein paar Skripte oder so...

Ich weiß es zu schätzen...

Beispiel:

if (Stoch1>=Stoch2)

{

ticket=OrderSend(Symbol(), OP_BUY, Lots, Ask, 3, Ask-Stoploss*Point, Ask+TakeProfit*Point, "-", 0, 0, Green);

ticket=OrderSend(Symbol(), OP_SELL, Lots, Bid, 3, Ask-Stoploss*Point, Bid-TakeProfit*Point, "-", 0, 0, Red);

}

Das Problem ist, dass es nur kaufen wird...aber ich ned es, um beide Aufträge auszuführen...danke...

https://www.mql5.com/en/forum/177583/page37

 

Wie erhält man den OrderClose-Rückgabepreis?

Ich möchte wissen, zu welchem Preis die Order geschlossen wurde

Dateien:
closeorder.jpg  62 kb
 

Forex Freiheit Bar

Hallo

vielen Dank an alle Freunde, speziell Roger09

Ich möchte Experte (automatischer Handel) ForexFreedomBars .

wenn das Quadrat 5m, 15m, 30m, 1H rot ist, senden Sie die Bestellung VERKAUF durch 10-20 TP

wenn das Quadrat 5m, 15m, 30m, 1H blau ist, senden Sie die Order KAUFEN um 10-20 TP

(TP, SL, lot, maxtrade) Fähigkeit zu ändern haben

Bitte helfen Sie mir.

//+------------------------------------------------------------------+

#The Forex Freedom Bars

//|

//+------------------------------------------------------------------+

#property copyright "Programmiert von Eli hayun"

#property indicator_separate_window

#property indikator_minimum -0.5

//#property indicator_maximum 5

#Eigenschaft indicator_buffers 8

#eigenschaft indicator_color1 Rot

#property indicator_color2 DodgerBlue

#eigenschaft indicator_color3 Rot

#Eigenschaft indicator_color4 Zwergblau

#Eigenschaft indicator_color5 Rot

#Eigenschaft indicator_color6 DodgerBlue

#Eigenschaft indicator_color7 Rot

#Eigenschaft indicator_color8 DodgerBlue

//---- Puffer

double buf4_up[];

double buf4_down[];

double buf3_up[];

double buf3_down[];

double buf2_up[];

double buf2_down[];

double buf1_up[];

double buf1_down[];

extern double Gap = 1; // Lücke zwischen den Balkenzeilen

extern int Zeitraum_1 = PERIOD_M5;//M15

extern int Zeitraum_2 = PERIOD_M15;//M30

extern int Zeitraum_3 = PERIOD_M30;//H1

extern int Zeitraum_4 = PERIOD_H1;//H4

extern int cci_1 = 2;/50

extern int cci_2 = 2;//14

extern int cci_3 = 2;

extern int cci_4 = 2;

extern int StopLoss=100;

extern int TakeProfit=100;

extern double Lots=0.1;

extern bool AutoDisplay = false;

string Kurzname = "";

bool firstTime = true;

int UniqueNum = 228;

//+------------------------------------------------------------------+

//| Benutzerdefinierte Indikator-Initialisierungsfunktion

//+------------------------------------------------------------------+

int init()

{

SetAutoDisplay();

shortname = "# Forex Freedom("+Period_1+", "+Period_2+", "+Period_3+", "+Period_4+")";

firstTime = true;

IndicatorShortName(Kurzname);

//---- Indikatoren

SetIndexStyle(0,DRAW_ARROW);

SetIndexPfeil(0,110);

SetIndexPuffer(0,buf4_up);

SetIndexEmptyValue(0,0.0);

SetIndexStyle(1,DRAW_ARROW);

SetIndexPfeil(1,110);

SetIndexBuffer(1,buf4_down);

SetIndexEmptyValue(1,0.0);

SetIndexStyle(2,DRAW_ARROW);

SetIndexPfeil(2,110);

SetIndexBuffer(2,buf3_up);

SetIndexEmptyValue(2,0.0);

SetIndexStyle(3,DRAW_ARROW);

SetIndexPfeil(3,110);

SetIndexBuffer(3,buf3_down);

SetIndexEmptyValue(3,0.0);

SetIndexStyle(4,DRAW_ARROW);

SetIndexPfeil(4,110);

SetIndexBuffer(4,buf2_up);

SetIndexEmptyValue(4,0.0);

SetIndexStyle(5,DRAW_ARROW);

SetIndexPfeil(5,110);

SetIndexBuffer(5,buf2_down);

SetIndexEmptyValue(5,0.0);

SetIndexStyle(6,DRAW_ARROW);

SetIndexPfeil(6,110);

SetIndexBuffer(6,buf1_up);

SetIndexEmptyValue(6,0.0);

SetIndexStyle(7,DRAW_ARROW);

SetIndexPfeil(7,110);

SetIndexBuffer(7,buf1_down);

SetIndexEmptyValue(7,0.0);

//----

return(0);

}

//+------------------------------------------------------------------+

//| Benutzerdefinierte Funktion zur Deinitialisierung des Indikators |

//+------------------------------------------------------------------+

int deinit()

{

//----

SetAutoDisplay();

shortname = "# Forex Freedom("+Period_1+", "+Period_2+", "+Period_3+", "+Period_4+")";

firstTime = true;

//----

return(0);

}

//+------------------------------------------------------------------+

//| Benutzerdefinierte Indikator-Iterationsfunktion |

//+------------------------------------------------------------------+

int start()

{

int counted_bars=IndicatorCounted();

int i=0, y5m=0, y1h=0, y30m=0, y15m=0, yy;

int limit=Balken-gezählt_Balken;

datetime TimeArray_1H[], TimeArray_30M[], TimeArray_15M[], TimeArray_5M[];

//----

if (firstTime || NewBar())

{

firstTime = false;

int win = UniqueNum; // WindowFind(Kurzname);

double dif = Zeit[0] - Zeit[1];

for (int ii=ObjectsTotal()-1; ii>-1; ii--)

{

if (StringFind(ObjectName(ii), "FF_"+win+"_") >= 0)

ObjectDelete(ObjectName(ii));

sonst

ii=-1;

}

double shift = 0.2;

for (ii=0; ii<4; ii++)

{

string txt = "??";

double gp;

switch (ii)

{

case 0: txt = tf2txt(Zeitraum_1); gp = 1 + shift; break;

Fall 1: txt = tf2txt(Periode_2); gp = 1 + Gap + shift; break;

Fall 2: txt = tf2txt(Periode_3); gp = 1 + Lücke*2 + Verschiebung; break;

Fall 3: txt = tf2txt(Periode_4); gp = 1 + Lücke*3 + Verschiebung; break;

}

string name = "FF_"+win+"_"+ii+"_"+txt;

ObjectCreate(name, OBJ_TEXT, WindowFind(Kurzname), iTime(NULL,0,0)+dif*3, gp);

ObjectSetText(name, txt,8, "Arial", Silver);

}

}

ArrayCopySeries(TimeArray_1H,MODE_TIME,Symbol(),Period_4);

ArrayCopySeries(TimeArray_30M,MODE_TIME,Symbol(),Periode_3);

ArrayCopySeries(ZeitArray_15M,MODUS_ZEIT,Symbol(),Zeitraum_2);

ArrayCopySeries(TimeArray_5M,MODE_TIME,Symbol(),Periode_1);

for(i=0, y5m=0, y1h=0, y30m=0, y15m=0;i<limit;i++)

{

if (Zeit<TimeArray_5M[y5m]) y5m++;

if (Zeit<TimeArray_1H[y1h]) y1h++;

if (Zeit<TimeArray_30M[y30m]) y30m++;

if (Zeit<TimeArray_15M[y15m]) y15m++;

int cci_n = cci_1;

for (int tf = 0; tf < 4; tf++)

{

int prd;

switch (tf)

{

Fall 0: prd = Periode_1; cci_n = cci_1; yy = y5m; break;

Fall 1: prd = Periode_2; cci_n = cci_2; yy = y15m; break;

Fall 2: prd = Periode_3; cci_n = cci_3; yy = y30m; break;

Fall 3: prd = Periode_4; cci_n = cci_4; yy = y1h; break;

}

double cci = iCCI(NULL, prd, cci_n,PRICE_TYPICAL, yy);

double dUp = EMPTY_VALUE; // iCustom(NULL, prd, "SuperTrend", false, 1, yy);

double dDn = EMPTY_VALUE; //iCustom(NULL, prd, "SuperTrend", false, 0, yy);

wenn (cci < 0) dUp = 1; sonst dDn = 1;

switch (tf)

{

Fall 0: if (dUp == EMPTY_VALUE) buf1_down = 1; sonst buf1_up = 1; break;

Fall 1: if (dUp == EMPTY_VALUE) buf2_down = 1 + Gap * 1; sonst buf2_up = 1 + Gap * 1; break;

Fall 2: if (dUp == EMPTY_VALUE) buf3_down = 1 + Gap * 2; sonst buf3_up = 1 + Gap * 2; break;

Fall 3: if (dUp == EMPTY_VALUE) buf4_down = 1 + Gap * 3; sonst buf4_up = 1 + Gap * 3; break;

}

if (NewBar())

{

string sDir = "";

if (buf1_oben[0] + buf2_oben[0] + buf3_oben[0] + buf4_oben[0] == 4)

sDir = "Oben";

if (buf1_unten[0] + buf2_unten[0] + buf3_unten[0] + buf4_unten[0] == 4)

sDir = "Nach unten";

if (sDir != "")

{

PlaySound("alert1.wav");

Print("Forex freeway - Richtung ",sDir);

}

}

}

}

if (buf1_up[0] + buf2_up[0] + buf3_up[0] + buf4_up[0] == 4)

OrderSend(Symbol(),OP_BUY,Lots,Ask,3,StopLoss ,TakeProfit); sonst

return(0);

}

//+------------------------------------------------------------------+

string tf2txt(int tf)

{

if (tf == PERIOD_M1) return("M1");

if (tf == PERIOD_M5) return("M5");

wenn (tf == PERIOD_M15) return("M15");

wenn (tf == PERIOD_M30) return("M30");

wenn (tf == PERIOD_H1) return("H1");

wenn (tf == PERIOD_H4) return("H4");

wenn (tf == PERIOD_D1) return("D1");

wenn (tf == PERIOD_W1) return("W1");

wenn (tf == PERIOD_MN1) return("MN1");

return("??");

}

void SetValues(int p1, int p2, int p3, int p4)

{

Zeitraum_1 = p1; Zeitraum_2 = p2; Zeitraum_3 = p3; Zeitraum_4 = p4;

}

void SetAutoDisplay()

{

if (AutoDisplay)

{

switch (Zeitraum())

{

case PERIOD_M1 : SetValues(PERIOD_M1, PERIOD_M5, PERIOD_M15,PERIOD_M30); break;

case PERIOD_M5 : SetValues(PERIOD_M5, PERIOD_M15,PERIOD_M30,PERIOD_H1); break;

case PERIOD_M15 : SetValues(PERIOD_M5, PERIOD_M15,PERIOD_M30,PERIOD_H1); break;

case PERIOD_M30 : SetValues(PERIOD_M5, PERIOD_M15,PERIOD_M30, PERIOD_H1); break;

case PERIOD_H1 : SetValues(PERIOD_M15, PERIOD_M30,PERIOD_H1, PERIOD_H4); break;

case PERIOD_H4 : SetValues(PERIOD_M30, PERIOD_H1, PERIOD_H4, PERIOD_D1); break;

case PERIOD_D1 : SetValues(PERIOD_H1, PERIOD_H4, PERIOD_D1, PERIOD_W1); break;

case PERIOD_W1 : SetValues(PERIOD_H4, PERIOD_D1, PERIOD_W1,PERIOD_MN1); break;

case PERIOD_MN1 : SetValues(PERIOD_H4, PERIOD_D1, PERIOD_W1,PERIOD_MN1); break;

}

}

}

bool NewBar()

{

static datetime dt = 0;

if (Zeit[0] != dt)

{

dt = Time[0];

return(true);

}

return(false);

}

 

Problem bei der Migration eines Indikators in einen EA als Filterfunktion

Beim Versuch, einen Teil eines Indikators als Funktion in meinem EA zu verwenden, habe ich festgestellt, dass es drei Arten von Funktionen gibt. Der erste Typ ist ein Void, der einen Prozess durchführt und 0 zurückgibt. Der zweite Typ führt Berechnungen durch und gibt ein Ergebnis zurück. Der dritte Typ erwartet, dass eine Reihe von bestimmten Werten verarbeitet wird, und gibt dann ein Ergebnis zurück.

Was kann ich tun, wenn meine Berechnungen drei Ergebnisse liefern, die auf mindestens zwei verschiedene Arten verwendet werden müssen? Diese Berechnungen müssen aus folgendem Grund in der Start()-Funktion untergebracht werden: Informationen fließen von den externen Variablen (die manuell angepasst werden können) und den globalen Variablen (die statisch bleiben, solange sie nicht neu kompiliert werden) in die verschiedenen Funktionen des EA. Die Funktion Start() ist das Gehirn des EA und holt sich die Informationen von den anderen Funktionen. Sie kann eine Reihe von Variablen an eine Funktion als Argumente dieser Funktion übergeben, wenn diese Funktion diese Variablen innerhalb ihrer ()-Klammern deklariert hat. Sie erhält dann ein Ergebnis zurück und kann weitere Variablen an eine andere Funktion übergeben, um ihren Prozess zu beenden.

Nachdem ich gelernt hatte, Variablen als Argumente an andere Funktionen zu übergeben, hatte ich gehofft, mit meiner EA-Kodierung Erfolg zu haben. Leider habe ich einen Nullteilungsfehler erzeugt, möglicherweise weil ich versucht habe, einen Wert als Argument von einer Funktion an eine andere weiterzugeben, so dass der Wert nicht dort ankam, wo er gebraucht wurde. Da er aber tatsächlich fehlte, bekam ich den Fehler der Nullteilung. Bei meiner nächsten Überarbeitung habe ich die Zwischenschritte entfernt und die Werte direkt an die Funktionen übergeben, in denen sie gebraucht wurden.

(Ich glaube nicht, dass ich mir einen Gefallen tue, wenn ich diesen Punkt meiner ersten zweimonatigen Erfahrung beim Erlernen der MQL4-Programmierung festhalte. Aber jeder, der nach "MQL4 zero divide error" googelt, wird vielleicht froh sein zu erfahren, wie ich das Problem gelöst habe).

Meine nächste EA-Revision hat den Nullteilungsfehler behoben, aber der Journal-Kommentar meines Stratagy-Testers zeigte nun einen Stapelüberlauf an. Für diejenigen, die nach "MQL4 Stack Overrun" googeln, werde ich die Ursache veröffentlichen, die ich gefunden habe. Es war ein Fehler bei der Konvertierung von Lots in ihre dezimale Entsprechung durch die Verwendung der Konstante "Points", wenn ein Preis für die Eröffnung oder Änderung eines Auftrags geändert wird.

Der letzte Tipp, den ich hier posten möchte (nach meinen ersten zwei Monaten Programmiererfahrung und mehr als 12 EA-Umschreibungen), ist ein Weg, wie ich eine schwer zu findende "ungleiche linke Paranthese"-Klammer lösen konnte. Der MetaEditor hebt Klammertext nicht farblich hervor. Wenn Sie ein AutoDesk-Produkt mit Visual LISP Editor haben, können Sie Ihre MQ4-Datei in diesem Editor öffnen und fast alle Klammerpaare in Farbe sehen. Das macht es viel einfacher, die fehlenden Klammern zu finden.

Vielen Dank an alle, die ihre Antworten in diesem Forum teilen,

Viel Spaß beim Kodieren!

 

Kann mir jemand helfen?

Außerdem möchte ich wissen, ob Metatrader-Aufträge von der Kommandozeile aus ausgeführt werden können. Oder allgemein, ob es möglich ist, externe Anwendungen mit Metatrader über eine Art API zu verbinden.

Vielen Dank

Jeff

Grund der Beschwerde: