Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 24

 
Per favore, ditemi che sto usando una funzione dentro un'altra. In outer dichiaro una variabile. In quello interno, lo uso. Qui è circa
  string PositionSymboll = "";
   if  (PositionSymboll=PositionGetSymbol(i)){//Возвращает символ соответствующей открытой позиции и автоматически выбирает позицию для дальнейшей работы с ней
    if (PositionGetInteger(POSITION_MAGIC)== MAGIC)//Функция возвращает запрошенное свойство открытой позиции, предварительно выбранной
              { BU_();}}

Ecc. Giura così: 'PositionSymboll' - identificatore non dichiarato Redo.mq5 2472 5

Onestamente non mi aspettavo nessuna presa qui. Se lo incapsulo all'interno della funzione BU_() che sto usando, il pirimen sarà "nullo". Cosa dovrei fare meglio?

Sarebbe molto buono per me dichiararlo dentro la prima funzione, dentro il ciclo if.

 
Oh, tu! E anche dichiarandolo dentro la funzione void OnTick(), il compilatore giura lo stesso, già sulla prima funzione! Sono fuori, sono fuori...
 
Dimka-novitsek:
E anche dichiarandolo all'interno della funzione void OnTick(), il compilatore si lamenta ancora allo stesso modo, già sulla prima funzione! Passerò, è appena caduto fuori...
void OnStart()
  {
   int i=0; long MAGIC=1234;
   
   string PositionSymboll="";
   if(PositionSymboll=PositionGetSymbol(i))
     {//Возвращает символ соответствующей открытой позиции и автоматически выбирает позицию для дальнейшей работы с ней
      if(PositionGetInteger(POSITION_MAGIC)==MAGIC)//Функция возвращает запрошенное свойство открытой позиции, предварительно выбранной
        { BU_();}
     }
  }
void  BU_(){} 

compila normalmente, ma il costrutto

string PositionSymboll="";
   if(PositionSymboll)

discutibile, stai controllando la variabile stringa vero/falso ????????? sono perplesso

la domanda è retorica.

 
Grazie!!! Sto ancora imparando, questo è il mio primo EA in MQL5. Cosa intende per retorico?
 
Dimka-novitsek:
Grazie!!! Sto ancora imparando, questo è il mio primo EA in MQL5. Cosa intende per retorico?

Questo significa non richiedere una risposta.

Solo una variabile di tipo stringa passata come espressione in un'istruzione if, darà false solo in un caso, se la variabile non è stata inizializzata.

In tutti gli altri casi il contenuto della variabile sarà dato vero.

 
Grazie!!!
 

Potreste dirmi se c'è una funzione che dovrebbe restituire true se c'è un ordine pendente al prezzo inviato alla funzione. Ma restituisce "calvo" (alternativamente vero/falso). Per favore consigliatemi dove mi manca la logica di lavorare con gli ordini in mql5? (solo per imparare).


bool OrderExist(double price)                                                                      // функция возвращает наличие ордера на передаваемой цене
{
         
uint total=OrdersTotal();
ulong    ticket;

for(uint i=0;i<total;i++)
   {
   if((ticket=OrderGetTicket(i))>0)      
      {
      if(NormalizeDouble(OrderGetDouble(ORDER_PRICE_OPEN),4)== price)
         {
         return(true);
         }
      }
   }
return(false);
}
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров - Документация по MQL5
 
DMXX:

Per favore consigliatemi, c'è una funzione che dovrebbe restituire true se c'è un ordine pendente al prezzo che ho inviato alla funzione. Ma ne restituisce uno calvo (alternativamente vero/falso). Per favore consigliatemi dove mi manca la logica di lavorare con gli ordini in mql5? (solo per imparare).

Ma non è certo che l'ordine si sia aperto al prezzo dato, potrebbe esserci stato uno slittamento, quindi ottengo quanto segue: se l'ordine si è aperto in tempo - vero, se non l'ha fatto (il prezzo si è spostato) - falso.

 
fyords:
Ma non è il fatto che l'ordine sia stato aperto al prezzo stabilito, potrebbe essersi verificato uno slippage ed è per questo che otteniamo quanto segue: se l'ordine è stato aperto in tempo - vero, se non è stato aperto in tempo (il prezzo si è mosso) - falso.
Sì, è visualizzato nel terminale a questo prezzo. Se è in funzione, significa che è stato posizionato con successo, giusto?
 
DMXX:
Sì, è appeso nel terminale a questo prezzo. Se è in funzione, significa che è stato posizionato con successo, giusto?

Sì, è impostato, ma quando viene attivato...

O un altro esempio: abbiamo un ordine pendente, il suo prezzo differisce da quello attuale di 1 punto, al prossimo tick il prezzo salta non di 1 punto, ma, diciamo, di 3-5 punti, il che risulta in un'apertura ad un prezzo sbagliato. Un esempio ovvio è una lacuna.

O forse non capisco la domanda e sono muto.