Fragen von einem "Dummy" - Seite 137

 
alph:

Könnten Sie mir einen Code für einen EA geben, der eine Position nach 5-6 Stunden schließt? Oder geben Sie mir einen Link.

Wenn Sie daran interessiert sind, können Sie es selbst ausprobieren. Prüfen Sie zunächst mit der Funktion PositionSelect(), ob eine Position geöffnet ist, ermitteln Sie dann mit PositionGetInteger(POSITION_TIME) den Zeitpunkt der Positionseröffnung und überprüfen Sie Ihre Bedingung von 5-6 Stunden. Wenn es an der Zeit ist, die Position zu schließen, erfahren Sie den Typ der Position (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE) und ihr Volumen PositionGetDouble(POSITION_VOLUME) . Dann setzen Sie einen entgegengesetzten Auftrag mit demselben Volumen. Ein Beispiel für die Positionsschließungsmethode finden Sie unter MQL5\Include\Trade\Trade .mqh\PositionClose(const string symbol,ulong deviation=ULONG_MAX).

 
joo:
Danke, das scheint genau das zu sein, was wir brauchen.

Nicht wirklich.

Um das "Mausklick"-Ereignis zu erhalten, muss OnChartEvent() verwendet werden, aber es kann nicht in Skripten verwendet werden, was soll ich tun? Es gibt also keine universelle Funktion?

 
joo:

Nicht wirklich.

Um das "Mausklick"-Ereignis zu erhalten, muss OnChartEvent() verwendet werden, aber es kann nicht in Skripten verwendet werden, was soll ich tun? Es gibt also keine universelle Funktion?

Dann verwenden Sie GetKeyState + GetPosition + bekannte Koordinaten der grafischen Objekte.
 
sergeev:
Verwenden Sie dann GetKeyState + GetPosition + bekannte Koordinaten der grafischen Objekte.

VinApi?

Das war's, ich habe keine Lust mehr, eine universelle Funktion zum Durchsuchen und Auswählen einer Datei aus einer Liste (eine Art Mini-Dateimanager) zu erstellen. :(

 
joo:

WINAPI?

Das war's, ich habe die Lust verloren, eine universelle Funktion zum Durchsuchen und Auswählen einer Datei aus einer Liste zu machen (eine Art Mini-Dateimanager). :(

Warum ein Skript? Wie wollen Sie eine Funktion erstellen und auf die Wahl des Benutzers für mehr als einen Tick warten?
 
sergeev:
warum dann das Drehbuch?
Denn ihr ist es egal, ob die Zecken ticken oder nicht.
 
Yedelkin:

Siehe ein Beispiel für eine Methode zum Schließen einer Position unter MQL5\Include\Trade\Trade.mqh\PositionClose(const string symbol,ulong deviation=ULONG_MAX).

Ich danke Ihnen.

Aber ich bin noch nicht in der Lage, Klassen zu verstehen, obwohl das, was ich habe, in der Regel darauf zurückzuführen ist, dass ich es irgendwo gesehen und herausgefunden habe.

 
joo:
denn es ist ihm egal, ob die Zecken ticken oder nicht.
Ist es dem Experten also egal, warum das Drehbuch?
 
alph:

Aber mit dem Unterricht habe ich noch nicht den Dreh raus, auch wenn das, was ich bekomme, meist auf Kosten des Sehens und Herausfindens geht.

Nun, jede Klassenmethode ist nur einfacher Code. Versuchen Sie, diesen Code hier zu analysieren:

   MqlTradeRequest   m_request={0};         // request data
   MqlTradeResult    m_result={0};          // result data
   MqlTradeCheckResult m_check_result={0};  // result check data
   bool   partial_close=false;
   int    retry_count  =10;
   uint   retcode      =TRADE_RETCODE_REJECT;
  
     do
     {
      //--- checking
      if(PositionSelect(symbol))
        {
         if((ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
           {
            //--- prepare request for close BUY position
            m_request.type =ORDER_TYPE_SELL;
            m_request.price=SymbolInfoDouble(symbol,SYMBOL_BID);
           }
         else
           {
            //--- prepare request for close SELL position
            m_request.type =ORDER_TYPE_BUY;
            m_request.price=SymbolInfoDouble(symbol,SYMBOL_ASK);
           }
        }
      else
        {
         //--- position not found
         m_result.retcode=retcode;
         return(false);
        }
      //--- setting request
      m_request.action      =TRADE_ACTION_DEAL;
      m_request.symbol      =symbol;
      m_request.deviation   =(deviation==ULONG_MAX) ? m_deviation : deviation;
      m_request.type_filling=m_type_filling;
      m_request.volume      =PositionGetDouble(POSITION_VOLUME);
      //--- check volume
      double max_volume=SymbolInfoDouble(symbol,SYMBOL_VOLUME_MAX);
      if(m_request.volume>max_volume)
        {
         m_request.volume=max_volume;
         partial_close=true;
        }
      else
         partial_close=false;
      //--- order check
      if(!OrderCheck(m_request,m_check_result))
        {
         //--- copy return code
         m_result.retcode=m_check_result.retcode;
         return(false);
        }
      //--- order send
      if(!OrderSend(m_request,m_result))
        {
         if(--retry_count!=0) continue;
         if(retcode==TRADE_RETCODE_DONE_PARTIAL)
            m_result.retcode=retcode;
         return(false);
        }
      retcode=TRADE_RETCODE_DONE_PARTIAL;
      if(partial_close) Sleep(1000);
     }
   while(partial_close);
 
sergeev:
Der Experte kümmert sich also nicht darum. Warum ein Skript?
Wenn es sich nicht um ein Skript handelt, sollte die gesamte Logik in/aus OnChartEvent() ausgeführt/aufgerufen werden?