Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 97
Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
L'idea è vostra, ma non il codice. Il programmatore ha scritto il codice, non tu, tu hai scritto i ToR.
Immaginate - gli utenti di Windows che chiedono l'open source - non è assurdo?
Per quanto ho capito, il codice usato dagli esperti appartiene a MetaQuotes, o a te personalmente?
Che cosa ha a che fare questo con Windows, in primo luogo gli utenti non hanno il diritto di chiederlo perché questo prodotto appartiene a macrosoft, qui è un po' diverso, macrosoft inizierà a chiedere il codice open source del loro prodotto dai programmatori che lo hanno scritto, e loro si torceranno le dita e non lo daranno.
Aah :-=) quindi ci sono fonti prima della protezione? cos'altro vuoi allora? Vi è stato detto - nessuno darà il codice open source di EA protetto, e io non lo darei. E se ci fosse l'obbligodi esigere il codice sorgente del vostro prodotto dopo il completamento.
Avrei rifiutato il compito.
Di cos'altro avete bisogno allora? C'è il codice sorgente prima della difesa, quindi è lo stesso del consigliere con la difesa.
Nel processo di lavoro dell'Expert Advisor sono state fatte delle modifiche, sono state aggiunte varie funzioni, ecc, ma non esiste un codice open source con queste modifiche.
allora penso che la verità sia dalla tua parte.
Per quanto ho capito, il codice usato dagli esperti appartiene a MetaQuotes, o a te personalmente?
Se scrivo il codice, mi appartiene personalmente.MetaQuotes possiede il linguaggio di programmazione.
tutto è giusto.
Potete dirmi come chiudere un ordine aperto in Expert Advisor? Capisco come chiudere una posizione usando Stop Loss o Take Profit. Come farlo manualmente?
Potreste consigliarmi come chiudere un ordine aperto in un Expert Advisor? Ho capito come si chiude una posizione allo Stop Loss o al Take Profit. Come farlo manualmente?
Oppure usate la classe CTrade, che ha una funzione
trade.PositionClose(_Symbol);
qualcosa del genere
https://www.mql5.com/ru/docs/standardlibrary/tradeclasses/ctrade/ctradepositionclose
lazarev-d-m: o usare la classe CTrade, c'è una funzione
Il metodo PositionClose() della classe CTrade chiude anche una posizione usando ordini opposti.
Per favore, consigliatemi la soluzione o la ragione di questa situazione. Sto lavorando in MQL5 non molto tempo fa, quindi non ho ancora abbastanza esperienza.
Ho provato a fare un EA multivaluta senza usare le classi, ma purtroppo non ho trovato nessun articolo dettagliato sugli EA multivaluta.
Ho scritto il seguente pezzo di codice.
int nomer_instr; // questo è il numero di indice della valuta nell'array dei nomi di valuta
string Name_symbol[6] = { "AUDUSD", "EURUSD", "GBPUSD", "USDCAD", "USDCHF", "USDJPY" } ; // array di testo dei nomi delle valute: in [0]-"AUDUSD", 1-"EURUSD", 2-"GBPUSD", 3-"USDCAD", etc.
double Close_buf[], Open_buf[], High_buf[], Low_buf[]; //array di base per i parametri della candela
datetime Time_buf[]; //array di base del tempo di apertura della barra
double Close_H1[6][150], Open_H1[6][150], High_H1[6][150], Low_H1[6][150]; // array per parametri di candele EA multivaluta per timeframe H1
// il numero di righe nella matrice corrisponde al numero di valute analizzate
datetime Time_H1[6][150]; // array del tempo di apertura della barra
double Close_H4[6][150], Open_H4[6][150], High_H4[6][150], Low_H4[6][150]; // array per i parametri delle candele dell'Expert Advisor multicurrency per timeframe H4
// il numero di righe della matrice corrisponde al numero di valute analizzate
datetime Time_H4[6][150]; // array tempo di apertura della barra
int OnInit()
{
}
void OnDeinit(const int reason)
{
//---
ArrayFree(Time_buf);
ArrayFree(Close_buf);
ArrayFree(Open_buf);
ArrayFree(High_buf);
ArrayFree(Low_buf);
}
void OnTick()
{
//------------------------------------------------------------------------------
ecco un pezzo di codice per determinare il momento in cui si apre una nuova barra Nev_Time[0]
e il numero di serie della barra che viene trattata nel processo di test o di commercio
//------------------------------------------------------------------------------------------------------------------------
ArraySetAsSeries(Close_buf, true); //imposta l'indicizzazione per l'array close_array come in timeseries
ArraySetAsSeries(Open_buf, true); //impostare l'indicizzazione per l'array open_array come in timeseries
ArraySetAsSeries(High_buf, true); //impostare l'indicizzazione per l'array high_array come in timeseries
ArraySetAsSeries(Low_buf, true); //impostare l'indicizzazione per l'array low_array come in timeseries
ArraySetAsSeries(Time_buf, true); //impostare l'indicizzazione per l'array time_array come in timeseries
for( nomer_instr=0; nomer_instr<=5; nomer_instr++ )
{
//========================================================================
CopyTime( Name_symbol[nomer_instr], PERIOD_H1,0,160,Time_buf); // copia i dati temporali storici per ogni barra nel buffer
CopyClose( Name_symbol[nomer_instr], PERIOD_H1,0,160,Close_buf); // copia la chiusura dei dati storici per ogni barra nel buffer
CopyOpen( Name_symbol[nomer_instr], PERIOD_H1,0,160,Open_buf); // copia i dati storici aperti per ogni barra nel buffer
CopyHigh( Name_symbol[nomer_instr], PERIOD_H1,0,160,high_buf); // copia i dati storici alti per ogni barra nel buffer
CopyLow( Name_symbol[nomer_instr], PERIOD_H1,0,160,low_buf); // copia i dati storici bassi per ogni barra nel buffer
//========================================================================
for( i=1; i<=145; i++ )
{
Time_H1[nomer_instr][i]=Time_buf[i];
Close_H1[nomer_instr][i]=Close_buf[i];
Open_H1[nomer_instr][i]=Open_buf[i];
High_H1[nomer_instr][i]=High_buf[i];
Low_H1[nomer_instr][i]=Low_buf[i];
}
//======================================================================================
// controlla lo spostamento temporale dei dati candlestick generati di un timeframe orario
if( Schetchik_svech > 8 && Schetchik_svech < 15 )
{
se( nomer_instr == 5 )
{
Alert("================================================");
Alert(" numero di barra = ",Schetchik_svech,", tempo di apertura della barra Nev_Time[0]=",Nev_Time[0]);
Allarme(" numero dello strumento: nomer_instr=",nomer_instr,", instrument: Name_symbol[nomer_instr]=",Name_symbol[nomer_instr]);
Alert("---------------------------------------------------------");
for(( i=1; i<=5; i++ )
{
Alert("i=",i,", Time_H1[nomer_instr][i]=",Time_H1[nomer_instr][i],", Close_H1[nomer_instr][i]=",Close_H1[nomer_instr][i]);
}
}
}
//======================================================================================
} // fine del ciclo per le valute usate sul timeframe H1
//##############################################
Ecco lo stesso pezzo di grafico per il timeframe H4
//############################################
} // fine della funzione OnTick()
Controllare le prestazioni di questo pezzo di software mi ha rivelato un risultato inaspettato:
- Per il caso di H1, quando l'uscita dei parametri di barre per il grafico, su cui si trova l'Expert Advisor, abbiamo una differenza di tempo di un'ora tra l'apertura della barra zero e la prima barra.
Per esempio, l'Expert Advisor è sul grafico EURUSD e il tempo di apertura della barra zero è Nev_Time[0]=2011.01.03 13:00:00, poi il tempo di apertura della prima barra Time_H1[1][1]=2011.01.03 12:00:00
Il risultato è coerente con il senso comune.
- Ora l'Expert Advisor è sullo stesso grafico e analizziamo i dati di qualsiasi altra valuta, ad esempio AUDUSD:
tempo di apertura della barra zero Nev_Time[0]=2011.01.03 13:00:00, poi il tempo di apertura della prima barra Time_H1[1][1]=2011.01.03 11:00: 00
Questo risultato è semplicemente inaccettabile, ma non ho trovato ragioni per questo effetto negli articoli.
Vi prego di consigliarmi come sbarazzarmi di questo fastidio, non posso scrivere un Expert Advisor per ogni valuta.
Grazie per il vostro feedback.
Cosa restituisce Time_H1[1][0]?
Non uso questo elemento dell'array, perché andrò direttamente all'algoritmo di ricerca dei frattali sulle ultime 5 barre. E Time_H1[1][0] è il tempo di apertura della barra zero dove i parametri di questa barra non sono ancora stati formati. Posso sbagliarmi, ma dalla mia esperienza personale, so che usare i parametri di una barra zero per formare le serie temporali porta alla loro distorsione.