FORTS Bitte helfen Sie - Seite 30

 
demonsn:
Ich danke Ihnen. Ihre Option wurde als Parallelprüfung hinzugefügt. Jetzt kommt es nur noch darauf an, den richtigen Moment zu erwischen.

Ich bin mir zu 100 % sicher, dass es funktionieren wird!

Weil Sie die Struktur nicht korrekt ausgefüllt haben (nicht nur die Felder, sondern auch die Werte).

Seltsam, dass der Compiler nicht "geflucht" hat.

Sie:

MqlTradeRequest.action = TRADE_ACTION_DEAL;

Das muss sie auch:

MtRequest.action = TRADE_ACTION_DEAL;
 

Aber nein! Der Code in meiner Nachricht stammt nicht vom Expert Advisor, sondern ist ein korrigiertes Fragment von Protokollen, in denen Debugging-Informationen vom Expert Advisor geschrieben werden. Meine Schuld, mein Fehler.)

Der EA selbst füllt die Struktur wie erforderlich aus, aber das Ergebnis der Prüfung ist anders. Entweder wird die Spanne richtig berechnet oder es wird wie im Beispiel Unsinn ausgegeben.

Hier ist ein Ausschnitt aus der Live-Site

   MqlTradeRequest MtRequest = {0}; 

   switch(OrderType)
   {
      case ORDER_TYPE_BUY:         
         MtRequest.price     = CurrentTick.ask;         
         break;

      case ORDER_TYPE_SELL:         
         MtRequest.price     = CurrentTick.bid;
         break;

      default:
         LogFile.Log(LOG_PRINT,__FUNCTION__," error: Invalid OrderType");
         return(false);
   }

   MtRequest.tp        = 0.0;
   MtRequest.sl        = 0.0;
   MtRequest.action    = TRADE_ACTION_DEAL;
   MtRequest.magic     = 0;
   MtRequest.symbol    = strSymbol;
   MtRequest.volume    = dblLots;
   MtRequest.deviation = Config.Deviation;
   MtRequest.type      = OrderType;
   MtRequest.type_filling = Config.OrdersFillingType;
 

Machen Sie es so:

   MqlTradeRequest MtRequest = {0}; 
   MqlTradeRequest MtResult = {0}; 

   switch(OrderType)
   {
      case ORDER_TYPE_BUY:         
         MtRequest.price     = CurrentTick.ask;         
         break;

      case ORDER_TYPE_SELL:         
         MtRequest.price     = CurrentTick.bid;
         break;

      default:
         LogFile.Log(LOG_PRINT,__FUNCTION__," error: Invalid OrderType");
         return(false);
   }

   MtRequest.action    = TRADE_ACTION_DEAL;
   MtRequest.magic     = 77777777777777;
   MtRequest.symbol    = strSymbol;
   MtRequest.volume    = dblLots;
   MtRequest.type      = OrderType;
   MtRequest.type_filling = Config.OrdersFillingType;
   MtRequest.type_time = ORDER_TIME_DAY;
 

Hier ist ein weiterer Moment im Protokoll:

 MqlTradeRequest structure:
   action: Action Deal
   magic: 0
   order: 0
   symbol: Si-12.15
   volume: 2.00
   price: 63365
   stoplimit: 0
   sl: 0
   tp: 0
   deviation: 50
   type: ORDER_TYPE_SELL
   type_filling: ORDER_FILLING_FOK
   type_time: gtc
   expiration: 1970.01.01 00:00
   comment: (null)

 MqlTradeCheckResult structure:
   retcode: 10019 (There is not enough money to complete the request)
   balance: 133921.71
   equity: 132772.57
   profit: 0.00
   margin: 172148.68
   margin_free: -39376.11
   margin_level: 77.13
   comment: No money

Ich übergebe die gleiche Struktur an OrderSend() und alles öffnet sich perfekt!

Übrigens, Baujahr 1194.

Verkauft Si-12.15, 2 Lose. GO für 1 Vertrag ist 5090 Rubel. Ein Handel sollte den QR 5090*2 = 10180 RUB haben. Aber die Funktion liefert 172148,68 RUB, was 172148,68 / 5090 = 33,82 Kontrakte entspricht!

Was für ein Wunder...

 
demonsn:

Hier ist ein weiterer Moment im Protokoll:

Ich übergebe die gleiche Struktur an OrderSend() und alles öffnet sich perfekt!

Übrigens, Baujahr 1194.

Verkauft Si-12.15, 2 Lose. GO für 1 Vertrag ist 5090 Rubel. Ein Handel sollte den QR 5090*2 = 10180 RUB haben. Und die Funktion liefert 172148,68 Rubel, was 172148,68 / 5090 = 33,82 Verträge entspricht!

Was für Wunder...

1. Ich habe Ihnen ein Beispiel dafür gegeben, wie man die Struktur richtig ausfüllt, und Sie ignorieren diesen Rat.

Warum fragen Sie dann?

2. Der Build 1194 ist nicht mit den aktuellen Servern kompatibel (Renat erwähnte dies. Verwenden Sie vorerst den Build 1159).

3. ich verwende OrderCheck() überhaupt nicht, ich prüfe die Mittel selbst.

//+------------------------------------------------------------------+
//| Expert Check money function                                      |
//+------------------------------------------------------------------+ 
bool CheckMoney( const string a_symbol, const long volume )
{
  if ( volume <= 0 )
  {
    Print( "Check Money: Объём лота указан не правильно!" );
    retutn ( false );
  } 
//---
  double a_go = SymbolInfoDouble( a_symbol, SYMBOL_MARGIN_INITIAL ) * double( volume);
  double free_margin = ( AccountInfoDouble( ACCOUNT_FREEMARGIN ) / 100 ) * 90; //90% от свободных средств
//---  
  if ( a_go <= free_margin )
  {
    return( true );
  }
  Print( "Check Money: Не достаточно средств!" );
  return( false );
}
 
Михаил:

1. Ich habe Ihnen ein Beispiel dafür gegeben, wie Sie die Struktur richtig ausfüllen, und Sie ignorieren diesen Rat.

Warum fragen Sie dann?

2) Build 1194 ist nicht mit den aktuellen Servern kompatibel (Renat erwähnte dies. Verwenden Sie vorerst Build 1159).

3. ich verwende OrderCheck() überhaupt nicht, ich prüfe die Mittel selbst.


1. Ich ignoriere sie keineswegs. Ich ignoriere sie keineswegs. Ich habe Ihr Beispiel in den Code eingefügt, jetzt beobachte ich es.

2. Oh, Mann! Das habe ich nicht gewusst.

3. ich habe dasselbe getan. Und die Funktion ist fast genau die gleiche, bis auf 90% (gute Idee übrigens)

Ich habe diese Frage aufgeworfen, weil meine Funktion (ähnlich wie Ihre) CS prüft und es erlaubt, die Position zu öffnen, während Standard OrderCheck() manchmal fehlschlägt.


Dies bezieht sich wahrscheinlich auf Punkt 2.

Im Terminalprotokoll finden sich viele Meldungen wie:

2015.10.22 21:28:13.966 Ticks   old tick @RTS (tick: 2015.10.22 18:28:21, last: 2015.10.22 18:28:22) 0/0
2015.10.22 21:28:13.966 Ticks   old tick RTS-12.15 (tick: 2015.10.22 18:28:21, last: 2015.10.22 18:28:22) 0/0
2015.10.22 21:28:13.966 Ticks   old tick @RTS (tick: 2015.10.22 18:28:21, last: 2015.10.22 18:28:22) 0/0
2015.10.22 21:28:13.966 Ticks   old tick RTS-12.15 (tick: 2015.10.22 18:28:21, last: 2015.10.22 18:28:22) 0/0
2015.10.22 21:28:13.966 Ticks   old tick @RTS (tick: 2015.10.22 18:28:21, last: 2015.10.22 18:28:22) 0/0
2015.10.22 21:28:13.966 Ticks   old tick RTS-12.15 (tick: 2015.10.22 18:28:21, last: 2015.10.22 18:28:22) 0/0
2015.10.22 21:27:40.995 Ticks   old tick @LKOH (tick: 2015.10.22 18:27:48, last: 2015.10.22 18:27:49) 0/0
2015.10.22 21:27:40.995 Ticks   old tick LKOH-12.15 (tick: 2015.10.22 18:27:48, last: 2015.10.22 18:27:49) 0/0
2015.10.22 21:26:38.952 Ticks   old tick @Si (tick: 2015.10.22 18:26:46, last: 2015.10.22 18:26:47) 0/0
2015.10.22 21:26:38.952 Ticks   old tick Si-12.15 (tick: 2015.10.22 18:26:46, last: 2015.10.22 18:26:47) 0/0
2015.10.22 21:26:38.952 Ticks   old tick @Si (tick: 2015.10.22 18:26:46, last: 2015.10.22 18:26:47) 0/0
2015.10.22 21:26:38.952 Ticks   old tick Si-12.15 (tick: 2015.10.22 18:26:46, last: 2015.10.22 18:26:47) 0/0
2015.10.22 21:26:38.952 Ticks   old tick @Si (tick: 2015.10.22 18:26:46, last: 2015.10.22 18:26:47) 0/0
2015.10.22 21:26:38.952 Ticks   old tick Si-12.15 (tick: 2015.10.22 18:26:46, last: 2015.10.22 18:26:47) 0/0
2015.10.22 21:26:38.952 Ticks   old tick @Si (tick: 2015.10.22 18:26:46, last: 2015.10.22 18:26:47) 0/0
2015.10.22 21:26:38.952 Ticks   old tick Si-12.15 (tick: 2015.10.22 18:26:46, last: 2015.10.22 18:26:47) 0/0
2015.10.22 21:26:38.952 Ticks   old tick @Si (tick: 2015.10.22 18:26:46, last: 2015.10.22 18:26:47) 0/0
 
demonsn:


1. Warum sollte ich sie ignorieren? Ich ignoriere sie keineswegs. Ich habe Ihr Beispiel in den Code eingefügt, jetzt beobachte ich es.

2. Oh, Mann! Das habe ich nicht gewusst.

3. ich habe dasselbe getan. Und die Funktion ist fast genau dieselbe, mit Ausnahme von 90 % (gute Idee, übrigens)

Ich habe genau diese Frage aufgeworfen, weil meine Funktion (ähnlich der Ihren) CS prüft und es erlaubt, die Position zu öffnen, während die Standardfunktion OrderCheck() manchmal versagt.

Verwenden Sie also Ihr eigenes FORTS - es ist viel korrekter :)
 
Михаил:
Verwenden Sie also alle Ihre eigenen FORTS - das ist viel korrekter :)

So macht man das schließlich auch! Irgendwo ist man versucht, den Code oder die Bibliothek eines anderen zu verwenden, um Zeit beim Schreiben eines "Rades" zu sparen oder eine Idee zu testen.

Aber am Ende muss man eine Woche damit verbringen, Fehler und Defekte von anderen Entwicklern zu finden. Am Ende wird alles für Sie umgeschrieben, so dass es keine Spuren von fremdem Code gibt.

 

Hallo!

Die Futures-Kleber erschienen im Testfenster, was an sich sehr erfreulich ist, aber als ich versuchte, den Kleber mit dem Kontrakt abzugleichen, stellte ich fest, dass es auf dem Kleber überhaupt keine Abschlüsse gibt - auf den Kontrakten ist alles in Ordnung - es gibt eine ganze Menge Abschlüsse. Ich habe vier Instrumente überprüft Si,RTS,GAZR,SBRF und den Zeitraum 01.01.2015 -24.10.2015.

 
Andrey Kotrin:

Hallo!

Die Futures-Kleber erschienen im Testfenster, was an sich sehr erfreulich ist, aber als ich versuchte, den Kleber mit dem Kontrakt abzugleichen, stellte ich fest, dass es auf dem Kleber überhaupt keine Abschlüsse gibt - auf den Kontrakten ist alles in Ordnung - es gibt eine ganze Menge Abschlüsse. Ich habe vier Instrumente überprüft Si,RTS,GAZR,SBRF und den Zeitraum 01.01.2015 -24.10.2015.

Das Testgerät funktioniert nicht korrekt mit Futures.
Grund der Beschwerde: