Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 6. - Seite 1093
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
In diesem Fall wird im Journal des Prüfers ein Fehlercode eingetragen, der für weitere Untersuchungen verwendet werden kann.
Kein Fehler. Er bleibt bei der Eingabe eines Vorgangs einfach hängen. Und dann gibt es noch StartSell, das wird ganz normal eingegeben. Das ist ein ziemliches Durcheinander.
Ich habe die Anführungszeichen aktualisiert und es funktioniert. Es ist zwar nicht ganz korrekt, weil es einige Löcher hat, aber wenigstens hängt es nicht.
Guten Tag, könnten Sie mir bitte sagen, wie ich am besten verhindern kann, dass bei binären Optionen mehr als eine bestimmte Anzahl von Serien für verschiedene Instrumente gleichzeitig geöffnet werden (der Bot ist an mehrere Charts verschiedener Instrumente zur gleichen Zeit angeschlossen)?
extern double Lots = 1; // Lose
extern int Exp = 1; // Verfall
extern int Wait = 0; // Anzahl der Candlesticks einer Richtung
extern int Timeout = 1; // Zeitfenster
extern double Multiplikator = 3; // Multiplikator
extern int int Schlupf = 5; // Schlupf
extern int MaxOpenOrders = 1; // Maximale Anzahl von gleichzeitig geöffneten Aufträgen
extern int Magic = 774274; // Magie
int ticket, Typ;
doppelter Preis, Los;
//+------------------------------------------------------------------+
Experten-Initialisierungsfunktion //|.
//+------------------------------------------------------------------+
int OnInit()
{
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Experten-Deinitialisierungsfunktion |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+------------------------------------------------------------------+
//| Experten-Tick-Funktion |
//+------------------------------------------------------------------+
void OnTick()
{
--------------- Offene Geschäfte ---------------
if (CountTrades() == 0) // Anzahl der Aufträge muss gleich Null sein
{
if ((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) < PriceOpenLastHistOrder(OP_BUY))
|| (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) > PriceOpenLastHistOrder(OP_SELL))
// Wenn der letzte Handel einen Verlust aufweist, wird derselbe Handel eröffnet, jedoch mit einem größeren Los.
{
Typ = TypeLastHistOrder();
if (Typ == OP_BUY) Preis = Ask;
if (Typ == OP_SELL) Preis = Bid;
Lot = NormalizeDouble(LotsLastHistOrder()*Multiplier, 2);
ticket = OrderSend(Symbol(), Typ, Lot, Preis, Slippage, 0, 0, IntegerToString(Exp), Magic);
}
if (PriceCloseLastHistOrder() == PriceOpenLastHistOrder() && CountHistTrades() > 0)
// wenn der Gewinn des letzten Geschäfts gleich Null ist, wird das gleiche Geschäft eröffnet
{
Typ = TypeLastHistOrder();
if (Typ == OP_BUY) Preis = Ask;
if (Typ == OP_SELL) Preis = Bid;
Lot = NormalizeDouble(LotsLastHistOrder(), 2);
ticket = OrderSend(Symbol(), Typ, Lot, Preis, Slippage, 0, 0, IntegerToString(Exp), Magic);
}
if (((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) > PriceOpenLastHistOrder(OP_BUY))
|| (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) < PriceOpenLastHistOrder(OP_SELL))
|| CountHistTrades() == 0)// Wenn der letzte Handel profitabel ist, wird die Order eröffnet
{
if (SignalBuy() && MaxOpenOrders > OrdersTotal())
{
ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, IntegerToString(Exp), Magic);
}
if (SignalSell() && MaxOpenOrders > OrdersTotal())
{
ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, IntegerToString(Exp), Magic);
}
}
}
}
//+------------------------------------------------------------------+
int CountTrades(int type = -1)
{
int cnt = 0;
for (int i=OrdersTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
cnt++;
}
}
zurück(cnt);
}
//+------------------------------------------------------------------+
int CountHistTrades(int type = -1)
{
int cnt = 0;
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
cnt++;
}
}
zurück(cnt);
}
//+------------------------------------------------------------------+
bool SignalBuy()
{
for (int i=1; i<=Wait; i++)
{
if (Close[i] > Open[i]) return(false)
}
wenn ((iBarShift(Symbol(), 0, TimeLastHistOrder()+Timeout) >= Wait || (Wait == 0 && TimeCurrent() >= TimeLastHistOrder()+Timeout))
&& CountHistTrades() > 0) return(true);
if (CountHistTrades() == 0) return(true);
return(false);
}
//+------------------------------------------------------------------+
bool SignalSell()
{
for (int i=1; i<=Wait; i++)
{
if (Close[i] < Open[i]) return(false)
}
wenn ((iBarShift(Symbol(), 0, TimeLastHistOrder()+Timeout) >= Wait || (Wait == 0 && TimeCurrent() >= TimeLastHistOrder()+Timeout))
&& CountHistTrades() > 0) return(true);
if (CountHistTrades() == 0) return(true);
return(false);
}
//+------------------------------------------------------------------+
datetime TimeLastHistOrder(int type = -1)
{
datetime lasttime = 0;
datetime opentime = 0;
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
{
if (OrderCloseTime() > lasttime)
{
lasttime = OrderCloseTime();
opentime = OrderOpenTime();
}
}
}
}
return(opentime);
}
//+------------------------------------------------------------------+
int TypeLastHistOrder()
{
datetime time = 0;
int Typ = -1;
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
if (OrderCloseTime() > time)
{
time = OrderCloseTime();
type = OrderType();
}
}
}
}
return(type);
}
//+------------------------------------------------------------------+
double LotsLastHistOrder(int type = -1)
{
datetime time = 0;
double lots = 0;
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
{
wenn (OrderOpenTime() > Zeit)
{
time = OrderOpenTime();
time = OrderLots();
}
}
}
}
return(lots);
}
//+------------------------------------------------------------------+
double PriceCloseLastHistOrder(int type = -1)
{
datetime time = 0;
double price = 0;
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
{
if (OrderCloseTime() > time)
{
time = OrderCloseTime();
Preis = OrderClosePrice();
}
}
}
}
}
}
//+------------------------------------------------------------------+
double PriceOpenLastHistOrder(int type = -1)
{
datetime time = 0;
double price = 0;
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
{
if (OrderCloseTime() > time)
{
time = OrderCloseTime();
Preis = OrderOpenPrice();
}
}
}
}
}
}
//+------------------------------------------------------------------+
Löschen Sie einfach die Bedingung OrderSymbol() == Symbol() aus der Funktion CountTrades und fügen Sie OrderType() == OP_BUY || OrderType() == OP_SELL hinzu, oder?
Und die Bedingung if (SignalBuy() && CountTrades() < MaxOpenOrders) in OnTick vor OrderSend ändern... Dasselbe gilt für Sell.if (OrderMagicNumber() == Magic && (OrderType() == OrderType() == OP_BUY || OrderType() == OP_SELL))
Habe ich es richtig geändert?
Guten Tag, könnten Sie mir bitte sagen, wie ich am besten verhindern kann, dass bei binären Optionen mehr als eine bestimmte Anzahl von Serien für verschiedene Instrumente gleichzeitig geöffnet werden (der Bot ist an mehrere Charts verschiedener Instrumente zur gleichen Zeit angeschlossen)?
extern double Lots = 1; // Lose
extern int Exp = 1; // Verfall
extern int Wait = 0; // Anzahl der Candlesticks einer Richtung
extern int Timeout = 1; // Zeitfenster
extern double Multiplikator = 3; // Multiplikator
extern int int Schlupf = 5; // Schlupf
extern int MaxOpenOrders = 1; // Maximale Anzahl von gleichzeitig geöffneten Aufträgen
extern int Magic = 774274; // Magie
int ticket, Typ;
doppelter Preis, Los;
//+------------------------------------------------------------------+
Experten-Initialisierungsfunktion //|.
//+------------------------------------------------------------------+
int OnInit()
{
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Experten-Deinitialisierungsfunktion |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+------------------------------------------------------------------+
//| Experten-Tick-Funktion |
//+------------------------------------------------------------------+
void OnTick()
{
--------------- Offene Geschäfte ---------------
if (CountTrades() == 0) // Anzahl der Aufträge muss gleich Null sein
{
if ((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) < PriceOpenLastHistOrder(OP_BUY))
|| (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) > PriceOpenLastHistOrder(OP_SELL))
// Wenn der letzte Handel ein Verlustgeschäft war, wird derselbe Handel eröffnet, aber mit einem größeren Los.
{
Typ = TypeLastHistOrder();
if (Typ == OP_BUY) Preis = Ask;
if (Typ == OP_SELL) Preis = Bid;
Lot = NormalizeDouble(LotsLastHistOrder()*Multiplier, 2);
ticket = OrderSend(Symbol(), Typ, Lot, Preis, Slippage, 0, 0, IntegerToString(Exp), Magic);
}
if (PriceCloseLastHistOrder() == PriceOpenLastHistOrder() && CountHistTrades() > 0)
// wenn der Gewinn des letzten Geschäfts gleich Null ist, wird das gleiche Geschäft eröffnet
{
Typ = TypeLastHistOrder();
if (Typ == OP_BUY) Preis = Ask;
if (Typ == OP_SELL) Preis = Bid;
Lot = NormalizeDouble(LotsLastHistOrder(), 2);
ticket = OrderSend(Symbol(), Typ, Lot, Preis, Slippage, 0, 0, IntegerToString(Exp), Magic);
}
if (((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) > PriceOpenLastHistOrder(OP_BUY))
|| (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) < PriceOpenLastHistOrder(OP_SELL))
|| CountHistTrades() == 0)// Wenn der letzte Handel profitabel ist, wird die Order eröffnet
{
if (SignalBuy() && MaxOpenOrders > OrdersTotal())
{
ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, IntegerToString(Exp), Magic);
}
if (SignalSell() && MaxOpenOrders > OrdersTotal())
{
ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, IntegerToString(Exp), Magic);
}
}
}
}
//+------------------------------------------------------------------+
int CountTrades(int type = -1)
{
int cnt = 0;
for (int i=OrdersTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
cnt++;
}
}
zurück(cnt);
}
//+------------------------------------------------------------------+
int CountHistTrades(int type = -1)
{
int cnt = 0;
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
cnt++;
}
}
zurück(cnt);
}
//+------------------------------------------------------------------+
bool SignalBuy()
{
for (int i=1; i<=Wait; i++)
{
if (Close[i] > Open[i]) return(false)
}
wenn ((iBarShift(Symbol(), 0, TimeLastHistOrder()+Timeout) >= Wait || (Wait == 0 && TimeCurrent() >= TimeLastHistOrder()+Timeout))
&& CountHistTrades() > 0) return(true);
if (CountHistTrades() == 0) return(true);
return(false);
}
//+------------------------------------------------------------------+
bool SignalSell()
{
for (int i=1; i<=Wait; i++)
{
if (Close[i] < Open[i]) return(false)
}
wenn ((iBarShift(Symbol(), 0, TimeLastHistOrder()+Timeout) >= Wait || (Wait == 0 && TimeCurrent() >= TimeLastHistOrder()+Timeout))
&& CountHistTrades() > 0) return(true);
if (CountHistTrades() == 0) return(true);
return(false);
}
//+------------------------------------------------------------------+
datetime TimeLastHistOrder(int type = -1)
{
datetime lasttime = 0;
datetime opentime = 0;
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
{
if (OrderCloseTime() > lasttime)
{
lasttime = OrderCloseTime();
opentime = OrderOpenTime();
}
}
}
}
return(opentime);
}
//+------------------------------------------------------------------+
int TypeLastHistOrder()
{
datetime time = 0;
int Typ = -1;
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
if (OrderCloseTime() > time)
{
time = OrderCloseTime();
type = OrderType();
}
}
}
}
return(type);
}
//+------------------------------------------------------------------+
double LotsLastHistOrder(int type = -1)
{
datetime time = 0;
double lots = 0;
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
{
wenn (OrderOpenTime() > Zeit)
{
time = OrderOpenTime();
time = OrderLots();
}
}
}
}
return(lots);
}
//+------------------------------------------------------------------+
double PriceCloseLastHistOrder(int type = -1)
{
datetime time = 0;
double price = 0;
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
{
if (OrderCloseTime() > time)
{
time = OrderCloseTime();
Preis = OrderClosePrice();
}
}
}
}
}
}
//+------------------------------------------------------------------+
double PriceOpenLastHistOrder(int type = -1)
{
datetime time = 0;
double price = 0;
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
{
if (OrderCloseTime() > time)
{
time = OrderCloseTime();
Preis = OrderOpenPrice();
}
}
}
}
}
}
//+------------------------------------------------------------------+
Die Zeit kann direkt im Datetime-Format eingestellt werden, so dass keine Zeit für die Konvertierung verschwendet werden muss:
extern datetime StartTime = D'07:00';
In diesem Format erhalten wir beim Starten des EA das Datum der Erstellung des EA, während wir wollen, dass das Datum heute ist.
Wie kann man sie korrigieren?
Dieses Zeitformat gibt das Datum der EA-Erstellung beim Start des EA an, aber ich möchte das heutige Datum haben.
Wie kann man das beheben?
Sie ändern den Parameter beim Start auf den gewünschten Wert, wie die anderen Benutzerparameter auch.
Und aus irgendeinem Grund zeigt es mir das aktuelle Datum zum Zeitpunkt der Ausführung des Skripts an.
Bitte sagen Sie mir, was der Zweck der Verwendung von MagicNumber ist, was bringt es in dieser Strategie? IMHO können Sie auch die OnInit OnDeinit Funktionen hier wegwerfen