Fehler, Irrtümer, Fragen - Seite 803

 
Karlson:
Andere Server, andere 500 Seiten.
Was hat das mit den verschiedenen Servern zu tun? Es handelt sich um zwei Tests von ein und derselben Person. Nur das im Testgerät angegebene Währungspaar unterscheidet sich
 
ilunga:
Was hat das mit den verschiedenen Servern zu tun? Es handelt sich um zwei Tests von ein und derselben Person. Nur das im Testgerät angegebene Währungspaar unterscheidet sich
Aktualisieren Sie Ihr Terminal/Tester und vielleicht wird alles funktionieren, ich habe die 687er Version und alles funktioniert.
 
fyords:

Ich habe alles richtig gemacht, Demo MK Server.

Dann erklären Sie bitte, was der Wert in Klammern ist, wenn Sie einen Auftrag eröffnen, und warum er in einem Fall (1,29565 / 1,29654) und im anderen (1,29443 / 1,29479 / 1,29443) ist.

(Ich meine Ihre Testergebnisse.

fyords:
Aktualisieren Sie Ihr Terminal/Tester und vielleicht wird alles funktionieren, ich habe einen 687er Build und alles funktioniert.

Genau derselbe Fehler tritt auf, wenn der EA an die Meisterschaft geschickt wird (in den automatischen Tests), so dass das Update nur teilweise helfen wird


Und mehr noch. Es wird nur 1 Mal angezeigt (beim allerersten Versuch, einen Auftrag für ein anderes Währungspaar als "Ihr" zu erteilen)

 
ilunga:
Was hat das mit den verschiedenen Servern zu tun? Es handelt sich um zwei Tests von ein und derselben Person. Nur das im Testgerät angegebene Währungspaar unterscheidet sich.

Schauen Sie sich die Artikel über das Prüfgerät an:

Die Preise müssen nicht identisch sein, wenn Sie mit einem anderen Währungspaar testen.

 
Rosh:

Schauen Sie sich die Artikel über das Prüfgerät an:

Die Preise müssen nicht übereinstimmen, wenn sie mit einem anderen Währungspaar getestet werden.

Also habe ich einige weitere Tests durchgeführt. Wirklich ein Problem mit dem "aktuellen Preis".

Code:

#include <Trade\SymbolInfo.mqh>
#include <Trade\Trade.mqh>

CSymbolInfo       m_sym;
CTrade            m_trade;

double bar_info[2];
bool a;

int OnInit()
{
   SymbolSelect("EURUSD", true);
   SymbolSelect("GBPUSD", true);
   m_sym.Name("EURUSD");
   a = false;
   return(0);
}

void OnTick()
{
   if (a) return;
   a = true;
   m_sym.Refresh();
   m_sym.RefreshRates();
   CopyHigh("EURUSD", PERIOD_D1, 0, 2, bar_info);
   Print("Текущая цена Ask:" + DoubleToString(m_sym.Ask()));
   Print("Текущая цена Bid:" + DoubleToString(m_sym.Bid()));
   Print("Цена открытия:" + DoubleToString(bar_info[1] + 5000*_Point));
   BUY_pending("EURUSD");
   Print("Текущая цена Ask:" + DoubleToString(m_sym.Ask()));
   Print("Текущая цена Bid:" + DoubleToString(m_sym.Bid()));
}

uint BUY_pending(string symbol)
{
   CopyHigh(symbol, PERIOD_D1, 0, 2, bar_info);
   // готовим запрос
   MqlTradeRequest request = {0};
   ZeroMemory(request);
   request.action = TRADE_ACTION_PENDING;
   request.magic  = 0;
   request.symbol = symbol;
   request.volume = 1;
   request.price  = m_sym.Ask() + 1;
   request.sl     = 0;
   request.tp     = 0;
   request.deviation = 10;
   request.type   = ORDER_TYPE_BUY_STOP; 
   request.type_filling = ORDER_FILLING_FOK;
   MqlTradeResult result;
   OrderSend(request,result);
   Print(IntegerToString(result.retcode));
   return (result.retcode);
}

Hinweis: Ich eröffne zum Preis des Ask-Symbols plus 1 (mit einer großen Marge). Gleichzeitig drucke ich vorher und nachher den aktuellen Ask und Bid.


Ergebnisse (beim Test auf GBPUSD):

GR      0       test (GBPUSD,H1)        11:49:40        2012.01.02 09:00:00   Текущая цена Ask:1.29241000
LH      0       test (GBPUSD,H1)        11:49:40        2012.01.02 09:00:00   Текущая цена Bid:1.29220000
QL      0       test (GBPUSD,H1)        11:49:40        2012.01.02 09:00:00   Цена открытия:1.34220000
GD      0       Trade   11:49:40        2012.01.02 09:00:00   buy stop 1.00 EURUSD at 2.29241 (1.29709 / 1.29722)
IG      0       test (GBPUSD,H1)        11:49:40        2012.01.02 09:00:00   10009
CP      0       test (GBPUSD,H1)        11:49:40        2012.01.02 09:00:00   Текущая цена Ask:1.29241000
HG      0       test (GBPUSD,H1)        11:49:40        2012.01.02 09:00:00   Текущая цена Bid:1.29220000

Der Preis 1,29241 wird vor und nach der Auftragserteilung gedruckt. In der Zwischenzeit (zum Zeitpunkt der Auftragserteilung) liegt der Kurs bei 1,29722 in Klammern. WIE? Oder habe ich den aktuellen Preis falsch ermittelt?


Und zweitens, wenn es einen Fehler mit dem Preis gab, warum dann der Fehler 10016 (Stopps)?

 
ilunga:

Aber der Fehler ist in der Zwischensequenz immer noch vorhanden.

Um ehrlich zu sein, verstehe ich nicht ganz, wie der Fehler 10016 auftreten kann, wenn es keine Haltestellen gibt.

Ich weiß nicht, was und wie Sie es tun, das Problem liegt wahrscheinlich wirklich in SL.

Meine Version funktioniert ohne Probleme. Der Aufruf, warf jedoch in der Initialisierungsblock, nicht mit Kontrollen zu stören (obwohl das Vorhandensein der Reihenfolge vor der Einstellung wäre es wert, zu überprüfen).

bool BUY_pending(string symbol,ENUM_TIMEFRAMES period,double volume,ulong magic = 0)
{
//----------------------------------------------------------------------------//
//Work variables
double price = 0, sl = 0, tp = 0; //Prices: Open, Sell stop, Take profit
int ResCopy = -1; //Result of copying the data into an array
int Dig     = 0;  //Digits

bool Result = true; //Returned importance
//----------------------------------------------------------------------------//

ResetLastError();

//Checking the signal to stopping the trading system
  if(IsStopped()) return(false);
//Preparation of structures
ZeroMemory(TradeRequest);
ZeroMemory(TradeResult);
ZeroMemory(CheckResult);
//Copying the data into an array
ResCopy = CopyHigh(symbol,period,0,2,bar_info);

  if(ResCopy==-1)return(false); 
//Calculations
Dig   = (int)SymbolInfoInteger(symbol,SYMBOL_DIGITS);

price = NormalizeDouble(bar_info[1] + 500*_Point,Dig);
sl    = NormalizeDouble(price - 200*_Point,Dig);
tp    = NormalizeDouble(price + 1000*_Point,Dig);
//Preparation of request
TradeRequest.type_filling = ORDER_FILLING_FOK;
TradeRequest.action       = TRADE_ACTION_PENDING;
TradeRequest.type         = ORDER_TYPE_BUY_STOP; 
TradeRequest.deviation    = 10;
TradeRequest.symbol = symbol;
TradeRequest.magic  = magic;
TradeRequest.volume = volume;
TradeRequest.price  = price;
TradeRequest.sl     = sl;
TradeRequest.tp     = tp;
//Checking
Result = OrderCheck(TradeRequest,CheckResult);
  if((!Result)||(CheckResult.retcode!=0))return(false);
//OrderSend
Result = OrderSend(TradeRequest,TradeResult);
//Checking for presence of the errors
  if(_LastError!=0){Result = false;}
//----------------------------------------------------------------------------//
return(Result);
//----------------------------------------------------------------------------//
}
Dateien:
 
Interesting:

Ich weiß nicht, was oder wie Sie es tun, das Problem liegt wahrscheinlich wirklich bei SL.

Meine Version funktioniert ohne Probleme. Der Aufruf ist wahr, aber ich warf den Aufruf an den Initialisierungsblock, nicht mit den Prüfungen zu stören (obwohl das Vorhandensein der Reihenfolge vor der Einstellung es wert wäre, zu überprüfen).

Eine kleine Bitte. Können Sie den Code so korrigieren, dass er den aktuellen Preis des Symbols vor OrderSend ausgibt?
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров - Документация по MQL5
 
ilunga:
Eine kleine Bitte. Können Sie den Code so abändern, dass er vor OrderSend den aktuellen Kurs des Instruments ausgibt, auf das wir eröffnen?

Versuchen Sie es auf diese Weise:

   MqlTradeResult result;
   if(!OrderSend(request,result))
     {
      PrintFormat("retcode=%d price=%G  Ask=%G  Bid=%G Comment=%s",
                  result.retcode,result.price,result.ask,result.bid,result.comment);
      //---
      PrintFormat("%s %s at %G Ask=%G  Bid=%G  ",
                  EnumToString(request.type),symbol,request.price,SymbolInfoDouble(symbol,SYMBOL_ASK),
                  SymbolInfoDouble(symbol,SYMBOL_BID));
      Print("------------");
     }
 
ilunga:
Kleine Anfrage. Können Sie den Code so korrigieren, dass er den aktuellen Preis vor OrderSend an das Tool ausgibt?

Eine Preisschorle? Ich sehe keine Notwendigkeit dafür, Sie können eine Meldung über den Erfolg/Misserfolg der Prüfung und die Einstellung des Auftrags hinzufügen.

Im Prinzip können Sie es selbst tun, sollte nicht schwierig sein (von der Idee her).

Rosh:

Versuchen Sie es auf diese Weise:

Für die Fehlersuche ist es ganz gut geeignet, im funktionierenden Code wird es überflüssig sein (zumindest eine etwas hakelige Lösung)

Und es ist besser, die Bestellung nach OrderCheck aufzugeben, damit sie im Falle eines Fehlers nicht an OrderSend weitergeleitet wird.

PS

Ich vergaß hinzuzufügen, dass bar_info nach dem Beispiel ohne Probleme in einer Funktion platziert werden könnte.

 
Interesting:

Eine Preisschorle? Ich sehe keine Notwendigkeit dafür, Sie können eine Meldung über den Erfolg/Misserfolg der Prüfung und die Einstellung des Auftrags hinzufügen.

Im Prinzip können Sie es selbst tun, es sollte nicht schwierig sein (in der Idee).

Für die Fehlersuche mag das gut genug sein, aber im Produktionscode wird es überflüssig sein (zumindest ist es eine etwas krumme Lösung).

Und es wäre besser, die Bestellung nach OrderCheck aufzugeben, so dass wir im Falle eines Fehlers nicht zu OrderSend gelangen.

PS

Ich vergaß hinzuzufügen, dass bar_info nach dem Beispiel auch problemlos in einer Funktion platziert werden könnte.

Das ist lustig. In Ihrem Beispiel habe ich BUYSTOP für GBP entfernt, so dass nur noch EURUSD übrig ist.

Nachdem ich die Felder in der Anfrage ausgefüllt habe, habe ich den Preis des schwebenden Auftrags ausgegeben.

1) Sie haben eine Variante - ein schwebender Auftrag wird in der Inite platziert

2012.01.01 00:00:00 Preis = 1.30487000

2) Ich habe das Init auskommentiert und es zu OnTick verschoben. Ich habe eine Bedingung festgelegt, die nur beim ersten Tick ausgelöst wird.

2012.01.02 09:00:00 Preis = 1.29720000


P.S. Verstehe ich das richtig, dass in meinem (und Ihrem) Code bar_info[1] das Maximum des aktuellen Balkens ist?

Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров - Документация по MQL5