Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 984

 
Ivan Butko:

Se sai quale condizione aggiungere o come implementare (se è facile), per favore condividi.

Posso, ma non è interessante controllare come funziona, quindi ecco uno schema

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:

Posso, ma non è interessante controllare come funziona, quindi l'ho solo abbozzato.

Igor, grazie. E non c'è bisogno di controllare, lo farò io stesso, naturalmente.

C'è un modo per farlo senza aspettare una spunta?

In modo che la richiesta di apertura sia andata immediatamente quando viene premuto il "push".

È come un pulsante standard di "acquisto/vendita" di apertura rapida delle operazioni nel terminale (in alto a sinistra del grafico). Lo premi e la vendita si apre istantaneamente. Basta aprire un paniere di ordini invece di un singolo trade, senza aspettare il tick.

Ci sono due implementazioni (per come la vedo io):
1) o un pulsante (simile) sul grafico che apre il cestino,
2) o un Expert Advisor. Il consulente mi sembra più conveniente, poiché può ripetere la richiesta di apertura (se ci sono problemi) più velocemente di quanto possa fare io.



UPD

Il tuo codice funziona, si apre su un nuovo tick, bene, grazie)


UPD

Mi sono anche ricordato: i copiatori hanno il parametro "ms", dove si può impostare il tempo di controllo. E se il master ha un accordo aperto, può inviare una richiesta di apertura di un accordo da 1 ms slave. Cioè, l'apertura istantanea è fattibile

 
Igor Makanu:

Posso, ma non è interessante controllare come funziona, quindi ecco uno schizzo

Igor, per favore controlla ad occhio, questa apertura è istantanea, senza aspettare un nuovo tick?

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, 0, 0, clrRed);

if(ticket > 0) break;

}

Dormire(1);

}

//---

return(INIT_SUCCEED);

}

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

E sembra funzionare come previsto...
 
Ivan Butko:



Altrimenti, sembra funzionare come previsto...

non la migliore opzione.... allora almeno scrivilo in questo modo

#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); 
   } 
}
//+------------------------------------------------------------------+

ma la prima opzione dovrebbe funzionare chiaramente se avete gettato su un grafico e premuto il pulsante autotrade quando si ritiene necessario "standby".

Se vuoi fare uno scambio, allora dovresti scriverlo così:

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

non la migliore opzione.... allora almeno scrivilo in questo modo

ma la prima opzione dovrebbe funzionare chiaramente se avete gettato su un grafico e premuto il pulsante autotrade quando si ritiene necessario "standby".

Se vuoi fare uno scambio, allora dovresti scriverlo così:

molte grazie
 

Grande! Il test delle varianti continua. La variante di Vladimir e Igor si è rivelata abbastanza veloce. In pratica, si è scoperto che i trade si aprivano più velocemente quando si cliccava il pulsante di acquisto rapido che quando si usava l'Expert Advisor. Entrambe le varianti hanno vantaggi e svantaggi. Un'altra cosa curiosa è che se prescriviamo nell'Expert Advisor quali coppie aprire una per una, queste si aprono una per una e molto lentamente... e se mettiamo 7 EAs in ogni grafico (più che altro senza carico), allora al contrario - tutte le operazioni si aprono istantaneamente, NON in sequenza, senza ritardi tra gli ordini (ma c'è ancora dello spazio di mezzo secondo o secondo all'inizio).

Voglio provare il pulsante sul grafico, ho trovato il manuale, ma descrive solo le coordinate e cose del genere. Per favore, dove nello script "button" dovrei scrivere il codice per aprire l'accordo? Per cliccarci sopra sul grafico e l'affare si è aperto. Come il pulsante standard di acquisto/vendita rapida di MT.

O come aggiornare il Pannello di commercio per aprire un paniere di ordini?

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

Voglio provare il pulsante sul grafico, ho trovato il manuale,

Non ho cercato il manuale, ma ho disegnato il pulsante )))

#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);
        }
     }
  }
//+------------------------------------------------------------------+

Se le impostazioni per il simbolo sarà "", quindi non aprire 0,01 lotto su questo simbolo, impostazione del lotto non ha fatto, per come l'argomento su come imparare, non guardare chi farà, cercare di attaccare se necessario ;)

 
Igor Makanu:

Non ho cercato un manuale, ma ho disegnato il pulsante ))))

se il simbolo è impostato su "", allora non aprire 0,01 lotto per questo simbolo, l'impostazione del lotto non ha fatto, per come l'argomento su come imparare, non guardare chi farà, cercare di attaccare se necessario ;)

Grazie mille, Igor, veloce e preciso!

cercherà

 
Igor Makanu:

Strano, se in un EA, apre i trade uno dopo l'altro per ogni coppia di valute specificata... con un ritardo temporale. E quando lo metti su 5 diversi grafici con diverse coppie di valute (simbolo(0)), tutti e 5 i trade si aprono simultaneamente e istantaneamente quando premi autotrade.

Potete suggerire cosa può essere e come risolvere il problema? Avere tutto in un solo EA e su un solo grafico (in modo che il pulsante sul grafico apra tutte le coppie velocemente come quando si attiva "autotrade" con diversi EA, come nella versione originale)