hausmannjack:
Hallo zusammen,
ich würde gerne wissen, wie ich eine pending order öffnen kann, ohne dass sich mehrere öffnen. Wäre für eine Antwort sehr dankbar.
MfG
Du musst als erstes lernen wie man sein Problem so detailliert beschreibt das andere damit was anfangen können. In der Welt der Computer ist das zu ungenau.
Gruß Christian
Wenn ich zum Beispiel diesen Code eingebe, öffnen sich mehrere pending orders, aber ich möchte, dass sich immer nur eine pending order öffnet.
#include <Trade\Trade.mqh>
CTrade m_Trade;
double Lot;
double bid;
double ask;
double Spread;
double Gewinn;
double StopLoss;
double TakeProfit;
bool Buy;
bool Sell;
bool HedgingAktiv;
bool OK=false;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
bid=SymbolInfoDouble(_Symbol,SYMBOL_BID);
ask=SymbolInfoDouble(_Symbol,SYMBOL_ASK);
Spread=SymbolInfoInteger(_Symbol,SYMBOL_SPREAD);
Gewinn=PositionGetDouble(POSITION_PRICE_OPEN);
StopLoss=PositionGetDouble(POSITION_SL);
TakeProfit=PositionGetDouble(POSITION_TP);
if(PositionSelect(_Symbol)==false)
{
Lot=0.01;
if(Spread<=60)
{
m_Trade.PositionOpen(_Symbol,ORDER_TYPE_BUY,Lot,ask,ask-0.00180,ask+0.00090,NULL);
Buy=false;
Sell=false;
HedgingAktiv=false;
}
}
if(PositionSelect(_Symbol)==true)
{
if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
{
HedgingAktiv=true;
if(HedgingAktiv==true)
{
if(bid<=Gewinn)
{
Sell=true;
}
}
if(Sell==true)
{
if(Spread<=60)
{
Lot=Lot*2;
MqlTradeRequest request;
MqlTradeResult result;
ZeroMemory(request);
request.action=TRADE_ACTION_PENDING;
request.symbol=Symbol();
request.volume=Lot;
request.price=Gewinn-0.00090;
request.sl=TakeProfit;
request.tp=StopLoss;
request.type=ORDER_TYPE_SELL_STOP;
OrderSend(request,result);
OK=true;
Sell=false;
}
}
if(OK==false)
{
HedgingAktiv=false;
}
}
if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
{
if(HedgingAktiv==true)
{
if(ask>=Gewinn-0.00090)
{
Buy=true;
}
}
if(Buy==true)
{
if(Spread<=60)
{
Lot=Lot*2;
MqlTradeRequest request;
MqlTradeResult result;
ZeroMemory(request);
request.action=TRADE_ACTION_PENDING;
request.symbol=Symbol();
request.volume=Lot;
request.price=Gewinn;
request.sl=StopLoss;
request.tp=TakeProfit;
request.type=ORDER_TYPE_BUY_STOP;
OrderSend(request,result);
Buy=false;
}
}
}
}
}
CTrade m_Trade;
double Lot;
double bid;
double ask;
double Spread;
double Gewinn;
double StopLoss;
double TakeProfit;
bool Buy;
bool Sell;
bool HedgingAktiv;
bool OK=false;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
bid=SymbolInfoDouble(_Symbol,SYMBOL_BID);
ask=SymbolInfoDouble(_Symbol,SYMBOL_ASK);
Spread=SymbolInfoInteger(_Symbol,SYMBOL_SPREAD);
Gewinn=PositionGetDouble(POSITION_PRICE_OPEN);
StopLoss=PositionGetDouble(POSITION_SL);
TakeProfit=PositionGetDouble(POSITION_TP);
if(PositionSelect(_Symbol)==false)
{
Lot=0.01;
if(Spread<=60)
{
m_Trade.PositionOpen(_Symbol,ORDER_TYPE_BUY,Lot,ask,ask-0.00180,ask+0.00090,NULL);
Buy=false;
Sell=false;
HedgingAktiv=false;
}
}
if(PositionSelect(_Symbol)==true)
{
if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
{
HedgingAktiv=true;
if(HedgingAktiv==true)
{
if(bid<=Gewinn)
{
Sell=true;
}
}
if(Sell==true)
{
if(Spread<=60)
{
Lot=Lot*2;
MqlTradeRequest request;
MqlTradeResult result;
ZeroMemory(request);
request.action=TRADE_ACTION_PENDING;
request.symbol=Symbol();
request.volume=Lot;
request.price=Gewinn-0.00090;
request.sl=TakeProfit;
request.tp=StopLoss;
request.type=ORDER_TYPE_SELL_STOP;
OrderSend(request,result);
OK=true;
Sell=false;
}
}
if(OK==false)
{
HedgingAktiv=false;
}
}
if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
{
if(HedgingAktiv==true)
{
if(ask>=Gewinn-0.00090)
{
Buy=true;
}
}
if(Buy==true)
{
if(Spread<=60)
{
Lot=Lot*2;
MqlTradeRequest request;
MqlTradeResult result;
ZeroMemory(request);
request.action=TRADE_ACTION_PENDING;
request.symbol=Symbol();
request.volume=Lot;
request.price=Gewinn;
request.sl=StopLoss;
request.tp=TakeProfit;
request.type=ORDER_TYPE_BUY_STOP;
OrderSend(request,result);
Buy=false;
}
}
}
}
}
Um Deine verschachtelte Logik zu prüfen, würde ich Dir raten geh durch Deinen Code Schritt für Schritt mit dem Debugger!
Dann siehst Du selbst sofort warum das passiert, was Du nicht willst!
Dann siehst Du selbst sofort warum das passiert, was Du nicht willst!
Nachdem du mit dem Debugger die Stelle gefunden hast guckt du dir noch das hier an
-> https://www.mql5.com/de/docs/trading/positionselect
Dir fehlt die Prüfung in deinem Code ob das Konto auf dem der EA läuft ein NETTING oder HEDGE Konto ist.
Davon ist die Art der Prüfung von "Positionen im Markt " abhängig.

Dokumentation zu MQL5: Handelsfunktionen / PositionSelect
- www.mql5.com
Handelsfunktionen / PositionSelect - Nachschlagewerk über die Sprache des algothitmischen/automatischen Handels für MetaTrader 5
Vielen Dank, das hat mir sehr geholfen :-)

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
Hallo zusammen,
ich würde gerne wissen, wie ich eine pending order öffnen kann, ohne dass sich mehrere öffnen. Wäre für eine Antwort sehr dankbar.
MfG