Diskussion über die Einführung von Ratsmitgliedern. - Seite 2

 
Georgiy Merts:

Außerdem hat dieser Forumsteilnehmer selbst auf die Frage hin gesagt, dass er sich nicht mehr daran erinnert, sondern dass dieser Code bereits viele Male getestet wurde und man ihm vertrauen kann.

Nun, wenn ich die Gelegenheit habe, diese dummen "Fragen" durch echte "Wenn"-Anweisungen zu ersetzen, werde ich herausfinden, wie man das macht... Im Moment...

Übrigens habe ich heute einen Blick auf diesen Horror geworfen.

Das bedeutet Folgendes:

ENUM_ORDER_TYPE_FILLING otfMyRes  = WRONG_VALUE;   

if(iFillingMode == 0 || (otfFilingType >= ORDER_FILLING_RETURN) || ((iFillingMode & (otfFilingType + 1)) != otfFilingType + 1))
	{
        if(steExeMode == SYMBOL_TRADE_EXECUTION_EXCHANGE || steExeMode == SYMBOL_TRADE_EXECUTION_INSTANT)
                otfMyRes = ORDER_FILLING_RETURN;
        else   
                if(iFillingMode == SYMBOL_FILLING_IOC)
                        otfMyRes = ORDER_FILLING_IOC;
                else
                        otfMyRes = ORDER_FILLING_FOK;
        }
   else      
        otfMyRes = otfFilingType;

return(otfMyRes);  

Meiner Meinung nach ist der Text ohne diese "Fragen", durch "wenn" und mit Einrückung viel klarer. Die Effizienz des Codes ist jedoch absolut gleich.

Sie können übrigens sofort sehen, dass der Autor sich an numerische Werte für iFillingMode und otfFilingType gehalten hat, was meiner Meinung nach keine gute Praxis ist.

 
Georgiy Merts:

Übrigens habe ich heute einen Blick auf diesen Horror geworfen.

Das bedeutet Folgendes:

Meiner Meinung nach ist der Text ohne diese "Fragen", durch "wenn" und mit Einrückungen viel klarer. Die Effizienz des Codes ist jedoch absolut gleich.

Sie können übrigens sofort sehen, dass der Autor sich an numerische Werte für iFillingMode und otfFilingType gehalten hat, was meiner Meinung nach keine gute Praxis ist.

In meiner Bibliothek sieht das so aus:

#ifdef __MQL5__
   ENUM_ORDER_TYPE_FILLING COrder::GetFilling(ENUM_FILLING_MODE mFilling){
      if (!_fillingMode) return ORDER_FILLING_RETURN;
      else if (mFilling==FILLING_AUTO||mFilling==FILLING_FOK) return !(_fillingMode&SYMBOL_FILLING_FOK)?ORDER_FILLING_IOC:ORDER_FILLING_FOK;
      else return  !(_fillingMode&SYMBOL_FILLING_IOC)?ORDER_FILLING_FOK:ORDER_FILLING_IOC;}
#endif

_fillingMode ist ein Makro, das sich auf die Dereferenzierung dieses Feldes ausdehnt

fillingMode=(int)SymbolInfoInteger(symbol,SYMBOL_FILLING_MODE);
 
Georgiy Merts:

Das ist eine andere Sache.

Wenn ich so darüber nachdenke, schaue ich mir manchmal meinen eigenen Code an und verstehe nicht, warum er an dieser bestimmten Stelle geschrieben ist. Deshalb versuche ich, solche Stellen sehr ausführlich zu kommentieren und alle Details zu erwähnen. Dennoch stelle ich regelmäßig fest, dass ich einige Dinge nicht bedacht habe.

Außerdem verwende ich den folgenden Code (um die Art der Ausführung zu bestimmen), der von einem sehr seriösen Forumsbenutzer geschrieben wurde:

Außerdem hat dieser Forumsteilnehmer selbst auf Nachfrage gesagt, dass er sich nicht mehr daran erinnert, sondern dass dieser Code bereits viele Male getestet wurde und man ihm vertrauen kann .

Nun, wenn ich die Gelegenheit habe, diese dummen "Fragen" durch echte "Wenn"-Anweisungen zu ersetzen, werde ich herausfinden, wie man das macht... Im Moment...

Gelb - sehr seltsam, dass eine Person nicht sofort den trivialen Code verstehen kann, den sie selbst geschrieben hat.

Red - Ich war nicht zu faul und überprüft wieder, wenn die Ausführung auf dem Markt, kann ich nicht ORDER_FILLING_RETURN, es ist nur für Lager (es gibt einen Fehler in Docks), und das ist, was die respektierte Forum Besitzer zurückgegeben hat)))

 
Vladimir Simakov:

Gelb - es ist sehr seltsam, dass eine Person einen trivialen Code, den sie selbst geschrieben hat, nicht versteht.

Red - Ich habe nicht das Gefühl, faul und überprüft wieder, wenn die Ausführung auf dem Markt, können Sie nicht ORDER_FILLING_RETURN, ist es nur für den Austausch (es ist ein Fehler in den Docks), und das ist, was die respektierte Forum Mitglied zurückgibt)))

Ich weiß nicht, ich weiß nicht, wie "trivial" dieser Code in einem solchen Eintrag ist. Ich habe mindestens 15 Minuten gebraucht, um die Logik zu verstehen, und erst durch das Aufschreiben der Wenns hat es für mich einen Sinn ergeben.

Und zu "es gibt einen Fehler in den Unterlagen" - können Sie das näher erläutern?

 
Georgiy Merts:

Ich weiß nicht, ich weiß nicht, wie "trivial" dieser Code in einem Beitrag wie diesem ist. Ich habe mindestens 15 Minuten gebraucht, um die Logik der Arbeit zu verstehen, und erst durch das Aufschreiben der Wenns wurde sie mir klar.

Und über "in docks error" - können Sie mir mehr darüber erzählen?

Bei der Börsenausführung

SymbolInfoInteger(symbol,SYMBOL_FILLING_MODE)

er gibt 0 zurück, aber auf dem Markt (ich habe es bei Alpari überprüft)

SYMBOL_FILLING_IOC | SYMBOL_FILLING_FOK

Ich habe es mit Alpari überprüft und es gibt 0x3 zurück. Wenn Sie es auf diese Weise versuchen

MqlTradeRequest::filling_mode=ORDER_FILLING_RETURN

Wenn Sie es versuchen, lässt es sich nicht öffnen.

 
Vladimir Simakov:

dann lässt es sich nicht öffnen.

Überprüfen Sie die ursprüngliche Funktion.

#include <MT4Orders.mqh>

#define  Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)

void OnTick()
{
  if (!OrdersTotal())
  {
    OrderSend(_Symbol, OP_BUY, 0.1, Ask, ORDER_FILLING_FOK, 0, 0);    
    OrderSend(_Symbol, OP_BUY, 0.1, Ask, ORDER_FILLING_IOC, 0, 0);    
    OrderSend(_Symbol, OP_BUY, 0.1, Ask, ORDER_FILLING_RETURN, 0, 0);    
  }  
}

Es funktioniert.

 
fxsaber:

Überprüfen Sie die ursprüngliche Funktion.

Es funktioniert.

Versuchen Sie es mit der Marktausführung und nicht mit der Börsenausführung)

UPD: Korrektur, bei sofortiger Ausführung, die, die

SYMBOL_TRADE_AUSFUEHRUNG_INSTANT

 
Vladimir Simakov:

Versuchen Sie es mit einer Marktausführung und nicht mit einer Börsenausführung)

UPD: Korrektur, bei sofortiger Ausführung, die, die

SYMBOL_TRADE_AUSFUEHRUNG_INSTANT

Test EA oben. Probieren Sie es aus.

 
Vladimir Simakov:

Versuchen Sie es mit einer Marktausführung und nicht mit einer Börsenausführung)

UPD: Korrektur, bei sofortiger Ausführung, die, die

SYMBOL_TRADE_AUSFUEHRUNG_INSTANT

Dies sind zum Beispiel Standardkonten in A-ri, richtig?

Und Makler, die handeln, haben immer diese Art von Ausführung, richtig?

Nur zur Klarstellung.

 

Wozu die Mühe?

Verwenden Sie Standardklassen und brauchen Sie keine Strukturen(MqlTradeRequest) zu füllen und keine Füllungen und Instanzen zu kennen:


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

CTrade  
CAccountInfo 
CPositionInfo