OrdersTotal restituisce 0
#include <Trade\Trade.mqh>
CTrade trade;
int gi_flag=1;
void OnTick()
{
if(gi_flag==1)
{
trade.PositionOpen(_Symbol,ORDER_TYPE_SELL,1, SymbolInfoDouble(_Symbol,ORDER_TYPE_SELL==ORDER_TYPE_SELL ? SYMBOL_BID:SYMBOL_ASK),0,0);
gi_flag=0;
}
PrintFormat(DoubleToString(OrdersTotal(),1));
}
Anche se ho capito che dovrebbe restituire 1, o sto leggendo male?
Gli ordini non sono posizioni. Un ordine è un ordine non eseguito per aprire una posizione, mentre una posizione è il risultato dell'esecuzione di un ordine.
Grazie, capisco, quindi useremo la funzione PositionsTotal.
E il primo problema?
Ho scritto questo codice e qualcosa non è chiaro dove potrebbe essere l'errore
string Data() { string vr; string den; datetime date=TimeCurrent(); MqlDateTime str; TimeToStruct(date,str); switch(str.day_of_week) { case 0: den = "Воскресенье"; case 1: den = "Понедельник"; case 2: den = "Вторник"; case 3: den = "Среда"; case 4: den = "Четверг"; case 5: den = "Пятница"; case 6: den = "Суббота"; } printf("%02d.%02d.%4d %02d:%02d:%02d %d",str.day,str.mon,str.year,str.hour,str.min,str.sec,str.day_of_week); printf("%02d.%02d.%4d %02d:%02d:%02d %s",str.day,str.mon,str.year,str.hour,str.min,str.sec,den); return(StringFormat("%02d.%02d.%4d %02d:%02d:%02d %s",str.day,str.mon,str.year,str.hour,str.min,str.sec,den)); }
Il registro stampa i seguenti risultati
MF 0 11:06:34 04.06.2010 09:06:43 5RN 0 11:06:34 04.06.2010 09:06:43 Sabato
Per quanto ne so, il 5° giorno è il venerdì.
Ho scritto questo codice e qualcosa non è chiaro dove potrebbe essere l'errore
Il registro stampa i seguenti risultati
MF 0 11:06:34 04.06.2010 09:06:43 5RN 0 11:06:34 04.06.2010 09:06:43 Sabato
Per quanto ne so, il 5° giorno è il venerdì.
Per qualsiasi valore di day_of_week otterrete il valore "Saturday". Perché non ci sono operatori di rottura tra i casi
2 punti più oscuri
void OnTick()
{
for(int li=1; li<2; li++)
{
PrintFormat(SymbolName(li,true));
}
}
Restituisce un vuoto o uno spazio, ma non un nome di carattere
void OnTick()
{
PrintFormat(DoubleToString(SymbolsTotal(true),1));
}
Restituisce 1 anche se ne ho almeno 10 aperti
Ma se si mette false invece di true, tutto sembra funzionare bene
Restituisce un vuoto o uno spazio, ma non il nome del carattere
for(int li=0; li<SymbolsTotal(false); li++) { PrintFormat(SymbolName(li,false)); }Questo è probabilmente corretto se vuoi passare attraverso tutto il DC. Se solo ciò che è nella tabella dei terminali, allora cambia false in true.
È quello che sto dicendo: il vero non funziona!
È quello che sto dicendo, non funziona con il vero!
Funziona, l'ho controllato su tre società di intermediazione (ho cercato tutti i simboli che sono scambiati nelle società di intermediazione).
for(int li=0; li<SymbolsTotal(false); li++) { PrintFormat(SymbolName(li,false)); }
E questo codice passerà attraverso tutto ciò che è selezionato nella finestra "Market Watch
for(int li=0; li<SymbolsTotal(true); li++) { PrintFormat(SymbolName(li,true)); }
Quello che non capisco è questo. Perché fare questa ricerca in OnTick().

- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Accetti la politica del sito e le condizioni d’uso
Eseguendo il tester su EURUSD, tutto funziona, entrambi gli ordini vengono inviati. Se decommentiamo la linea, l'ordine GBPUSD non viene aperto e c'è un errore nel log:
2010.06.02 10:34:26 Core 1 failed instant sell 1.00 GBPUSD at 0.00000 [Invalid stops]
2010.06.02 10:34:26 Core 1 Nessun prezzo per il simbolo GBPUSD
Ho provato con SymbolInfoTick, stessa cosa.
Conoscete il SymbolInfoTick o il SymbolInfoDouble?