Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 239
![MQL5 - Linguaggio delle strategie di trading integrato nel client terminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
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
Grazie per l'aiuto, ma nel trading reale non fa differenza come prendere il prezzo? Dopo tutto, devi mettere sia l'indicatore che l'EA sul grafico?
Nel trading reale sarete in grado di ottenere i dati. Finché non si cancellano accidentalmente le linee dell'indicatore...
Con uno vero potrete ricevere dati. Se non si rimuovono accidentalmente le linee dell'indicatore...
Allora, ho un'altra domanda: ho un EA fantastico. Ma ha bisogno di fare questo: quando attraversa una linea, si apre un ordine addizionale in questa direzione, e poi si chiude sul profitto... Come fare in modo che dopo la chiusura in profitto, l'ordine addizionale non venga aperto di nuovo? Fino a quando la linea dell'indicatore non viene aggiornata?
Buon pomeriggio, ho bisogno di un piccolo aiuto con il codice che:
apre BUY se il file 11112222.txt contiene 1;
apre SELL se il file 11112222.txt contiene -1;
chiude tutti gli ordini se il file 11112222.txt contiene 0;
Dato il file 11112222.txt, ci possono essere solo tre voci: 1, -1 o 0
Non capisco cosa c'è di sbagliato in questo codice; per qualche ragione, se vedo 0 nel file 11112222.txt, apre l'ordine BUY, invece del codice dell'ordine chiuso, non so proprio cosa ci sia di sbagliato.
Ay, c'è anche un problema, quando l'EA è in esecuzione, è quasi sempre impossibile aprire 11112222.txt, dice che il file è occupato da un'altra applicazione, quindi per risolvere questo problema ho messo FileClose(handle2); // Chiudi file di testo; ma non aiuta e ho bisogno che l'EA controlli il file 11112222.txt per 1, -1 o 0 dopo che è stato aperto e poi lo chiuda, perché il file viene periodicamente utilizzato da un altro programma per mettere 1, -1 o 0.
int handle2 = FileOpen("11112222.txt", FILE_CSV|FILE_READ, ";");//код открывает файл для чтения
if(handle2>0) // если в файле больше 0, то есть 1, то открывать BUY
{
Print(FileReadString(handle2));
FileClose(handle2); // закрытие текстового файла
//ОТКРЫТИЕ ОРДЕРА НА ПОКУПКУ
if(OrdersTotal() == 0) // если нет открытых ордеров то открывать ордер на покупку
{
OrderSend(Symbol(), OP_BUY, 0.01, Ask, 3, 0, 0); // первым указывается ЛОСЬ, вторым ПРОФИТ
FileClose(handle2); // закрытие текстового файла
}
else
Print("NE USPESHNO!!!");
FileClose(handle2); // закрытие текстового файла
}
//=================================конец кода BUY=========================================
//=================================SELL=========================================
int handle3 = FileOpen("11112222.txt", FILE_CSV|FILE_READ, ";");//код открывает файл для чтения
if(handle3<0)//если в текстовом файле меньше 0, то есть -1, то открывать SELL
{
Print(FileReadString(handle3));
FileClose(handle3); // закрытие текстового файла
if(OrdersTotal() == 0) // если нет открытых ордеров то открывать ордер на продажу
{
OrderSend(Symbol(), OP_SELL, 0.01, Bid, 3, 0, 0); // первым указывается ЛОСЬ, вторым ПРОФИТ
FileClose(handle3); // закрытие текстового файла
}
else
Print("NE USPESHNO!!!");
FileClose(handle3); // закрытие текстового файла
}
//=================================конец кода SELL=========================================
//=================================ЗАКРЫТИЕ ВСЕХ ОРДЕРОВ=========================================
int handle4 = FileOpen("11112222.txt", FILE_CSV|FILE_READ, ";");//код открывает файл для чтения
if(handle4=0)//если в текстовом файле равно 0, то закрыть все ордера
{
Print(FileReadString(handle4));
FileClose(handle4); // закрытие текстового файла
//-----------------код закрывает все ордера--------------------
bool result;
int error;
while (OrdersTotal()>0)
{
if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES))
{ if(OrderType()==OP_BUY) result=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_BID),MarketInfo(OrderSymbol(),MODE_DIGITS)),3,CLR_NONE);
if(OrderType()==OP_SELL) result=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_ASK),MarketInfo(OrderSymbol(),MODE_DIGITS)),3,CLR_NONE);
if (OrderType()==OP_BUYLIMIT || OrderType()==OP_BUYSTOP || OrderType()==OP_SELLLIMIT || OrderType()==OP_SELLSTOP)
OrderDelete(OrderTicket());
if(result!=TRUE) { error=GetLastError();
Print("LastError = ",error, " ",Symbol()); }
else error=0; }
else Print( "Error when order select ", GetLastError());
FileClose(handle4); // закрытие текстового файла
}
//------------конец кода закрывающего ордера------------------
FileClose(handle4); // закрытие текстового файла
}
//=================================конец кода ЗАКРЫТИЕ ВСЕХ ОРДЕРОВ=========================================
Buon pomeriggio, ho bisogno di un piccolo aiuto con il codice che:
apre BUY se il file 11112222.txt contiene 1;
apre SELL se il file 11112222.txt contiene -1;
chiude tutti gli ordini se il file 11112222.txt contiene 0;
Il file 11112222.txt è dato e può avere solo tre voci: 1, -1 o 0.
Per qualche motivo, quando 0 è nel file 11112222.txt, apre un ordine BUY, mentre dovrebbe scattare un codice di ordine close; non capisco quale sia l'errore.
Allora, c'è anche un problema, quando l'EA è in esecuzione, è quasi sempre impossibile aprire 11112222.txt, perché dice che il file è occupato da un'altra applicazione. Per risolvere il problema, ho messo FileClose(handle2); // Chiudi file di testo; ma non funziona e ho bisogno che l'EA controlli il file 11112222.txt per 1, -1 o 0, poi lo chiuda, perché ogni secondo un altro programma usa questo file per metterci 1, -1 o 0.
Perché l'handle del file non è il contenuto del file.
Dovete prima leggere il contenuto del file, e solo dopo impostare la condizione. È il contrario, hai una condizione per handle, poi leggi il file e lo chiudi.
Perché l'handle del file non è il contenuto del file.
Dovete prima leggere il contenuto del file, e solo dopo mettere la condizione. Nel vostro caso è viceversa, condizione per handle, poi leggere il file e chiuderlo.
1) - Questa parte apre il file 11112222.txt per leggere i dati da esso:
//=================================BUY=========================================
int handle2 = FileOpen("11112222.txt", FILE_CSV|FILE_READ, ";");//код открывает файл для чтения
2) - Poi viene la condizione se handle2>0
if(handle2>0) // если в файле больше 0, то есть 1, то открывать BUY
{
3) - Questa è la parte che non capisco:
Print(FileReadString(handle2));
4) - Questa parte chiude il file:
FileClose(handle2); // закрытие текстового файла
5) - Poiché la condizione handle2>0 è soddisfatta, cioè il file 11112222.txt contiene 1, apre un ordine di acquisto:
//ОТКРЫТИЕ ОРДЕРА НА ПОКУПКУ
if(OrdersTotal() == 0) // если нет открытых ордеров то открывать ордер на покупку
{
OrderSend(Symbol(), OP_BUY, 0.01, Ask, 3, 0, 0); // первым указывается ЛОСЬ, вторым ПРОФИТ
FileClose(handle2); // закрытие текстового файла
}
else
Print("NE USPESHNO!!!");
FileClose(handle2); // закрытие текстового файла
}
//=================================конец кода BUY=========================================
Saluti cercando di scrivere uno script per chiudere gli ordini.
Se apro diversi ordini di vendita e di acquisto alternativamente e provo a chiuderli con questo ordine, solo alcuni vengono chiusi, il resto ottiene l'errore 129 (prezzo errato).
Ho provato a fare uno script che per esempio fa 10 tentativi * sul numero di ordini, con pausa in caso di errore.
Di solito riesce a svolgere il suo compito dopo un certo numero di tentativi, ai quali viene emesso lo stesso errore 129. Ma mentre cerca, con molti tentativi, di chiudere gli ordini fuori può essere chiuso manualmente, e questo non causa errori, si chiudono.
Cosa sto facendo di sbagliato?
Saluti cercando di scrivere uno script per chiudere gli ordini.
Se apro diversi ordini di vendita e di acquisto alternativamente e provo a chiuderli con questo ordine, solo alcuni vengono chiusi, il resto ottiene l'errore 129 (prezzo errato).
Ho provato a fare uno script che per esempio fa 10 tentativi * sul numero di ordini, con pausa in caso di errore.
Di solito riesce a svolgere il suo compito dopo un certo numero di tentativi, ai quali viene emesso lo stesso errore 129. Ma mentre cerca, con molti tentativi, di chiudere gli ordini fuori può essere chiuso manualmente, e questo non causa errori, si chiudono.
Cosa sto facendo di sbagliato?
In generale, quello che scrivi non è permesso di fare trading su un conto reale, è solo per un tester
In generale, quello che scrivi non dovrebbe essere permesso di commerciare in un conto reale, è solo per il tester
Aiuta, grazie.
In generale, quello che scrivi non è permesso di fare trading su un conto reale, è solo per un tester
Può spiegare perché "non è permesso commerciare..."?
Può spiegare perché "non è permesso commerciare"?
Non c'è alcun controllo degli errori, e se il server si chiude e genera un errore critico, l'Expert Advisor continuerà comunque a martellare il server, e questo puzza di divieto per ulteriore auto-trading.