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 corso del lavoro dell'EA, sono state fatte delle modifiche, sono state aggiunte varie funzioni, ecc. ma non esiste un codice open source con queste modifiche.
ComplexFX: 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.
Potete dirmi come chiudere un ordine aperto in Expert Advisor? Capisco come chiudere una posizione usando Stop Loss o Take Profit. Come faccio a farlo manualmente?
pogeon: Potete dirmi come chiudere un ordine aperto in Expert Advisor? Capisco come chiudere una posizione usando Stop Loss o Take Profit. Come farlo manualmente?
In mql5, una posizione aperta viene chiusa da ordini di direzione opposta il cui volume totale è uguale al volume di una posizione chiusa.
progeon: 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
Yedelkin: In mql5, una posizione aperta viene chiusa da ordini diretti in modo opposto, il cui volume totale è uguale al volume della posizione chiusa.
lazarev-d-m: o usare la classe CTrade, c'è una funzione
Il metodo PositionClose() della classe CTradechiude 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);
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
//======================================================================== 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 //========================================================================
//====================================================================================== // 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
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.
Boris.45: tempo di apertura della barra zero Time_H1[1][1]=2011.01.03 13:00:00, poi il tempo di apertura della prima barra Time_H1[1][1]=2011.01.03 11:00:00
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.
Consenti l'uso dei cookie per accedere al sito MQL5.com.
Abilita le impostazioni necessarie nel browser, altrimenti non sarà possibile accedere.
Hai effettuato l'accesso. L'autenticazione a due fattori è stata disattivata. Configurala di nuovo e scansiona un nuovo codice QR, oppure continua con l'autenticazione a due fattori disattivata.
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.