Wie programmiert man? - Seite 257

 

Schauen Sie sich die Zeitfunktionen in der Metatrader-Hilfe an und versuchen Sie dann etwas wie das Folgende

if (TimeHour(Time[0]) TradeHourStop)

{

Comment("Handel ausgesetzt - außerhalb der Handelszeiten");

return(false);

}

wobei TimeHourStart und Stop von Ihnen gesetzte externe Variablen sind. Mit return(false); wird die Startfunktion ohne weitere Verarbeitung beendet.

Viel Glück!

 

Danke für die schnelle Antwort, Tzuman.

Leider ist meine MT4-Programmierung im Moment auf einen Online-EA-Builder beschränkt.

Das ist aber genau das, wonach ich gesucht habe!

 

Wie man die Konfiguration von Textfarbe und Schriftgröße von Kommentaren...

Hallo zusammen,

Ich arbeite an einem EA und bin nur ein Anfänger in der Programmierung...

Und ich habe eine allgemeine Frage, wie man die Schriftgröße und Textfarbe der Kommentare kodiert und vom Benutzer konfigurierbar macht. Welche externen Variablen muss ich erstellen? Und wie programmiere ich das?

Ich weiß, wie man die Kommentarfunktion verwendet, zum Beispiel so:

if(TextOnScreen == true) Comment("Dieser Text erscheint auf dem Bildschirm ");

Aber wie kann ich es so programmieren, dass der Benutzer die Schriftgröße des Textes, der auf dem Bildschirm erscheint, ändern kann, und wie kann ich auch die Textfarbe dieses Textes ändern, indem ich die Einstellung in den Optionen des EA ändere?

Kann mir jemand mit ein paar Zeilen Code helfen? Ich bin Ihnen sehr dankbar.

Ich danke Ihnen vielmals.

Johan

 
korthouj:
Hallo zusammen,

Ich arbeite an einem EA und ich bin nur ein Anfänger Programmierer...

Und ich habe eine allgemeine Frage, wie ich die Schriftgröße und Textfarbe der Kommentare kodiere und vom Benutzer konfigurierbar mache. Welche externen Variablen muss ich erstellen? Und wie programmiere ich das?

Ich weiß, wie man die Kommentarfunktion verwendet, zum Beispiel so:

if(TextOnScreen == true) Comment("Dieser Text erscheint auf dem Bildschirm ");

Aber wie kann ich es so programmieren, dass der Benutzer die Schriftgröße des Textes, der auf dem Bildschirm erscheint, ändern kann, und wie kann ich auch die Textfarbe dieses Textes ändern, indem ich die Einstellung in den Optionen des EA ändere?

Kann mir jemand mit ein paar Zeilen Code helfen? Ich bin Ihnen sehr dankbar.

Ich danke Ihnen vielmals.

Johan

Sie müssen grafische Objekte wie zum Beispiel Tabellen verwenden. Wie man das macht, kann man leicht im Handbuch nachlesen.

 
korthouj:
Hallo zusammen,

Ich arbeite an einem EA und ich bin nur ein Anfänger Programmierer...

Und ich habe eine generelle Frage, wie ich die Schriftgröße und Textfarbe der Kommentare kodiere und vom Benutzer konfigurierbar mache. Welche externen Variablen muss ich erstellen? Und wie programmiere ich das?

Ich weiß, wie man die Kommentarfunktion verwendet, zum Beispiel so:

if(TextOnScreen == true) Comment("Dieser Text erscheint auf dem Bildschirm ");

Aber wie kann ich es so programmieren, dass der Benutzer die Schriftgröße des Textes, der auf dem Bildschirm erscheint, ändern kann, und wie kann ich auch die Textfarbe dieses Textes ändern, indem ich die Einstellung in den Optionen des EA ändere?

Kann mir jemand mit ein paar Zeilen Code helfen? Ich bin Ihnen sehr dankbar.

Ich danke Ihnen vielmals.

Johan

Johan,

Studieren Sie den beigefügten Indikator.

Ein Teil des Codes ist für den Fall, dass eine Vorlage verwendet wird.

Ich habe das auf die harte Tour herausgefunden, als der Text eines Paares aufgrund der Vorlage auf dem Chart eines anderen Paares erschien.

Wenn mehr Textzeilen benötigt werden, sollten Sie in der Lage sein, das herauszufinden.

Wenn nicht, posten Sie erneut und ich zeige Ihnen ein Beispiel mit mehreren Zeilen.

Robert

Dateien:
 

warum schließen, um fehlschlagen und wie zu begrenzen, um n.o.?

Ich bin ein Neuling in MQL4, gerade getestet ein EA von mir, aber es sieht aus wie konnte nicht schließen, um, und es würde öffnen, um in jedem bar bis freemargin werden 0, dann würde es Kraft stoppen alle Aufträge. Ich weiß nicht, wie man offene Bestellung NO zu begrenzen. Wer könnte mir sagen, TKS zu schätzen!

der Code wie folgt:

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

//| Moving Average.mq4 |

//| Urheberrecht ?2005, MetaQuotes Software Corp. |

//| TeamWox Groupware / MetaQuotes Software Corp. |

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

#define MAGICMA 20110309

extern double Lots = 1;

extern double MaximalesRisiko = 0.02;

extern double DecreaseFactor = 10;

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

//| Offene Positionen berechnen |

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

int CalculateCurrentOrders(string symbol)

{

int buys=0,sells=0;

//----

for(int i=0;i<OrdersTotal();i++)

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;

if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)

{

if(OrderType()==OP_BUY) kauft++;

if(OrderType()==OP_SELL) sells++;

}

}

//---- Auftragsvolumen zurückgeben

if(buys>0) return(buys);

sonst return(sells);

}

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

//| Berechnung der optimalen Losgröße |

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

double LotsOptimized()

{

double lot=Lots;

int orders=HistoryTotal(); // Summe der historischen Aufträge

int losses=0; // Anzahl der Verlustaufträge ohne Pause

//---- Losgröße auswählen

lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/100.0,1);

Print(MarketInfo(Symbol(), MODE_LOTSIZE));

Print(MarketInfo(Symbol(), MODE_MINLOT));

Print(MarketInfo(Symbol(), MODE_LOTSTEP));

Print(MarketInfo(Symbol(), MODE_MAXLOT));

//---- Anzahl der Verlustaufträge ohne Pause berechnen

if(DecreaseFactor>0)

{

for(int i=Orders-1;i>=0;i--)

{

if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) { Print("Fehler in der Historie!"); break; }

if(OrderSymbol()!=Symbol() || OrderType()>OP_SELL) continue;

//----

if(OrderProfit()>0) break;

if(OrderGewinn()<0) Verluste++;

}

if(Verluste>1) lot=NormalizeDouble(lot-lot*Verluste/DecreaseFactor,1);

//das ist ein kluges technisches Design, aber Verluste stehen für entgangenen Gewinn, nicht für Geld, was zu Problemen führen kann.

//Ändern Sie sie wie folgt: kontofreie Marge()-Bestellgewinn()

}

//---- return lot size

if(lot<1) lot=1;

return(lot);

}

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

//| Prüfung auf offene Orderbedingungen |

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

void CheckForOpen()

{

double m1,m2,m3,m4,ticket1,ticket2;

int res;

//---- nur für die ersten Ticks des neuen Balkens handeln

if(Volumen[0]>1) return;

//---- gleitenden Durchschnitt ermitteln

m1=iMA(NULL,0,21,0,MODE_SMA,PRICE_CLOSE,0);

m2=iMA(NULL,0,55,0,MODE_SMA,PREIS_SCHLIESSEN,0);

m3=iMA(NULL,0,21,0,MODE_SMA,PREIS_SCHLIESSEN,1);

m4=iMA(NULL,0,55,0,MODE_SMA,PREIS_SCHLIESSEN,1);

//---- Verkaufsbedingungen

if (m1<m3-0.0002)

{

ticket1=OrderSend(Symbol(),OP_SELL,1,Bid,5,Ask+105*Point,0, "Meine Order #1",MAGICMA,0,Red);

zurück;

}

if (m2<m4-0.0001)

{

ticket2=OrderSend(Symbol(),OP_SELL,1,Bid,5,Ask+105*Point,0, "Mein Auftrag #2",MAGICMA,0,Gelb);

zurück;

}

//---- Kaufbedingungen

wenn ( m1>m3+0,0002)

{

ticket1=OrderSend(Symbol(),OP_BUY,1,Ask,5,Bid-105*Point,0, "Meine Order #1",MAGICMA,0,Blue);

zurück;

}

if (m2>m4+0,0001)

{

ticket2=OrderSend(Symbol(),OP_BUY,1,Ask,5,Bid-105*Point,0, "Mein Auftrag #2",MAGICMA,0,Grün);

zurück;

}

//----

}

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

//| Prüfung auf Close Order Bedingungen |

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

void CheckForClose()

{

double m1,m2,m3,m4;

//---- nur für die ersten Ticks des neuen Balkens handeln

if(Volumen[0]>1) return;

//---- gleitenden Durchschnitt ermitteln

m1=iMA(NULL,0,21,0,MODE_SMA,PRICE_CLOSE,0);

m2=iMA(NULL,0,55,0,MODE_SMA,PREIS_SCHLIESSEN,0);

m3=iMA(NULL,0,21,0,MODE_SMA,PREIS_SCHLIESSEN,1);

m4=iMA(NULL,0,55,0,MODE_SMA,PREIS_SCHLIESSEN,1);

//----

for(int i=0;i<OrdersTotal();i++)

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;

if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) continue;

//---- Auftragsart prüfen

if(OrderType()==OP_BUY)

{

if(m1<m3+0.0002)

{

OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet);

break;

}

if(m2<m4+0,0001)

{

OrderClose(OrderTicket(),OrderLots(),Bid,3,Weiß);

break;

}

}

if(OrderType()==OP_SELL)

{

if(m1>m3-0,0002)

{

OrderClose(OrderTicket(),OrderLots(),Ask,3,Tan);

break;

}

if(m2<m4-0,0001)

{

OrderClose(OrderTicket(),OrderLots(),Ask,3,Salmon);

break;

}

}

}

//----

}

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

//| Startfunktion |

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

void start()

{

//---- prüft auf Historie und Handel

if(Bars<55 || IsTradeAllowed()==false) return;

//---- Berechnung der offenen Aufträge nach aktuellem Symbol

if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();

sonst CheckForClose();

//----

}

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

 

Windows-Version erkennen

Hat jemand eine einfache Möglichkeit, um herauszufinden, welche Version von Windows MT4 läuft nur mit einem Windows-API-Aufruf.

Kann mir jemand sagen, wie man das macht:

#import "kernel32.dll"

int GWINAPI GetVersionEA(_inout LPOSVERSIONINFO lpVersionInfo);

#import

GetVersionEx Funktion (Windows)

Dankeschön

 

Hilfe wird benötigt. Kleine Anpassung an meinen CCI-Divergenz EA

Ich habe einen CCI Divergence EA, der einen benutzerdefinierten CCI Divergence Indicator im Indicators-Ordner in MT4 verwendet, um zu bestimmen, wann ein Handel stattfinden soll.

Ich möchte stattdessen einen benutzerdefinierten Stochastik-Divergenz-Indikator (den ich habe) verwenden.

Ich weiß nicht, wie ich den EA-Code so ändern kann, dass er auf den Stochastics-Divergence-Indikator im Indikatorenordner verweist.

In den EA-Eingaben denke ich, dass ich ersetzen muss:

extern int CCI_Period = 10;

durch

extern int Stoch_K = 5;

extern int Stoch_D = 3;

extern int Stoch_Slowing = 3;

Im Hauptteil des Codes habe ich den Bereich gefunden, der auf den benutzerdefinierten CCI-Divergenzindikator im Ordner Indicators verweist:

dUp = iCustom(Symbol(), 0, "CCI_Divergence_Indicator", "", CCI_Period, 9, "", false, false, false, 0, 2);

dDn = iCustom(Symbol(), 0, "CCI_Divergence_Indicator", "", CCI_Period, 9, "", false, false, false, 1, 2);

Ich weiß, dass ich "CCI_Divergence_Indicator" in "Stochastics_Divergence_Indicator" ändern muss, was der Name des benutzerdefinierten Stochastics-Divergenzindikators im Ordner Indicators ist. Und ich muss die CCI_Periode und 9 entfernen.

Aber ich weiß nicht, wie ich Stoch_K, Stoch_D und Stoch_Slowing in diesen Teil des Codes einfügen kann.

Ich habe versucht, sie selbst zu ändern, aber dann lässt sich der EA nicht öffnen.

Weiß jemand, wie man diesen Teil des Codes kodiert, damit der Stochastik-Divergenz-Indikator den cci-Divergenz-Indikator ersetzen kann?

Ich habe einen Programmierer für die Erstellung des EAs bezahlt, aber er ist mit anderen Kundenprojekten sehr beschäftigt. Wenn es also um kleinere Änderungen/Fixes geht, hat er keine Zeit, sie für mich zu machen - zumindest nicht sofort. Das ist der Grund, warum ich hier frage.

Der CCI-Divergenzindikator hat viel zu viele Fehlsignale. Der Stochastik-Divergenz-Indikator ist viel besser. Deshalb möchte ich den Wechsel vollziehen.

Vielen Dank im Voraus.

 

Bitte um Hilfe

Ich habe eine Codezeile, die mich warnt, wenn der Preis von 1 bar (sei es 1m 5m 189m) bewegt 200 Pips IN 1 BAR. aber ich kann nicht für das Leben von mir herausfinden, wie man es zu alarmieren NUR bestimmte Richtung. hier ist es.

if(High[0]-Low[0]>200*Point)PlaySound("Alert.wav"); //Das funktioniert gut.

Aber ich möchte in der Lage sein, zwischen einem 200 Pip UP und 200 Pip DOWN zu unterscheiden. Ich habe gelesen, in Foren gefragt, in Chatrooms gewesen, und fuhr mich verrückt für 3 Tage. im über es bitte für die Liebe zu Gott helfen Sie mir

 
if(High[0]-Low[0]>200*Point && Close[0]>Open[0])PlaySound("Up.wav");

if(High[0]-Low[0]>200*Point && Close[0]<Open[0])PlaySound("Down.wav");[/CODE]

Actually, you should rather look at highs and lows of two last bars and compare close to close, to ensure gaps are included, too:

[CODE]if(Mathmax(High[0],High[1])-Mathmin(Low[0],Low[1])>200*Point && Close[0]>Close[1])PlaySound("Up.wav");

if(Mathmax(High[0],High[1])-Mathmin(Low[0],Low[1])>200*Point && Close[0]<Close[1])PlaySound("Down.wav");