Domande da un "manichino" - pagina 40

 

Per favore, spiega perché nessuno degli EA di MetaTrader 5 viene testato nello strategy tester. Premo start e non succede niente, per favore spiegatemi.

 
PATRIOT:

Per favore, spiega perché nessuno degli EA di MetaTrader 5 viene testato nello strategy tester. Premo start e non succede niente, per favore spiegatemi.

Guarda nel diario di bordo (per cominciare).
 

Impossibile recuperare dati da strutture predefinite in funzioni create. Per esempio:

void OnTick()
{
//--- Объявляем структуру
 MqlRates rates[];
 ArraySetAsSeries(rates,true);

//--- Скопировать необходимое количество значений в массив
 if(CopyRates(NULL,0,0,4,rates) < 0) { Print(ErrorDescription(GetLastError())); return; }
...
}

Poi quando si cerca di recuperare i valori in una funzione creata:

void Trailing_Stop_Loss(ENUM_POSITION_TYPE Type, double Trailing_Stop)
{
 string Val_Time = TimeToString(rates[1].time,TIME_DATE|TIME_MINUTES);

...
}

Riceviamo un messaggio di errore:

Come posso dichiarare le strutture in modo che siano disponibili in tutte le parti del programma?

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

Impossibile recuperare dati da strutture predefinite in funzioni create. Per esempio:

Poi quando si cerca di recuperare i valori in una funzione creata:

Riceviamo un messaggio di errore:

Come posso dichiarare le strutture in modo che siano disponibili in tutte le parti del programma?

Nell'ambito globale. Fuori dalla funzione.
 
Quali funzioni possono essere usate per controllare se un thread di scambio è libero per eseguire un'operazione di scambio? In MQL4, le funzioni IsTradeAllowed() e IsTradeContextBusy() erano destinate a questo scopo.

La classe CAccountInfo della libreria standard ha la funzione TradeAllowed(). È scritto nell'aiuto che significa:"Il trading è permesso/vietato per questo conto". Non ho trovato un codice di errore nei codici di ritorno del server commerciale, il che significa che il flusso commerciale potrebbe essere occupato. Questo controllo è ora nel terminale di trading stesso? Si prega di chiarire.


 
tol64:
Quali funzioni possono essere usate per controllare se un thread di scambio è libero per eseguire un'operazione di scambio? In MQL4, le funzioni IsTradeAllowed() e IsTradeContextBusy() erano destinate a questo scopo.

La classe CAccountInfo della libreria standard ha la funzione TradeAllowed(). È scritto nell'aiuto che significa:"Il trading è permesso/vietato per questo conto". Non ho trovato un codice di errore nei codici di ritorno del server commerciale, il che significa che il flusso commerciale potrebbe essere occupato. Questo controllo è ora nel terminale di trading stesso? Si prega di chiarire.

In MT5, il thread di trading non è mai occupato perché le operazioni di trading sono asincrone. Rallegratevi.
 
tol64:
Quali funzioni possono essere usate per controllare se un thread di scambio è libero per eseguire operazioni commerciali? In MQL4, le funzioni IsTradeAllowed() e IsTradeContextBusy() erano destinate a questo scopo.

La classe CAccountInfo della libreria standard ha la funzione TradeAllowed(). È scritto nell'aiuto che significa:"Il trading è permesso/vietato per questo conto ". Non ho trovato un codice di errore nei codici di ritorno del server commerciale, il che significa che il flusso commerciale potrebbe essere occupato. Questo controllo è ora nel terminale di trading stesso? Si prega di spiegare.


In MetaTrader5 non esiste una cosa come un thread di trade occupato, mentre MT4 potrebbe elaborare un solo ordine del trader, in MT5 molti ordini vengono elaborati in parallelo. I codici di ritorno dal server per qualsiasi ordine possono essere ottenuti nella funzione OnTrade().
 
uncleVic:

Dovete solo fissare il prezzo.

Se non è impostato alcun prezzo (l'impostazione predefinita è 0,0) o se è impostato il prezzo di mercato, CExpertTrade viene richiesto da CExpert di aprire una posizione sul mercato.

Se il prezzo è impostato meglio del mercato (sotto il prezzo corrente di acquisto e sopra il prezzo corrente di vendita), CExpertTrade piazzerà un ordine limite (se il margine è rispettato).

Se il prezzo è inferiore al mercato (sopra l'attuale offerta e sotto l'attuale richiesta), CExpertTrade piazzerà un ordine stop (se il margine è rispettato).

bool Chhhh::OpenLongParams(double& price, double& sl, double& tp, datetime& expiration)
{
   printf("11111111");
   if(2+2==4)
   {
      price=1.5;
      sl=0;
      tp=0;
      expiration=0;
      return(true);
   }
   else
   {
      return(false);
   }
}

int Chhhh::LongCondition()
{
  printf("222222222");
  return(60);
}
OpenLongParams non funziona affatto, non restituisce nemmeno "1111111111",
e LongCondition restituisce "2222222" e apre un ordine,
è qualcosa di sbagliato o è impostato diversamente?
 
sergeev:

Il tipo specifico viene impostato al momento dell'ordine. OrderSend
Cosa c'entra OrderSend?
 
Lodar:
OpenLongParams non viene eseguito affatto, non scrive nemmeno "1111111111",
ma LongCondition scriverà "222222222" e aprirà un ordine,
sto sbagliando qualcosa o è impostato diversamente?

In linea di principio, le cose sono molto più semplici. Nel 99% dei casi, il livello di ingresso può essere regolato tramite un parametro di ingresso:

input double Inp_Signal_PriceLevel    =0.0;

Il valore è impostato in pip "grandi" (cioè 2/4 cifre).

Valore = 0 - ingresso nel mercato.

Valore > 0 - entrata per ordine limite.

Valore < 0 - entrata per ordine di arresto.

Il parametro si riferisce al segnale principale (in cui i segnali selezionati nel Wizard sono raccolti per il voto). L'algoritmo di impostazione dei livelli di prezzo è già implementato nella classe base CExpertSignal (la cui istanza è il segnale principale).

Ma se volete usare un algoritmo diverso da quello implementato... Ma questo è per dopo, quando sarà interessante.

Motivazione: