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
Gibt es eine Möglichkeit, Optionen zur Auswahl hinzuzufügen?
Zum Beispiel,
Getrennt, Kauf, und Verkauf getrennt
Modifikation: BE alle kaufen 0, oder +1, oder +2 Pips oder verkaufen alle BE 0, 1 oder 2 Pips?
Ist das möglich?
be.mq4
Hallo Mladen ,
Kann mir bitte jemand sagen, was ich falsch mache, ich schreibe meist meine ea mit FX Gen mit Snippets und Codes mit Beispielen aus mq4 Compiler und Online-Foren.Im versucht, meine Strategie für einfacheren Handel Code, ive in der Lage, die letzte Bestellung erfolgreich mit diesem Code zu wählen.
void OpenNewTrade()
{ datetime lastTime = 0;
int lastTicket = -1; // Keine offen.
for (int i=OrdersTotal()-1; i >= 0; i--)
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == OrderId && OrderOpenTime() >= lastTime && OrderTicket() > lastTicket )
{
lastTime = OrderOpenTime();
lastTicket = OrderTicket();
if (OrderType() == OP_BUY || OrderType() == OP_SELL
&& Ask - OrderOpenPrice() >= Grid*PipValue*Point
{
{
BuyOrder();
}
}
if (OrderType() == OP_BUY || OrderType() == OP_SELL
&& OrderOpenPrice() - Bid >= Grid*PipValue*Point
{
{
SellOrder();
}
}
}
return(lastTicket);
}
sonst
Print("OrderSelect() Fehler - ", ErrorDescription(GetLastError()));
}
Können Sie sich diesen Code ansehen? Ich versuche, die älteste Bestellung zuerst zu löschen, indem ich den Zeitpunkt und das Bestellungs-Ticket verwende, z.B. wenn die geöffnete Bestellung >2 ist, wird die älteste Bestellung gelöscht.
//-------------------------------------------------------------
// Etasoft Inc. Forex EA und Script Generator Version 4.1 EA
//-------------------------------------------------------------
// Schlüsselwörter: MT4, Forex EA builder, EA erstellen, expert advisor developer
#property copyright "Copyright © 2011, Etasoft Inc. Forex EA Generator v4.1"
#property link
#include
#include
// exportierte Variablen
extern int OrderId = 1;
extern int Schlupf = 2;
extern double Lots = 0.01;
extern int MaxOrdersAllowed = 2;// op buy und op sell erlaubt
extern int Grid = 10; // Gesamtabstand in Pips zu offenen Aufträgen
extern string EAComment = "564 testing";
// lokale Variablen
double PipValue=1; // diese Variable dient der Unterstützung von 5-stelligen Brokern
bool Terminated = false;
string LF = "\n"; // zu verwenden in benutzerdefinierten oder Utility-Blöcken, in denen Zeilenvorschübe benötigt werden
int NDigits = 4; // wird meist für NormalizeDouble in Flex-Blöcken verwendet
int ObjCount = 0; // Zählung aller im Diagramm erstellten Objekte, ermöglicht die Erstellung von Objekten mit eindeutigen Namen
int aktuell = 0;
int init()
{
NDigits = Digits;
if (false) ObjectsDeleteAll(); // Löschen des Diagramms
Comment(""); // Löschen des Diagramms
}
// Expertenstart
int start()
{
if (Balken < 10)
{
Kommentar("Nicht genug Balken");
return (0);
}
if (Terminated == true)
{
Comment("EA Terminated.");
return (0);
}
OnEveryTick1();
}
void OnEveryTick1()
{
if (true == false && false) PipValue = 10;
if (true && (NDigits == 3 || NDigits == 5)) PipValue = 10;
IfOrderDoesNotExist2();
IfOrderDoesNotExist4();
MaximumOrder();
}
void IfOrderDoesNotExist2()
{
bool exists = false;
for (int i=OrdersTotal()-1; i >= 0; i--)
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderType() == OP_BUYSTOP && OrderSymbol() == Symbol() && OrderMagicNumber() == 1)
{
existiert = true;
}
}
sonst
{
Print("OrderSelect() Fehler - ", ErrorDescription(GetLastError()));
}
if (exists == false)
{
BuyPendingOrder();
}
}
void IfOrderDoesNotExist4()
{
bool exists = false;
for (int i=OrdersTotal()-1; i >= 0; i--)
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderType() == OP_SELLSTOP && OrderSymbol() == Symbol() && OrderMagicNumber() == 1)
{
existiert = true;
}
}
sonst
{
Print("OrderSelect() Fehler - ", ErrorDescription(GetLastError()));
}
if (exists == false)
{
SellPendingOrder();
}
}
void BuyPendingOrder()
{
int expire = TimeCurrent() + 60 * 0;
double price = NormalizeDouble((Ask-((Ask-Bid)/2)), NDigits) + Grid*PipValue*Point;
double SL = Preis - 0*PipValue*Point;
wenn (0 == 0) SL = 0;
double TP = Preis + 0*PipValue*Point;
wenn (0 == 0) TP = 0;
wenn (0 == 0) expire = 0;
int ticket = OrderSend(Symbol(), OP_BUYSTOP, Lots, price, Slippage, SL, TP, EAComment, OrderId, expire, Blue);
if (ticket == -1)
{
Print("OrderSend() Fehler - ", ErrorDescription(GetLastError()));
}
}
void SellPendingOrder()
{
int expire = TimeCurrent() + 60 * 0;
double price = NormalizeDouble((Bid+((Ask-Bid)/2)), NDigits) - Grid*PipValue*Point;
double SL = Preis + 0*PipValue*Point;
wenn (0 == 0) SL = 0;
double TP = Preis - 0*PipValue*Point;
wenn (0 == 0) TP = 0;
wenn (0 == 0) expire = 0;
int ticket = OrderSend(Symbol(), OP_SELLSTOP, Lots, price, Slippage, SL, TP, EAComment, OrderId, expire, Red);
if (ticket == -1)
{
Print("OrderSend() Fehler - ", ErrorDescription(GetLastError()));
}
}
void MaximumOrder()
{
if (MaxOrdersAllowed> 0)
{
OrderCount();
}
}
void OrderCount()
{
int count = 0;
for (int i=OrdersTotal()-1; i >= 0; i--)
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (AuftragSymbol() == Symbol())
if (OrderMagicNumber() == OrderId)
if (OrderType() == OP_BUY || OrderType() == OP_SELL)
{
count++;
}
}
sonst
{
Print("OrderSend() Fehler - ", ErrorDescription(GetLastError()));
}
if (Anzahl > MaxOrdersAllowed )
{
DeleteOldestOrder();
}
}
void DeleteOldestOrder()
{
datetime lastTime = 0;
int lastTicket = -1; // Keine offen.
for (int i=OrdersTotal()-1; i >= 0; i--)
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == OrderId && OrderOpenTime() < lastTime && OrderTicket() < lastTicket )
{
lastTime = OrderOpenTime();
lastTicket = OrderTicket();
if (OrderType() == OP_BUY || OrderType() == OP_SELL )
{
{
OrderClose(OrderTicket(),OrderLots(), OrderClosePrice(),Slippage,Red);
}
}
}
return(lastTicket);
}
sonst
Print("OrderSelect() Fehler - ", ErrorDescription(GetLastError()));
}
int deinit()
{
if (false) ObjectsDeleteAll();
}
Hallo Mladen ,
Kann jemand bitte sagen Sie mir, was im falsch machen, ich meist schreiben meine ea mit FX Gen mit Snippets und Codes mit Beispielen aus mq4 Compiler und online forums.Im versuchen, meine Strategie für leichteren Handel Code, ive in der Lage, die letzte Bestellung erfolgreich mit diesem Code auswählen.
void OpenNewTrade()
{ datetime lastTime = 0;
int lastTicket = -1; // Keine offen.
for (int i=OrdersTotal()-1; i >= 0; i--)
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == OrderId && OrderOpenTime() >= lastTime && OrderTicket() > lastTicket )
{
lastTime = OrderOpenTime();
lastTicket = OrderTicket();
if (OrderType() == OP_BUY || OrderType() == OP_SELL
&& Ask - OrderOpenPrice() >= Grid*PipValue*Point
{
{
BuyOrder();
}
}
if (OrderType() == OP_BUY || OrderType() == OP_SELL
&& OrderOpenPrice() - Bid >= Grid*PipValue*Point
{
{
SellOrder();
}
}
}
return(lastTicket);
}
sonst
Print("OrderSelect() Fehler - ", ErrorDescription(GetLastError()));
}
Können Sie sich diesen Code ansehen? Ich versuche, die älteste Bestellung zuerst zu löschen, indem ich den Zeitpunkt und das Bestellungs-Ticket verwende, z.B. wenn die geöffnete Bestellung >2 ist, wird die älteste Bestellung gelöscht.
//-------------------------------------------------------------
// Etasoft Inc. Forex EA und Script Generator Version 4.1 EA
//-------------------------------------------------------------
// Schlüsselwörter: MT4, Forex EA builder, EA erstellen, expert advisor developer
#property copyright "Copyright © 2011, Etasoft Inc. Forex EA Generator v4.1"
#property link
#include
#include
// exportierte Variablen
extern int OrderId = 1;
extern int Schlupf = 2;
extern double Lots = 0.01;
extern int MaxOrdersAllowed = 2;// op buy und op sell erlaubt
extern int Grid = 10; // Gesamtabstand in Pips zu offenen Aufträgen
extern string EAComment = "564 testing";
// lokale Variablen
double PipValue=1; // diese Variable dient der Unterstützung von 5-stelligen Brokern
bool Terminated = false;
string LF = "\n"; // zu verwenden in benutzerdefinierten oder Utility-Blöcken, in denen Zeilenvorschübe benötigt werden
int NDigits = 4; // wird meist für NormalizeDouble in Flex-Blöcken verwendet
int ObjCount = 0; // Zählung aller im Diagramm erstellten Objekte, ermöglicht die Erstellung von Objekten mit eindeutigen Namen
int aktuell = 0;
int init()
{
NDigits = Digits;
if (false) ObjectsDeleteAll(); // Löschen des Diagramms
Comment(""); // Löschen des Diagramms
}
// Expertenstart
int start()
{
if (Balken < 10)
{
Kommentar("Nicht genug Balken");
return (0);
}
if (Terminated == true)
{
Comment("EA Terminated.");
return (0);
}
OnEveryTick1();
}
void OnEveryTick1()
{
if (true == false && false) PipValue = 10;
if (true && (NDigits == 3 || NDigits == 5)) PipValue = 10;
IfOrderDoesNotExist2();
IfOrderDoesNotExist4();
MaximumOrder();
}
void IfOrderDoesNotExist2()
{
bool exists = false;
for (int i=OrdersTotal()-1; i >= 0; i--)
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderType() == OP_BUYSTOP && OrderSymbol() == Symbol() && OrderMagicNumber() == 1)
{
existiert = true;
}
}
sonst
{
Print("OrderSelect() Fehler - ", ErrorDescription(GetLastError()));
}
if (exists == false)
{
BuyPendingOrder();
}
}
void IfOrderDoesNotExist4()
{
bool exists = false;
for (int i=OrdersTotal()-1; i >= 0; i--)
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderType() == OP_SELLSTOP && OrderSymbol() == Symbol() && OrderMagicNumber() == 1)
{
existiert = true;
}
}
sonst
{
Print("OrderSelect() Fehler - ", ErrorDescription(GetLastError()));
}
if (exists == false)
{
SellPendingOrder();
}
}
void BuyPendingOrder()
{
int expire = TimeCurrent() + 60 * 0;
double price = NormalizeDouble((Ask-((Ask-Bid)/2)), NDigits) + Grid*PipValue*Point;
double SL = Preis - 0*PipValue*Point;
wenn (0 == 0) SL = 0;
double TP = Preis + 0*PipValue*Point;
wenn (0 == 0) TP = 0;
wenn (0 == 0) expire = 0;
int ticket = OrderSend(Symbol(), OP_BUYSTOP, Lots, price, Slippage, SL, TP, EAComment, OrderId, expire, Blue);
if (ticket == -1)
{
Print("OrderSend() Fehler - ", ErrorDescription(GetLastError()));
}
}
void SellPendingOrder()
{
int expire = TimeCurrent() + 60 * 0;
double price = NormalizeDouble((Bid+((Ask-Bid)/2)), NDigits) - Grid*PipValue*Point;
double SL = Preis + 0*PipValue*Point;
wenn (0 == 0) SL = 0;
double TP = Preis - 0*PipValue*Point;
wenn (0 == 0) TP = 0;
wenn (0 == 0) expire = 0;
int ticket = OrderSend(Symbol(), OP_SELLSTOP, Lots, price, Slippage, SL, TP, EAComment, OrderId, expire, Red);
if (ticket == -1)
{
Print("OrderSend() Fehler - ", ErrorDescription(GetLastError()));
}
}
void MaximumOrder()
{
if (MaxOrdersAllowed> 0)
{
OrderCount();
}
}
void OrderCount()
{
int count = 0;
for (int i=OrdersTotal()-1; i >= 0; i--)
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (AuftragSymbol() == Symbol())
if (OrderMagicNumber() == OrderId)
if (OrderType() == OP_BUY || OrderType() == OP_SELL)
{
count++;
}
}
sonst
{
Print("OrderSend() Fehler - ", ErrorDescription(GetLastError()));
}
if (Anzahl > MaxOrdersAllowed )
{
DeleteOldestOrder();
}
}
void DeleteOldestOrder()
{
datetime lastTime = 0;
int lastTicket = -1; // Keine offen.
for (int i=OrdersTotal()-1; i >= 0; i--)
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == OrderId && OrderOpenTime() < lastTime && OrderTicket() < lastTicket )
{
lastTime = OrderOpenTime();
lastTicket = OrderTicket();
if (OrderType() == OP_BUY || OrderType() == OP_SELL )
{
{
OrderClose(OrderTicket(),OrderLots(), OrderClosePrice(),Slippage,Red);
}
}
}
return(lastTicket);
}
sonst
Print("OrderSelect() Fehler - ", ErrorDescription(GetLastError()));
}
int deinit()
{
if (false) ObjectsDeleteAll();
}
Versuchen Sie, eine Funktion wie diese zu verwenden:
{
datetime lastTime = Time[0]+Period()*60;
int lastTicket = -1; // None open.
for (int i=OrdersTotal()-1; i >= 0; i--)
{
if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
if ((OrderType() == OP_BUY || OrderType() == OP_SELL) && OrderSymbol() == Symbol() && OrderMagicNumber() == OrderId && OrderOpenTime() <= lastTime)
{
lastTime = OrderOpenTime();
lastTicket = OrderTicket();
}
}
if (lastTicket>-1)
if (OrderSelect(lastTicket,SELECT_BY_TICKET,MODE_TRADES))
OrderClose(OrderTicket(),OrderLots(), OrderClosePrice(),Slippage,Red);
}Danke Mladen
es hat einwandfrei funktioniert. Übrigens entschuldige ich mich dafür, dass ich einen so langen Code ins Forum gestellt habe. Ich muss mich noch an die Schnittstelle gewöhnen. Vielen Dank!
Der Indikator wird nicht automatisch aktualisiert.
Hier habe ich einen Indikator, der für meinen Handel sehr gut geeignet ist.
Leider aktualisiert er sich nicht von selbst. Ich muss immer manuell aktualisieren, dass er erneuert wird.
Gibt es eine Möglichkeit, dieses Problem zu lösen?
Es wäre sehr hilfreich !!
Vielen Dank im Voraus.
P.S.: Anbei alles was ich habe.
Er will die Benachrichtigung per SMS. Wie sieht der Code aus?
Er will die Benachrichtigung per SMS. Wie sieht der Code aus?
popej30
Gehen Sie wie folgt vor:
SendNotification("Benachrichtigungsnachricht, die Sie senden möchten");
Und wo geben Sie Ihre Telefonnummer ein? Meine Nummer 0039 555-23-45. Wo geben Sie ein ?
Beispiel:
#property indicator_minimum -1.1
#property indicator_maximum 1.1
#property indicator_buffers 2
#property indicator_color1 Aqua
#property indicator_color2 Lime
extern int period = 25;
extern int limit = 5000;
double g_ibuf_84[];
double g_ibuf_88[];
double g_ibuf_92[];
int init() {
IndicatorBuffers(3);
SetIndexStyle(0, DRAW_ARROW);
SetIndexStyle(1, DRAW_ARROW);
SetIndexStyle(2, DRAW_NONE);
SetIndexEmptyValue(0, 0.0);
SetIndexEmptyValue(1, 0.0);
SetIndexArrow(0, 233);
SetIndexArrow(1, 234);
SetIndexBuffer(0, g_ibuf_88);
SetIndexBuffer(1, g_ibuf_92);
SetIndexBuffer(2, g_ibuf_84);
IndicatorShortName("BR16");
return (0);
}
int start() {
double ld_72;
double ld_24 = 0;
double ld_32 = 0;
double ld_unused_40 = 0;
double ld_unused_48 = 0;
double ld_56 = 0;
double ld_unused_64 = 0;
double l_low_80 = 0;
double l_high_88 = 0;
for (int li_96 = 0; li_96 <= limit; li_96++) {
g_ibuf_88[li_96] = 0;
g_ibuf_92[li_96] = 0;
}
for (li_96 = 0; li_96 <= limit; li_96++) {
l_high_88 = High;
l_low_80 = Low;
ld_72 = (High[li_96] + Low[li_96]) / 2.0;
if (l_high_88 != l_low_80) ld_24 = 0.66 * ((ld_72 - l_low_80) / (l_high_88 - l_low_80) - 0.5) + 0.67 * ld_32;
else ld_24 = 0.0;
ld_24 = MathMin(MathMax(ld_24, -0.999), 0.999);
g_ibuf_84[li_96] = MathLog((ld_24 + 1.0) / (1 - ld_24)) / 2.0 + ld_56 / 2.0;
ld_32 = ld_24;
ld_56 = g_ibuf_84[li_96];
}
for (li_96 = 0; li_96 <= limit; li_96++) {
if (g_ibuf_84[li_96] >= 0.0 && g_ibuf_84[li_96 + 1] < 0.0) g_ibuf_88[li_96] = -1;
if (g_ibuf_84[li_96] 0.0) g_ibuf_92[li_96] = 1;
}
return (0);
}Und wo geben Sie Ihre Telefonnummer ein? Meine Nummer 0039 555-23-45. Wo geben Sie ein ?
Beispiel:
#property indicator_minimum -1.1
#property indicator_maximum 1.1
#property indicator_buffers 2
#property indicator_color1 Aqua
#property indicator_color2 Lime
extern int period = 25;
extern int limit = 5000;
double g_ibuf_84[];
double g_ibuf_88[];
double g_ibuf_92[];
int init() {
IndicatorBuffers(3);
SetIndexStyle(0, DRAW_ARROW);
SetIndexStyle(1, DRAW_ARROW);
SetIndexStyle(2, DRAW_NONE);
SetIndexEmptyValue(0, 0.0);
SetIndexEmptyValue(1, 0.0);
SetIndexArrow(0, 233);
SetIndexArrow(1, 234);
SetIndexBuffer(0, g_ibuf_88);
SetIndexBuffer(1, g_ibuf_92);
SetIndexBuffer(2, g_ibuf_84);
IndicatorShortName("BR16");
return (0);
}
int start() {
double ld_72;
double ld_24 = 0;
double ld_32 = 0;
double ld_unused_40 = 0;
double ld_unused_48 = 0;
double ld_56 = 0;
double ld_unused_64 = 0;
double l_low_80 = 0;
double l_high_88 = 0;
for (int li_96 = 0; li_96 <= limit; li_96++) {
g_ibuf_88[li_96] = 0;
g_ibuf_92[li_96] = 0;
}
for (li_96 = 0; li_96 <= limit; li_96++) {
l_high_88 = High;
l_low_80 = Low;
ld_72 = (High[li_96] + Low[li_96]) / 2.0;
if (l_high_88 != l_low_80) ld_24 = 0.66 * ((ld_72 - l_low_80) / (l_high_88 - l_low_80) - 0.5) + 0.67 * ld_32;
else ld_24 = 0.0;
ld_24 = MathMin(MathMax(ld_24, -0.999), 0.999);
g_ibuf_84[li_96] = MathLog((ld_24 + 1.0) / (1 - ld_24)) / 2.0 + ld_56 / 2.0;
ld_32 = ld_24;
ld_56 = g_ibuf_84[li_96];
}
for (li_96 = 0; li_96 <= limit; li_96++) {
if (g_ibuf_84[li_96] >= 0.0 && g_ibuf_84[li_96 + 1] < 0.0) g_ibuf_88[li_96] = -1;
if (g_ibuf_84[li_96] 0.0) g_ibuf_92[li_96] = 1;
}
return (0);
}Hier ist eine gute Erklärung, wie Sie das machen können:
Der Indikator wird nicht automatisch aktualisiert.
Hier habe ich einen Indikator, der für meinen Handel sehr gut geeignet ist.
Leider aktualisiert er sich nicht von selbst. Ich muss immer manuell aktualisieren, dass er erneuert wird.
Gibt es eine Möglichkeit, dieses Problem zu lösen?
Es wäre sehr hilfreich !!
Vielen Dank im Voraus.
P.S.: Anbei alles, was ich habe.Jim
Anstatt die ganze Sache neu zu schreiben, füge ein Limit für die Berechnung der Balken hinzu und dann werden alle diese Balken neu berechnet. Das sollte das Aktualisierungsproblem lösen (halten Sie den BarsTocalculate auf einem vernünftigen - nicht zu großen, nicht zu kleinen - Wert. Ich habe 1000 als Standardwert verwendet, und das scheint in Ordnung zu sein). Probieren Sie es aus