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.
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
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.
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)); }
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
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.