Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 984

 
Ivan Butko:

Wenn Sie wissen, welche Bedingung hinzuzufügen ist oder wie man sie implementiert (wenn es einfach ist), teilen Sie es bitte mit.

Das kann ich, aber es ist uninteressant zu prüfen, wie es funktioniert, also hier ein Überblick

void OnTick()
{  static int ticket = -1;
   while(!IsStopped() &&ticket<0)
   {  if(TerminalInfoInteger(TERMINAL_CONNECTED) && TerminalInfoInteger(TERMINAL_TRADE_ALLOWED) && !IsTradeContextBusy())
      {  
         RefreshRates();
         ticket = OrderSend("EURUSD", OP_SELL, 0.01, Bid, 3, 0, 0, "", 0, 0, clrRed);
         if(ticket > 0) break; 
      }
   Sleep(123); 
   }
}
 
Igor Makanu:

Das kann ich, aber es ist nicht interessant zu prüfen, wie es funktioniert, also habe ich es einfach skizziert.

Igor, ich danke dir. Und Sie brauchen das nicht zu überprüfen, das mache ich natürlich selbst.

Gibt es eine Möglichkeit, dies zu tun, ohne auf ein Häkchen zu warten?

Damit die Aufforderung zum Öffnen sofort erfolgt, wenn der "Push" gedrückt wird.

Es handelt sich um eine Standardschaltfläche für die schnelle Eröffnung von Geschäften im Terminal (links oben im Diagramm). Sie drücken darauf und der Verkauf wird sofort eröffnet. Sie brauchen nur einen Korb von Aufträgen anstelle eines einzelnen Geschäfts zu eröffnen, ohne auf den Tick zu warten.

Meines Erachtens gibt es zwei Möglichkeiten der Umsetzung:
1) entweder eine Schaltfläche (ähnlich) auf der Karte, die den Korb öffnet,
2) oder einen Expert Advisor. Der Berater scheint mir bequemer zu sein, da er die Aufforderung zum Öffnen (falls es Probleme gibt) schneller wiederholen kann als ich.



UPD

Ihr Code funktioniert, öffnet sich in einem neuen Tick, cool, danke)


UPD

Mir ist auch eingefallen, dass Kopierer einen Parameter "ms" haben, mit dem man die Prüfzeit einstellen kann. Und wenn der Master ein offenes Geschäft hat, kann er eine Anfrage zur Eröffnung eines Geschäfts von 1 ms Slave senden. D.h., eine sofortige Öffnung ist machbar

 
Igor Makanu:

Das kann ich, aber es ist uninteressant zu prüfen, wie es funktioniert, also hier eine Skizze

Igor, überprüfen Sie bitte mit dem Auge, ob diese Öffnung sofort erfolgt, ohne auf einen neuen Tick zu warten?

int OnInit()

{

//---

static int ticket = -1;

while(!IsStopped() &&ticket<0)

{ if(TerminalInfoInteger(TERMINAL_CONNECTED) && TerminalInfoInteger(TERMINAL_TRADE_ALLOWED) && !IsTradeContextBusy())

{

RefreshRates();

ticket = OrderSend("EURUSD", OP_SELL, 0.01, Bid, 3, 0, 0, "", 0, 0, clrRed);

if(ticket > 0) break;

}

Schlafen(1);

}

//---

return(INIT_SUCCEEDED);

}

------------------

Und es scheint wie vorgesehen zu funktionieren...
 
Ivan Butko:



Ansonsten scheint es wie vorgesehen zu funktionieren...

nicht die beste Option.... dann schreiben Sie es wenigstens so

#property strict
int ticket = -1;
int OnInit()
{  if(ticket < 0) SendMyOrder();
   return(INIT_SUCCEEDED); 
}
//+------------------------------------------------------------------+
void OnTick()
{
   if(ticket < 0) SendMyOrder();
}
//+------------------------------------------------------------------+
void SendMyOrder()
{  while(!IsStopped() && ticket < 0)
   {  if(TerminalInfoInteger(TERMINAL_CONNECTED) && TerminalInfoInteger(TERMINAL_TRADE_ALLOWED) && !IsTradeContextBusy())
      {  RefreshRates();
         ticket = OrderSend("EURUSD", OP_SELL, 0.01, Bid, 3, 0, 0, "", 0, 0, clrRed);
         if(ticket > 0) break; 
      }
      Sleep(123); 
   } 
}
//+------------------------------------------------------------------+

aber die erste Option sollte eindeutig funktionieren, wenn Sie auf ein Diagramm geworfen haben und die Autotrade-Taste gedrückt haben, wenn Sie es für notwendig halten, "Standby".

Wenn Sie ein Geschäft machen wollen, dann sollten Sie es auch so schreiben:

void OnTick()
{
   if(ticket < 0) SendMyOrder();
   if(ticket > 0) ExpertRemove();
}
 
Igor Makanu:

nicht die beste Option.... dann schreiben Sie es wenigstens so

aber die erste Option sollte eindeutig funktionieren, wenn Sie auf ein Diagramm geworfen haben und die Autotrade-Taste gedrückt haben, wenn Sie es für notwendig halten, "Standby".

Wenn Sie ein Geschäft machen wollen, dann sollten Sie es auch so schreiben:

vielen Dank
 

Großartig! Die Prüfung der Varianten wird fortgesetzt. Die Variante von Vladimir und Igor erwies sich als recht schnell. In der Praxis zeigte sich, dass die Geschäfte schneller eröffnet wurden, wenn man auf die Schaltfläche "Schnellkauf" klickte, als wenn man den Expert Advisor verwendete. Beide Varianten haben Vor- und Nachteile. Eine weitere merkwürdige Sache ist, dass, wenn wir in der Expert Advisor, die Paare zu öffnen, eine nach der anderen, sie öffnen eine nach der anderen und sehr langsam ... und wenn wir 7 Expert Advisors für jeden Chart (mehr wie keine Last), dann im Gegenteil - alle Geschäfte öffnen sofort, NICHT in der Reihenfolge, ohne Verzögerungen zwischen den Aufträgen (aber es gibt immer noch einige Lücke von einer halben Sekunde oder einer Sekunde am Anfang).

Ich möchte die Schaltfläche auf der Karte ausprobieren, habe das Handbuch gefunden, aber es beschreibt nur die Koordinaten und so. An welcher Stelle im Skript "Schaltfläche" sollte ich den Code zum Öffnen des Geschäfts schreiben? Klicken Sie darauf im Diagramm und das Geschäft wird geöffnet. Wie bei der Standard-MT-Schnellkauf-/Verkaufsschaltfläche.

Oder wie kann man das Handels-Panel aktualisieren, um einen Korb von Aufträgen zu öffnen?

 
Bitte helfen Sie mit
Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам
Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам
  • 2019.10.14
  • www.mql5.com
В этой ветке я хочу начать свою помощь тем, кто действительно хочет разобраться и научиться программированию на новом MQL4 и желает легко перейти н...
 
Ivan Butko:

Ich möchte die Taste auf der Karte ausprobieren, habe das Handbuch gefunden,

Ich habe nicht nach dem Handbuch gesucht, sondern die Schaltfläche gezeichnet )))

#property copyright "IgorM"
#property link      "https://www.mql5.com/ru/users/igorm"
#property version   "1.00"
#property strict
input string   sym1 = "EURUSD";
input string   sym2 = "GBPUSD";
input string   sym3 = "USDCAD";
input string   sym4 = "USDJPY";
input string   sym5 = "AUDUSD";
#include <Controls\Button.mqh>
CButton ButtonSend;

string sym[5];
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   sym[0] = sym1;
   sym[1] = sym2;
   sym[2] = sym3;
   sym[3] = sym4;
   sym[4] = sym5;
   ButtonSend.Create(0, "ButtonSend" + _Symbol, 0, 10, 50, 100, 90);
   ButtonSend.Color(clrRed);
   ButtonSend.Text("Kill Forex!");
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   static int ticket[5] = {-1, -1, -1, -1, -1 };
   if(ticket[0] > 0 && ticket[1] > 0 && ticket[2] > 0 && ticket[3] > 0 && ticket[4] > 0) return;
   if(ButtonSend.Pressed())
     {
      ButtonSend.Pressed(false);
      Print("Start OrderSend()");
      while(!IsStopped())
        {
         if(TerminalInfoInteger(TERMINAL_CONNECTED) && TerminalInfoInteger(TERMINAL_TRADE_ALLOWED) && !IsTradeContextBusy())
           {
            RefreshRates();
            for(int i = 0; i < 5; i++)
              {
               if(sym[i] == "") ticket[i] = INT_MAX;
               if(ticket[i] > 0) continue;
               ticket[i] = OrderSend(sym[i], OP_SELL, 0.01, SymbolInfoDouble(sym[i],SYMBOL_BID), 3, 0, 0, "", 0, 0, clrRed);
              }
           }
         if(ticket[0] > 0 && ticket[1] > 0 && ticket[2] > 0 && ticket[3] > 0 && ticket[4] > 0)  break;
         Sleep(123);
        }
     }
  }
//+------------------------------------------------------------------+

Wenn die Einstellungen für das Symbol wird "", dann nicht öffnen 0,01 viel auf dieses Symbol, viel Einstellung nicht getan hat, denn wie das Thema, wie zu lernen, nicht zu sehen, wer tun wird, versuchen Sie, sich selbst zu befestigen, wenn nötig ;)

 
Igor Makanu:

Ich habe nicht nach einer Anleitung gesucht, sondern die Schaltfläche )))) gezeichnet.

wenn das Symbol auf "" gesetzt ist, dann öffnen Sie nicht 0,01 Lot für dieses Symbol, Lot-Einstellung nicht getan hat, für als das Thema, wie zu lernen, nicht zu sehen, wer tun wird, versuchen Sie, sich selbst zu befestigen, wenn nötig ;)

Vielen Dank, Igor, schnell und auf den Punkt gebracht!

wird versuchen

 
Igor Makanu:

Seltsam, wenn in einem EA für jedes angegebene Währungspaar ein Handel nach dem anderen eröffnet wird... mit einem Zeitintervall. Und wenn Sie es auf 5 verschiedene Charts mit verschiedenen Währungspaaren (Symbol(0)) setzen, öffnen sich alle 5 Trades gleichzeitig und sofort, wenn Sie Autotrade drücken.

Können Sie mir sagen, woran das liegen könnte und wie man es beheben kann? Alles in einem EA und auf einem Diagramm zu haben (so dass die Schaltfläche auf dem Diagramm alle Paare so schnell öffnet, wie bei der Aktivierung von "autotrade" mit mehreren EAs, wie in der ursprünglichen Version)

Grund der Beschwerde: