Domande da un "manichino" - pagina 244

 
paladin800:
Sto scrivendo un Expert Advisor multivaluta dove nei parametri di input imposto il nome dello strumento, come la stringa Symbol0="EURUSD". Se scrivo il nome sbagliato, lo scambio non va. La mia domanda è: esiste una tale funzione che confronta i nomi degli strumenti con quelli offerti dal broker?
No. Dovresti controllare tu stesso.
 
paladin800: Domanda: c'è una funzione che confronta il nome dello strumento con gli strumenti forniti dal broker.
La questione è cosa volete vedere nell'output. Fondamentalmente, qualsiasi funzione standard che utilizza un nome simbolico di uno strumento come uno dei suoi parametri, "confronta" il nome specificato dall'utente con i nomi degli strumenti del broker. E c'è anche un errore ERR_MARKET_UNKNOWN_SYMBOL (4301) per tali funzioni.
 
Yedelkin:
La questione è cosa volete vedere nell'output. Fondamentalmente, qualsiasi funzione standard che utilizza un nome simbolico di strumento come uno dei suoi parametri, "confronta" il nome specificato dall'utente con i nomi degli strumenti del broker. E c'è anche un errore ERR_MARKET_UNKNOWN_SYMBOL (4301) per tali funzioni.
Fondamentalmente, sì, quando la maniglia dell'indicatore viene cercata per un simbolo che non esiste, viene generato l'errore. In genere, a questo punto posso emettere un messaggio di errore nei parametri di input dell'avviso.
Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки компиляции
Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки компиляции
  • www.mql5.com
Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки компиляции - Документация по MQL5
 
paladin800 Fondamentalmente sì, quando la maniglia dell'indicatore viene poi cercata per un simbolo che non esiste, viene generato un errore. In generale, a questo punto posso emettere un messaggio di errore nei parametri di input dell'avviso.
Potete scrivere la vostra mini-funzione, che controllerà la correttezza dei parametri delle stringhe. Usa qualcosa come SymbolSelect(...,true) o SymbolInfoString(...,SYMBOL_DESCRIPTION, ...) con controllo degli errori. Cioè, implementare un controllo "indipendente", come ha detto Carlson.
 
Buon pomeriggio a tutti.

Sto cercando di fare un indicatore di raccolta tick per un'ulteriore elaborazione e visualizzazione. MT5 AlpariUK Version 5.0 Build 756
L' indicatore di prova stampa i valori attuali BID, ASK, LAST, VOLUME, tick_volume durante l'elaborazione suCalculate.

//+------------------------------------------------------------------+
//|                                                TickCollector.mq5 |
//|                                             Copyright 2013, MZen |
//|                                             http://www.almex.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MZen"
#property link      "http://www.almex.net"
#property version   "1.00"
#property indicator_chart_window


string   time_toprint, tick_bid, tick_ask, tick_last, tick_vol;
string   par1, par2, par3;


//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---

            time_toprint = TimeToString(SymbolInfoInteger(_Symbol,SYMBOL_TIME),TIME_DATE|TIME_SECONDS);
            tick_bid = DoubleToString(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits);
            tick_ask = DoubleToString(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);            
            tick_last = DoubleToString(SymbolInfoDouble(_Symbol, SYMBOL_LAST)); 
            tick_vol = IntegerToString(SymbolInfoInteger(_Symbol,SYMBOL_VOLUME));
            
            par1 = IntegerToString(tick_volume[(rates_total-1)]);
            
            Print("Server Time=",time_toprint,"   ","Bid=",tick_bid,"   ","Ask=",tick_ask,"   Price=",tick_last,"  Volume=",tick_vol,"  Tick volume=",par1);
           
//--- return value of prev_calculated for next call
   return(rates_total);
  }

//+------------------------------------------------------------------+

Risultato:

2013.03.03 19:45:59 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:46:03 Bid=93.680 Ask=93.689 Prezzo=93.680000 Volume=1000000 Tick volume=5
2013.03.03 19:45:59 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:46:03 Bid=93.680 Ask=93.689 Price=93.680000 Volume=1000000 Tick volume=4
2013.03.03 03 19:45:59 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:46:03 Bid=93.681 Ask=93.691 Price=93.68100000 Volume=3000000 Tick volume=4
2013.03.03.03 19:45:59 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:46:03 Bid=93.681 Ask=93.691 Price=93.68100000 Volume=3000000 Tick volume=4
2013.03.03 19:45:58 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:46:02 Bid=93.682 Ask=93.691 Price=93.68200000 Volume=2000000 Tick volume=3
2013.03.03 19:45:58 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:46:02 Bid=93.682 Ask=93.691 Price=93.68200000 Volume=2000000 Tick volume=3
201303.03.03 19:45:57 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:46:01 Bid=93.683 Ask=93.693 Prezzo=93.68300000 Volume=1000000 Tick volume=2
2013.03.03 19:45:57 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:46:01 Bid=93.683 Ask=93.693 Price=93.68300000 Volume=1000000 Tick volume=1
2013.03.03 03 19:45:56 PM TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:46:00 Bid=93.689 Ask=93.696 Price=93.68900000 Volume=570000 Tick volume=1
2013.03.03.03 19:45:56 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:46:00 Bid=93.689 Ask=93.696 Price=93.68900000 Volume=570000 Tick volume=1
2013.03.03 19:45:55 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:45:59 Bid=93.685 Ask=93.695 Price=93.68500000 Volume=1800000 Tick volume=53
2013.03.03 19:45:54 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:45:58 Bid=93.685 Ask=93.695 Prezzo=93.68500000 Volume=1700000 Tick volume=52
201303.03.03 19:45:54 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:45:58 Bid=93.685 Ask=93.695 Price=93.68500000 Volume=1500000 Tick volume=51
2013.03.03 19:45:54 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:45:58 Bid=93.685 Ask=93.695 Price=93.68500000 Volume=1500000 Tick volume=51
2013.03.03 19:45:53 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:45:57 Bid=93.685 Ask=93.693 Price=93.68500000 Volume=500000 Tick volume=50
201303.03.03 19:45:52 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:45:56 Bid=93.685 Ask=93.693 Price=93.68500000 Volume=400000 Tick volume=49
2013.03.03 19:45:52 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:45:56 Bid=93.685 Ask=93.693 Price=93.68500000 Volume=200000 Tick volume=48
2013.03.03 19:45:52 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:45:56 Bid=93.685 Ask=93.693 Price=93.68500000 Volume=200000 Tick volume=48
201303.03.03 19:45:51 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:45:55 Bid=93.685 Ask=93.691 Price=93.68500000 Volume=200000 Tick volume=47
2013.03.03 19:45:51 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:45:55 Bid=93.685 Ask=93.691 Price=93.68500000 Volume=1000000 Tick volume=46
2013.03.03 19:45:51 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:45:55 Bid=93.685 Ask=93.691 Price=93.68500000 Volume=1000000 Tick volume=46
201303.03.03 19:45:50 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:45:54 Bid=93.680 Ask=93.691 Price=93.68000000 Volume=1000000 Tick volume=45
2013.03.03 19:45:50 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:45:54 Bid=93.680 Ask=93.691 Prezzo=93.680000 Volume=1000000 Tick volume=45
2013.0303 19:45:48 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:45:52 Bid=93.682 Ask=93.691 Price=93.68200000 Volume=1000000 Tick volume=44

Sembra che onCalculate sia attivato due volte per tick la maggior parte delle volte, e tick_volume non ha nulla a che fare con il volume dei tick. Viene riportato a 1 quando si passa a un nuovo periodo. Lo stesso valore può essere ripetuto 1, 2, 3 volte.

Per controllare, ho eseguito l'EA che stampa i tick e il suo indicatore allo stesso tempo.

Risultato:

2013.03.03 19:51:56 Ticks (USDJPY,M1) 2013.03.03 19:51:56 93.684 93.677
2013.03.03.03 19:51:56 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:52:00 Bid=93.677 Ask=93.684 Prezzo=93.67700000 Volume=1000000 Tick volume=2
2013.0303 19:51:56 PM TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:52:00 Bid=93.677 Ask=93.684 Prezzo=93.67700000 Volume=1000000 Tick volume=2
2013.03.03 19:51:56 Ticks (USDJPY,M1) 2013.03.03.03 19:51:56 93.683 93.674
2013.03.03 19:51:56 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:52:00 Bid=93.674 Ask=93.683 Price=93.67400000 Volume=3000000 Tick volume=1
2013.03.03 19:51:56 TestTickCollector (USDJPY,M1) Server Time=201303.04 02:52:00 Bid=93.674 Ask=93.683 Price=93.67400000 Volume=3000000 Tick volume=1
201303.03.03 19:51:55 Ticks (USDJPY,M1) 2013.03.03 19:51:55 93. 682 93.674
2013.03.03 19:51:55 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:51:59 Bid=93.674 Ask=93.682 Price=93.67400000 Volume=3000000 Tick volume=37
2013.03.03 19:51:55 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:51:59 Bid=93.674 Ask=93.682 Prezzo=93.67400000 Volume=3000000 Tick volume=37
2013.03.03 19:51:51:51 Ticks (USDJPY,M1) 2013.03.03.03 19:51:51 93.680 93.670
2013.03.03 19:51:51 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:51:55 Bid=93.670 Ask=93.680 Price=93.67000000 Volume=1000000 Tick volume=36
2013.03.03 19:51:51 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:51:55 Bid=93.670 Ask=93.680 Price=93.67000000 Volume=1000000 Tick volume=36
2013.03.03 19:51:50 Ticks (USDJPY,M1) 2013.03.03 2013 19:51:50 93.678 93.669
2013.03.03 19:51:50 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:51:54 Bid=93.669 Ask=93.678 Prezzo=93.66900000 Volume=3500000 Tick volume=35
201303.03.03 19:51:49 Ticks (USDJPY,M1) 2013.03.03 19:51:49 93. 678 93.669
2013.03.03 19:51:49 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:51:53 Bid=93.669 Ask=93.678 Price=93.66900000 Volume=3000000 Tick volume=34
2013.03.03 19:51:49 PM TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:51:53 Bid=93.669 Ask=93.678 Prezzo=93.66900000 Volume=3000000 Tick volume=34
2013.03.03 19:51:46 Ticks (USDJPY,M1) 2013.03.03.03 19:51:46 93.680 93.672
2013.03.03 19:51:46 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:51:50 Bid=93.672 Ask=93.680 Price=93.67200000 Volume=1000000 Tick volume=33
2013.03.03 19:51:46 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:51:50 Bid=93.672 Ask=93.680 Prezzo=93.67200000 Volume=1000000 Tick volume=33
201303.03.03 19:51:44 Ticks (USDJPY,M1) 2013.03.03 19:51:44 93.681 93.672
2013.03.03 19:51:44 19:51:44 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:51:48 Bid=93.672 Ask=93.681 Prezzo=93.67200000 Volume=1000000 Tick volume=32
2013.03 03.03 19:51:44 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:51:48 Bid=93.672 Ask=93.681 Price=93.67200000 Volume=1000000 Tick volume=32
2013.03.03 19:51:44 Ticks (USDJPY,M1) 2013.03.03 2013 19:51:44 93.683 93.673
2013.03.03 19:51:44 TestTickCollector (USDJPY,M1) Server Time=2013.03.03.04 02:51:48 Bid=93.673 Ask=93.683 Price=93.67300000 Volume=1000000 Tick volume=31
2013.03.03 19:51:44 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:51:48 Bid=93.673 Ask=93.683 Price=93.67300000 Volume=1000000 Tick volume=30
2013.03.03.03 19:51:42 Ticks (USDJPY,M1) 2013.03.03 19:51:42 93.683 93.674
2013.03.0303 19:51:42 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:51:46 Bid=93.674 Ask=93.683 Price=93.67400000 Volume=3000000 Tick volume=30
2013.03.03 19:51:42 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:51:46 Bid=93.674 Ask=93.683 Prezzo=93.67400000 Volume=3000000 Tick volume=30
2013.03.03 19:51:41 Ticks (USDJPY,M1) 2013.03.03.03 19:51:41 93.683 93.673
2013.03.03 19:51:41 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:51:45 Bid=93.673 Ask=93.683 Price=93.67300000 Volume=1000000 Tick volume=29
201303.03.03 19:51:41 GMT TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:51:45 Bid=93.673 Ask=93.683 Price=93.67300000 Volume=1000000 Tick volume=29
2013.03.0303 03 19:51:40 Ticks (USDJPY,M1) 2013.03.03 19:51:40 93.682 93.673
2013.03.03 19:51:40 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:51:44 Bid=93.673 Ask=93.682 Prezzo=93.67300000 Volume=1000000 Tick volume=28
2013.03.03 19:51:40 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:51:44 Bid=93.673 Ask=93.682 Price=93.67300000 Volume=1000000 Tick volume=28
2013.03.03 19:51:39 Ticks (USDJPY,M1) 2013.03.03 2013 19:51:39 93.681 93.671
2013.03.03 19:51:39 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:51:43 Bid=93.671 Ask=93.681 Price=93.67100000 Volume=40000 Tick volume=27
201303.03.03 19:51:38 Ticks (USDJPY,M1) 2013.03.03 19:51:38 93. 681 93.671
2013.03.03 19:51:38 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:51:42 Bid=93.671 Ask=93.681 Price=93.67100000 Volume=6000000 Tick volume=26
2013.03.03 19:51:38 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:51:42 Bid=93.671 Ask=93.681 Prezzo=93.67100000 Volume=60000 Tick volume=26
2013.03.03 19:51:37 Ticks (USDJPY,M1) 2013.03.03.03 19:51:37 93.682 93.674
2013.03.03 19:51:37 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:51:41 Bid=93.674 Ask=93.682 Price=93.67400000 Volume=1000000 Tick volume=25
2013.03.03 19:51:37 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:51:41 Bid=93.674 Ask=93.682 Prezzo=93.67400000 Volume=1000000 Tick volume=24

Domanda: perché il segno di spunta è duplicato e come me ne libero?

Se onCalculate è attivato non solo da un cambiamento di prezzo, ma anche per qualche altra ragione, allora come possiamo determinare il motivo del passaggio a opCalculate? E dove sono tutte le ragioni per l'attivazione di onCalculate?

Cosa sto sbagliando con il volume di Tick?

Mi manca qualcosa?

Un'altra domanda - il tempo sul mio computer è un po' in ritardo. La differenza in due giorni era di 4 secondi. In che direzione cercare una soluzione?

Grazie a tutti.

 

Un'altra domanda per lo stimato pubblico:


Nella documentazione su https://www.mql5.com/ru/docs/constants/environment_state/marketinfoconstants#enum_symbol_info_integer

stati:

SYMBOL_BID Offerta - migliore offerta di vendita

SYMBOL_ASK Chiedi - migliore offerta di acquisto


Per come la vedo io, Bid è la migliore offerta diacquisto e Ask è la migliore offerta di vendita.

Ecco cosa ha risposto ServiceDesk
Squadra di supporto 2013.03.04 07:39


Questo significa


SYMBOL_BID Bid - la migliore offerta di vendita (il miglior prezzo a cui puoi vendere)

SYMBOL_ASK Ask - best buy offer (il miglior prezzo che puoi ottenere in questo momento)




Ecco una discussione: chi ha ragione?

Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте - Документация по MQL5
 
MZen:

Un'altra domanda per lo stimato pubblico:


Nella documentazione su https://www.mql5.com/ru/docs/constants/environment_state/marketinfoconstants#enum_symbol_info_integer

stati:

SYMBOL_BID Offerta - migliore offerta di vendita

SYMBOL_ASK Chiedi - migliore offerta di acquisto


Per come la vedo io, Bid è la migliore offerta diacquisto e Ask è la migliore offerta di vendita.

Ecco cosa ha risposto ServiceDesk
Squadra di supporto 2013.03.04 07:39
Significa

MZen

SYMBOL_BID Bid - la migliore offerta di vendita (il miglior prezzo a cui puoi vendere)

SYMBOL_ASK Ask - la migliore offerta di acquisto (il miglior prezzo che puoi ottenere in questo momento)




Sto discutendo: chi ha ragione?

Gioco di parole - in entrambe le situazioni c'è un compratore, in entrambe le situazioni c'è un venditore, a seconda di quale posizione si guardi
 
lazarev-d-m:
Gioco di parole - entrambe le situazioni hanno un compratore, entrambe le situazioni hanno un venditore, a seconda di quale posizione guardare

Ahhhh, capito!

Quando chiedo "Compra da me" è un'offerta di acquisto!

E quando dico "Vendi a me", è un'offerta di vendita!

LOL!

 

Sto iniziando a imparare l'OOP. Domanda per gli esperti - è possibile mettere la classe alla fine del codice di Expert Advisor (così come le funzioni),

int OnInit()
  {
   return(0);
  }
//---
void OnTick()
  {
   ...
  }
//---
void OnDeinit(const int reason)
  {
   ...
  }
//---
   class CName 
     {
      ...
     };

e non per collegare la classe al codice come:

#include <Trade\Trade.mqh>
 
paladin800:

Sto iniziando a imparare l'OOP. Domanda per gli esperti - è possibile mettere la classe alla fine del codice di Expert Advisor (così come le funzioni),

e non per collegare la classe al codice come:

Non sarà una classe ma solo una funzione, spostata al di fuori del codice del programma (a proposito, la uso al posto di OOP, la trovo più conveniente).