Pending Order

Einloggen oder registrieren, um einen Kommentar zu schreiben
hausmannjack
174
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 

Christian
3202
Christian  
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 

hausmannjack
174
hausmannjack  
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;
            }
         }
      }
   }
}
Carl Schreiber
Moderator
9941
Carl Schreiber  
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!
Christian
3202
Christian  

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
Dokumentation zu MQL5: Handelsfunktionen / PositionSelect
  • www.mql5.com
Handelsfunktionen / PositionSelect - Nachschlagewerk über die Sprache des algothitmischen/automatischen Handels für MetaTrader 5
hausmannjack
174
hausmannjack  
Vielen Dank, das hat mir sehr geholfen :-)
Einloggen oder registrieren, um einen Kommentar zu schreiben