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

 
Alexey Viktorov:

stringa AUDUSD = "AUDUSD";

Almeno così.

Questo è tutto!!! È stato così per me))), cancellato e dimenticato))

Grazie mille!!! Pace in casa tua!

 
Valeriy Yastremskiy:

Expert Advisor, script, indicatore non sono accessibili, ma lavorano nella finestra corrente. E le variabili globali di diverse finestre/carte non si sovrappongono. Pertanto, dovrebbe funzionare)

string AUDUSD; // Questa è una variabile di testo, oltre ad essere inizialmente vuota, cioè uguale a ""

(Symbol() == AUDUSD) // questa stringa non ha niente a che fare con la variabile AUDUSD.

Ma i criteri di apertura degli ordini non dovrebbero essere gli stessi per diversi strumenti/finestre. Se sono uguali, si aprirà effettivamente in tutte le finestre.

Grazie!

Ho implementato la logica in modo che l'Expert Advisor non ricevesse il segnale di apertura degli ordini quando si aprono in diverse finestre e capisse che il segnale di acquisto è stato dato per tale simbolo in modo che l'EA non interferisse con altri.

 
Denis Diakonov:

Eccolo!!! È stato così per me))), cancellato e dimenticato))

Grazie mille!!! La pace nella tua casa!

O come questo a livello di variabile globale

#define  AUDUSD "AUDUSD"
 
Alexey Viktorov:

O come questo a livello di variabile globale

In realtà è figo)) Ora il robot riceve un segnale e apre ordini su diverse coppie in diverse finestre contemporaneamente))

Grazie ancora!

 
Yerkin Sagandykov:

Il problema non è nei valori della variabile a mio parere. ho solo nel mio codice uulsovii ricalcolo al verificarsi di una nuova ora. e si scopre che il simbolo corrente nuova barra appare e calcolato il valore di bar = 1, ma il simbolo di segnale è una nuova barra non è ancora stato formato o ciò che è il valore per una barra = 2

Il problema è risolto facilmente - ho appena tracciato l'inizio di una nuova barra dal simbolo del segnale

 if  ( iTime(nameSym, LPeriod, 0 ) == counted_bar || iTime(nameSymSignal, LPeriod, 0 ) == counted_Signalbar) return; 
 
Per favore, datemi un suggerimento.
È possibile passare diversi parametri di switch case dal corpo della funzione? Ho dei tipi di ordini da aprire in caso di switch e sono riuscito a passare solo 1 parametro per aprire un ordine dalla funzione che definisce il punto di entrata nel mercato, come ho già capito è impossibile, quindi non so come implementarlo anche sequenzialmente
 
Denis Diakonov:
Si prega di avvisare.
È possibile passare diversi parametri di switch case dal corpo della funzione? Ho dei tipi di ordini da aprire in caso di switch e sono riuscito a passare solo 1 parametro per aprire un ordine dalla funzione che definisce il punto di entrata nel mercato, come ho già capito è impossibile, quindi non so ancora come implementarlo anche sequenzialmente

Per favore, mostratemi nel codice cosa vi interessa esattamente

 
Denis Diakonov:
Si prega di avvisare.
È possibile passare diversi parametri di switch case dal corpo della funzione? Ho dei tipi di ordini da aprire in caso di switch e sono riuscito a passare solo 1 parametro per aprire un ordine dalla funzione che definisce il punto di entrata nel mercato, come ho già capito è impossibile, quindi non so come implementarlo anche sequenzialmente

Si riferisce a una gamma di valori?

 
Vitaly Muzichenko:

Mostra al codice esattamente ciò che ti interessa

int OpenOrder()                                             
{
   switch(AUDUSD_Analizing)
   {
      case 0 : Alert("Нет условий для открытия ордера. Выход"); break;    
      case 1 : // кейс для открытия Buy по AUD/USD
               if(TimeServer() == true)                                     
               {
                  if(Symbol() == AUDUSD)
                  {
                  RefreshRates();
                  Open_Order = OrderSend("AUDUSD",OP_BUY,lot,Ask,0,0,0); 
                  Alert("Тикет открытого ордера ", Open_Order, GetLastError());
      case 2 : // кейс для открытия Sell по AUD/USD
               if(TimeServer() == true)                                     
               {
                  if(Symbol() == AUDUSD)
                  {
                  RefreshRates();
                  Open_Order = OrderSend("AUDUSD",OP_SELL,lot,Bid,0,0,0); 
                  Alert("Тикет открытого ордера ", Open_Order, GetLastError());
//-------------------------------------------------------------------------------------------------------------
// другая функция
//-------------------------------------------------------------------------------------------------------------

int AUDUSD_Analizing()
{    
   if(AUDUSD_Prices_new > AUDUSD_Prices_old)
   {
      s1 = AUDUSD_Prices1;
      s2 = AUDUSD_Prices2;
      s3 = s1 - s2;    
      if(raznica > s5)
      {
         Alert("--- ВРЕМЯ ОТКРЫВАТЬ ОРДЕР НА ПОКУПКУ ---");

и вот тут я могу либо прописать конкретное открытие ордера или несколько их штук(чем и решил заняться так 
как не нашел решения), либо вернуть номер кейса в первую функцию(что сократило бы код). 
Но мне нужно по условиям открывать сразу несколько сделок. К примеру нужно 2 на бай разом открыть, 
а возвращается только одно значение и исполняется один кейс и дальше уже на новый круг все идет, 
а мне нужно сразу несколько кейсов, допустим 5 выполнить, поставить 5 отложек и вот как передать не пойму, 
или как вызвать срабатывание кейсов в последовательности. Если с кейсами можно как-то придумать, то по
факту код влезет в рамку 400-600 строк, а так полагаю все 1000+ выйдет в лучшем случае
(разбитые по 100-200 строк на .mqh, но и из файлов тоже помойка сложится)

 
Alexey Viktorov:

Intende una gamma di valori?

No, per esempio passare prima il caso 1, poi il caso 2, ecc.

i casi eseguono l'apertura degli ordini