Invaild Price

 

sodale, ich hab ja gesagt, ich hab ottos Phänomän auch

das passiert regelmäßig, vor allem seit der letzten regular Built, es wird auch nicht wirklich besser mit den Beta Versionen.

 

Invalid price kann sich auf alle 4 Preise beziehen, die mqlreqest verlangt:

struct MqlTradeRequest 
  { 
   ENUM_TRADE_REQUEST_ACTIONS    action;           // Operationstyp  
   ulong                         magic;            // Expert Advisor ID (Identifikator magic number) 
   ulong                         order;            // Orderticket 
   string                        symbol;           // Name des Handelssymbols  
   double                        volume;           // angefordertes Dealvolumen in Lots  
   double                        price;            // Preis  
   double                        stoplimit;        // Orderlevel StopLimit  
   double                        sl;               // Oderlevel Stop Loss  
   double                        tp;               // Orderlevel  Take Profit  
   ulong                         deviation;        // maximal moegliche Abweichnung vom angeforderten Preis  
   ENUM_ORDER_TYPE               type;             // Ordertyp  
   ENUM_ORDER_TYPE_FILLING       type_filling;     // Durchführungstyp der Order  
   ENUM_ORDER_TYPE_TIME          type_time;        // Typ der Ablauffrist der Order 
   datetime                      expiration;       // Ablauffrist der Pending-Order (für Orders des Typs ORDER_TIME_SPECIFIED) 
   string                        comment;          // Oprderkommentar
   ulong                         position;         // Position ticket 
   ulong                         position_by;      // The ticket of an opposite position 
  };

Das sind price, stoplimit, sl und tp. Alle müssen in Handelsrichtung gegen Bid und Ask geprüft werden.

Leider kann ich auf dem Chart Bid und Ask erkennen bzw. den farbigen Linien zuordnen.

 
Carl Schreiber:

Invalid price kann sich auf alle 4 Preise beziehen, die mqlreqest verlangt:

Das sind price, stoplimit, sl und tp. Alle müssen in Handelsrichtung gegen Bid und Ask geprüft werden.

Leider kann ich auf dem Chart Bid und Ask erkennen bzw. den farbigen Linien zuordnen.

Bid ist 54,50

TP ist nicht gesetzt

und Spread ist 20 Points, als 54,70

 
Amando, schreib doch einfach alle relevanten Preise: Bid, Ask, LimitPreis und sl in einem Post.
 

ich bin dem ganzen jetzt mal weiter Nachgegangen,

das Liegt an der CSymbolInfo

hab da ein kleines Script gebastelt, da bekomme ich als Bid und Ask Wert immer 0 raus.

alle anderen Werte passen


#include <Trade\Trade.mqh>             CTrade _trade;             // wird verwendet für die Trade Funktionen 

#include <Trade\SymbolInfo.mqh>        CSymbolInfo _sym;               // wird verwendet für die Symbol Information Funktionen


void OnStart()
  {
//---

   _sym.Name(_Symbol); 
   Print("Ask: ", _sym.Ask());
   Print("Bid: ", _sym.Bid());
   Print("Digits: ",_sym.Digits());
   Print("Point: ", _sym.Point() );
   Print("Bid High: ",_sym.BidHigh());
   Print("Ask High: ",_sym.AskHigh());
   Print("Bid Low: ",_sym.BidLow());
   Print("Ask Low: ",_sym.AskLow());
   Print("Currency Profit: ",_sym.CurrencyProfit());
   Print("Currency Base: ", _sym.CurrencyBase());
   Print("Spread: ", _sym.Spread()); 

  }

kann das wer nachvollziehen mit dem script?

 

Die Methoden Bid() und Ask() geben nur die in der Klasse eingetragenen Werte zurück, sie werden dadurch nicht neu abgerufen!

Auch die Methode Refresh() aktualisiert nur langfristig stabile Werte, aber eine Abrufen der aktuellen Bid und Ask macht keine Methode dieser Klasse - dafür gibt es schnellere Funktionen mit besserem Zugriff.

 
Carl Schreiber:

Die Methoden Bid() und Ask() geben nur die in der Klasse eingetragenen Werte zurück, sie werden dadurch nicht neu abgerufen!

wie meinst Du das?

ich hab ja keine Werte eingetragen, ich kann ja auch keine eintragen, die geben immer 0 zurück

 

Öffne ganz einfach die Datei ...\Include\Trade\SymbolInfo.mqh

und schau nach, ob, wann  und wie Bid und Ask abgerufen werden:

   double            Bid(void) const { return(m_tick.bid); }
..
//+------------------------------------------------------------------+
//| Refresh cached data                                              |
//+------------------------------------------------------------------+
bool CSymbolInfo::RefreshRates(void)
  {
   return(SymbolInfoTick(m_name,m_tick));
  }