Una domanda per gli esperti di MQL - pagina 13

 

Perché il codice nel ciclo non funziona

mentre(!IsStopped())

{

codice

Dormire(50);

}

Ma con le zecche funziona bene

 
seka-s79:

Perché il codice nel ciclo non funziona

Perché il pollo non corre dall'altra parte della strada
 

А! Capito! Grazie!!!

 

Problema con Symbol() MT4:

2 funzioni da illustrare:

string   SymbolOK()
{

   string   value;
   string   argument = "ANYTHING";

   if(false)
   {
      value = argument;
   }

   return(value);

}

string   SymbolPROBLEM()
{

   string   value;
   string   argument = Symbol();

   if(false)
   {
      value = argument;
   }

   return(value);

}

L'esecuzione del primo produce una stringa vuota:

int start()
{
   Comment(SymbolOK());
   return(0);
}

Ma la seconda funzione produce una stringa ID "EURUSD" (beh, dipende dal grafico, ma produce, anche se secondo la logica della funzione dovrebbe essere una stringa vuota):

int start()
{
   Comment(SymbolPROBLEM());
   return(0);
}

Aiutatemi a capire cosa c'è che non va? Grazie

 
anton.veksler:

Problema con Symbol() MT4:

2 funzioni da illustrare:

L'esecuzione del primo produce una stringa vuota:

Ma la seconda funzione produce una stringa ID "EURUSD" (beh, dipende dal grafico, ma produce, anche se secondo la logica della funzione dovrebbe essere una stringa vuota):

Aiutatemi a capire cosa c'è che non va? Grazie

Il vostro if(false) non funzionerà mai, quindi il valore non cambierà in alcun modo, e molto probabilmente sarà una stringa vuota. Anche se non so come vengono inizializzati i valori delle variabili stringa. Forse non sono iniziati affatto, allora nella tua versione tutto può essere emesso.
 
Sepulca:
Il vostro if(false) non funzionerà mai, quindi il valore non cambierà in alcun modo, e molto probabilmente sarà una stringa vuota. Anche se non so come vengono inizializzati i valori delle variabili stringa. Forse non sono iniziati affatto, allora nella tua versione tutto può essere emesso.

"...Se nessun valore iniziale è impostato esplicitamente, una variabile numerica è inizializzata a zero (0) e una variabile stringa è inizializzata alla stringa vuota....".
 
zoritch:
"...Se nessun valore iniziale è impostato esplicitamente, una variabile numerica è inizializzata a zero (0) e una variabile stringa è inizializzata alla stringa vuota...."



Ecco, l'hai trovato anche nella documentazione... Ma in generale una domanda d...n... Non preoccuparti, non è così difficile da digitare invece:

string   value;

qualcosa del genere:

string   value="ЭтоСтрокаПокаЕёЕщёНиктоНеТрогал";
 
Sepulca:



Ecco, l'hai trovato anche nella documentazione... Ma in generale è una domanda stupida. Non è troppo difficile da digitare invece:

qualcosa del genere:


Grazie per aver risposto. Riguardo alla documentazione, so che senza inizializzazione esplicita, la variabile stringa sarà una stringa vuota, ma questa funzione restituisce un codice carattere dello strumento. Cioè non entreremo mai in una condizione (falsa intenzionalmente), quindi come valore diventa Symbol() in questa versione (questo esempio della funzione è esagerato), cioè con l'inizializzazione implicita la variabile stringa non è una stringa vuota (e ci contavo davvero), ma qualcosa di poco chiaro, o meglio il meccanismo di inizializzazione implicita delle stringhe non è chiaro. "Imbottire" la dichiarazione della variabile non è difficile, è solo il comportamento del sistema al di fuori della documentazione che in qualche modo confonde. E soprattutto, questo accade quando si usa Symbol().


string   SymbolPROBLEM()
{

   string   value;
   string   argument = Symbol();

   if(false)
   {
      value = argument;
   }

   return(value);

}
 

Buon pomeriggio a tutti!

Ho scritto un Expert Advisor per l'arbitraggio. Il segnale di entrata viene generato se la divergenza attuale delle linee di prezzo dell'indicatore DELTA_MA supera il valore DELTA impostato nei parametri:

//жжжжжжжжжжжжжжжжжжжжжжж Ищем возможность войти в рынок жжжжжжжжжжжжжжжжжжжжжжжж
// Задаем ценовые линии МА на 1-м баре
  MA_1=   (iMA(Symbol_1,Period(),per2,0,ma_method,Price,1)-
           iMA(Symbol_1,Period(),per1,0,ma_method,Price,1)) ;  
  MA_2= (iMA(Symbol_2,Period(),per2,0,ma_method,Price,1)-
         iMA(Symbol_2,Period(),per1,0,ma_method,Price,1))   ;                 
 ДЕЛЬТА_MA  =   MathAbs(MA_1 - MA_2 ) ; //- разность ценовых линий на 1 баре        
//------------------------------------------------ 

if (ДЕЛЬТА_MA > ДЕЛЬТА && MA_1 > MA_2)//если линии разошлись больше заданного значения
       //(первыя выше второй), то продаем 1-й инструмент и покупаем/продаем второй 
      TradeDOWN=true;       else TradeDOWN=false;

L'EA funziona bene e correttamente! I problemi sono iniziati quando ho voluto inserire un filtro che permette di entrare solo se la prima condizione è soddisfatta - la convergenza delle linee di prezzo allo stesso tempo:

extern double       ДЕЛЬТА = 350;

extern string  ____F____  = "=== FILTER ===";
 extern bool     FILTER_= true; //Арбитр. вход реализуется только при схождении линий
L'algoritmo per tale condizione è implementato come segue
Motivazione: