Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 33

 

Buona sera! Sono abbastanza sicuro che questa funzione produrrà esattamente quello che volevo, beh, quasi. Ma la macchina non compila, giura così

'}' - non tutti i percorsi di controllo restituiscono un valore htghtgfhthf.mq5 61 10 Le sta dicendo che ho qualcosa di sbagliato nella logica, non tutti i ritorni sono specificati lì. Sì, lo sono! Al contrario, se li mettiamo dopo ogni opiratore di if, sarà senza senso, il programma produrrà immediatamente il risultato sbagliato. È breve e va dritto al punto. Se si può, come si fa a farlo accettare?

string OrderType() { 
 string Si="";

 long lo;
 bool Bull=false; 
 Bull =PositionGetInteger(POSITION_TYPE,lo);
 if ( Bull ) {
 if ( lo==POSITION_TYPE_BUY) Si="OP_BUY";
 if ( lo==POSITION_TYPE_SELL) Si="OP_SELL";
 return (Si); }


 // ENUM_ORDER_TYPE ORType;

 Bull =OrderGetInteger(ORDER_TYPE,lo);
 if ( Bull ) {
 if ( lo==ORDER_TYPE_BUY_LIMIT) Si="OP_BUY_LIMIT";
 if ( lo==ORDER_TYPE_SELL_LIMIT) Si="OP_SELL_LIMIT";
 if ( lo==ORDER_TYPE_BUY_STOP) Si="OP_BUY_STOP";
 if ( lo==ORDER_TYPE_SELL_STOP) Si="OP_SELL_STOP";
 return (Si); }

 }
 
Dimka-novitsek:

Buona sera! Sono abbastanza sicuro che questa funzione produrrà esattamente quello che volevo, beh, quasi. Ma la macchina non compila, giura così

'}' - non tutti i percorsi di controllo restituiscono un valore htghtgfhthf.mq5 61 10 Mi sta dicendo che ho qualcosa di sbagliato nella logica, non tutti i ritorni sono specificati lì. Sì, lo sono! Al contrario, se li mettiamo dopo ogni opiratore di if, sarà senza senso, il programma produrrà immediatamente il risultato sbagliato. È breve e va dritto al punto. Se puoi, come puoi farlo accettare?

Un consiglio: imparate un po' di inglese tecnico. Fammi dare un'occhiata al codice.

Per quanto riguarda l'oggetto: la funzione deve restituire un valore di tipo stringa. All'interno della funzione usiamo l'istruzione if, che contiene le dichiarazioni di ritorno. Domanda: se l'istruzione if rileva che Bull == false, cosa dovrebbe restituire la funzione?

 
Naturalmente, Si="" ! Valore vuoto.
 

Aha!!! Grazie!!!

Grazie!!!!

 
Dimka-novitsek:

Buona sera! Sono abbastanza sicuro che questa funzione produrrà esattamente quello che volevo, beh, quasi. Ma la macchina non compila, giura così

'}' - non tutti i percorsi di controllo restituiscono un valore htghtgfhthf.mq5 61 10 Mi sta dicendo che ho qualcosa di sbagliato nella logica, non tutti i ritorni sono specificati lì. Sì, lo sono! Al contrario, se li mettiamo dopo ogni opiratore di if, sarà senza senso, il programma produrrà immediatamente il risultato sbagliato. È breve e va dritto al punto. Se può, come farlo accettare?

non tutti i percorsi di controllo restituiscono un valore - non c'è un controllo completo sul ritorno del valore.

Significa che nella stringa OrderType(), che deve avere un valore di ritorno poiché il tipo è diverso da void, non c'è un output garantito con un valore di ritorno.

Anche se avete impostato ben 2 operatori di ritorno, ma entrambi sono protetti dalla condizione if. Cosa succederà se entrambe le condizioni sono false?

Poi la macchina può saltare dalla finestra a piacimento.

A proposito, in questa funzione ha più senso usare il contatore switch, invece di un mucchio di if, che essenzialmente fanno lo stesso lavoro dello switch.

ZZZY Inoltre, non dobbiamo dimenticare che la posizione deve essere preselezionata, così come l'ordine. E c'è una funzione standard EnumToString per convertire le enumerazioni in stringhe, quindi non c'è bisogno di reinventare la ruota.

 
GRAZIE!!!
 
//+------------------------------------------------------------------+
//|                                                  Sample_Tick.mq5 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"

int Tick_All;

MqlTick           last_tick;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   Tick_All=0;

//---
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(!SymbolInfoTick(_Symbol,last_tick))
     {
      Print("Failed to get Symbol info!");
     }

   Tick_All++;
   Print(Tick_All,"   ",last_tick.bid,"   ",last_tick.ask,"  ",last_tick.last," ",last_tick.volume);
  }
//+------------------------------------------------------------------+


Non capisco perché OnTick viene chiamato anche se il prezzo non cambia?????

2012.09.10 11:52:11 Sample_Tick (EURUSD,M5) 493 1.2787 1.2789 1.2788 300000
2012.09.10 11:52:10 Sample_Tick (EURUSD,M5) 492 1.2787 1.2789 1.2788 300000
2012.09.10 11:52:09 Sample_Tick (EURUSD,M5) 491 1.2787 1.2789 1.2788 300000
2012.09.10 11:52:07 Sample_Tick (EURUSD,M5) 490 1.2787 1.2789 1.2788 300000

 
dentraf:

Non capisco perché OnTick viene attivato anche se il prezzo non cambia?????

2012.09.10 11:52:11 Sample_Tick (EURUSD,M5) 493 1.2787 1.2789 1.2788 300000
2012.09.10 11:52:10 Sample_Tick (EURUSD,M5) 492 1.2787 1.2789 1.2788 300000
2012.09.10 11:52:09 Sample_Tick (EURUSD,M5) 491 1.2787 1.2789 1.2788 300000
2012.09.10 11:52:07 Sample_Tick (EURUSD,M5) 490 1.2787 1.2789 1.2788 300000

Anche il tempo di aggiornamento dell'ultimo prezzo è invariato?
 
Yedelkin:
l'ora dell'ultimo aggiornamento dei prezzi non cambia nemmeno?

2012.09.10 15:37:20 Sample_Tick (EURUSD.m,M5) 20 1.27841 1.27852 1.27841 2000000 2012.09.10 14:37:19
2012.09.10 15:37:20 Sample_Tick (EURUSD.m,M5) 19 1.27841 1.27852 1.27841 2000000 2012.09.10 14:37:19
2012.09.10 15:37:20 Sample_Tick (EURUSD.m,M5) 18 1.27841 1.27852 1.27841 2000000 2012.09.10 14:37:18

o

2012.09.10 15:37:12 Sample_Tick (EURUSD.m,M5) 6 1.27835 1.27845 1.27835 1000000 2012.09.10 14:37:11
2012.09.10 15:37:12 Sample_Tick (EURUSD.m,M5) 5 1.27835 1.27845 1.27835 1000000 2012.09.10 14:37:11
2012.09.10 15:37:12 Sample_Tick (EURUSD.m,M5) 4 1.27835 1.27845 1.27835 1000000 2012.09.10 14:37:10

 
dentraf:

2012.09.10 15:37:20 Sample_Tick (EURUSD.m,M5) 20 1.27841 1.27852 1.27841 2000000 2012.09.10 14:37:19

L'ora del cambio di prezzo è GMT+3, credo. Di chi è il server?