Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 11
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
Come faccio a sapere dall'EA che è arrivato un avviso di indicatore?
Avete bisogno di un allarme?
Di solito con un allarme qualche segnale viene scritto nel buffer, se è così, è necessario leggere il valore dal buffer.
Ma bisogna vedere il codice per dirlo esattamente. O finestra dati ctrl+D con i valori dell'indicatore sulla barra con avviso.
Nell'appendice di quell'articolo, si chiama sHistoryExport.mq5. Il mio compilatore non accetta funzioni i cui nomi iniziano con "HistoryDeal..." e identificatori che iniziano con "DEAL_...". Ecco il codice:
#property link "https://www.mql5.com"
#property version "1.00"
#property script_show_inputs
input bool UseDateFrom = false; // Указывать дату начала
input datetime DateFrom=0; // Дата начала
input bool UseDateTo=false; // Указывать дату окончания
input datetime DateTo=0; // Дата окончания
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart(){
datetime from,to;
if(UseDateFrom){
from=DateFrom;
}
else{
from=0;
}
if(UseDateTo){
to=DateTo;
}
else{
to=TimeCurrent();
}
if(!HistorySelect(from,to)){
Alert("Ошибка выделение истории");
return;
}
string FileName="history.csv";
int h=FileOpen(FileName,FILE_WRITE|FILE_ANSI|FILE_CSV,";");
if(h==INVALID_HANDLE){
Alert("Ошибка открытия файла");
return;
}
// первая строка, что бы знать, где что находится
FileWrite(h,"Time","Deal","Order","Symbol","Type","Direction","Volume","Price","Comission","Swap","Profit","Comment");
// по всем сделкам
for(int i=0;i<HistoryDealsTotal();i++){
ulong ticket=HistoryDealGetTicket(i);
if(ticket!=0){
long type=HistoryDealGetInteger(ticket,DEAL_TYPE);
if(type==DEAL_TYPE_BUY || type==DEAL_TYPE_SELL){
long entry=HistoryDealGetInteger(ticket,DEAL_ENTRY);
FileWrite(h,(datetime)HistoryDealGetInteger(ticket,DEAL_TIME),
ticket,
HistoryDealGetInteger(ticket,DEAL_ORDER),
HistoryDealGetString(ticket,DEAL_SYMBOL),
(type==DEAL_TYPE_BUY?"buy":"sell"),
(entry==DEAL_ENTRY_IN?"in":(entry==DEAL_ENTRY_OUT?"out":"in/out")),
DoubleToString(HistoryDealGetDouble(ticket,DEAL_VOLUME),2),
HistoryDealGetDouble(ticket,DEAL_PRICE),
DoubleToString(HistoryDealGetDouble(ticket,DEAL_COMMISSION),2),
DoubleToString(HistoryDealGetDouble(ticket,DEAL_SWAP),2),
DoubleToString(HistoryDealGetDouble(ticket,DEAL_PROFIT),2),
HistoryDealGetString(ticket,DEAL_COMMENT)
);
}
}
else{
Alert("Ошибка выделения сделки, повторите попытку");
FileClose(h);
return;
}
}
FileClose(h);
Alert("Сохранение выполнено, см. файл "+FileName);
}
//+------------------------------------------------------------------+
Ad essere onesti, non l'ho controllato affatto - non ho la cronologia di MT4 con i trade a portata di mano - l'ho solo scritto "in ginocchio" guardando lo script di Dmitry...
#property link "https://www.mql5.com"
#property version "1.00"
#property script_show_inputs
input bool UseDateFrom = false; // Указывать дату начала
input datetime DateFrom=0; // Дата начала
input bool UseDateTo=false; // Указывать дату окончания
input datetime DateTo=0; // Дата окончания
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart(){
//---
datetime from,to;
if(UseDateFrom) from=DateFrom;
else from=0;
if(UseDateTo) to=DateTo;
else to=TimeCurrent();
//---
string FileName="history.csv";
int h=FileOpen(FileName,FILE_WRITE|FILE_ANSI|FILE_CSV,";");
if(h==INVALID_HANDLE){
Alert("Ошибка открытия файла");
return;
}
//--- первая строка, что бы знать, где что находится
FileWrite(h,"OpenTime","CloseTime","Ticket","Symbol","Type","Volume","OpenPrice","ClosePrice","Comission","Swap","Profit","Comment");
//--- по всем сделкам
for(int i=OrdersHistoryTotal()-1; i>=0; i--) {
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) {
if(OrderOpenTime()<from) continue;
if(OrderOpenTime()>to) break;
int type=OrderType();
if(type>OP_SELL) continue;
int dg=(int)SymbolInfoInteger(OrderSymbol(),SYMBOL_DIGITS);
int ticket=OrderTicket();
FileWrite(h,(datetime)OrderOpenTime(),
(datetime)OrderCloseTime(),
ticket,
OrderSymbol(),
(type==OP_BUY?"buy":"sell"),
DoubleToString(OrderLots(),2),
DoubleToString(OrderOpenPrice(),dg),
DoubleToString(OrderClosePrice(),dg),
DoubleToString(OrderCommission(),2),
DoubleToString(OrderSwap(),2),
DoubleToString(OrderProfit(),2),
OrderComment()
);
}
else{
Alert("Ошибка выделения сделки, повторите попытку");
FileClose(h);
return;
}
}
//---
FileClose(h);
Alert("Сохранение выполнено, см. файл "+FileName);
}
//+------------------------------------------------------------------+
Grazie per il chiarimento, Artem!
Ma c'è un'altra domanda.
A volte un EA apre un ordine immediatamente dopo che lo SL è scattato. Così, può prosciugare l'intero deposito su una sola candela.
Come specificare correttamente il ritardo di apertura dell'ordine successivo alla chiusura dell'ordine corrente? Il tempo di ritardo dovrebbe essere uguale al tempo della candela ed essere calcolato automaticamente.
Grazie!
Grazie per il chiarimento, Artem!
Ma c'è un'altra domanda.
A volte un EA apre un ordine immediatamente dopo l'attivazione dello SL. Così, possiamo lasciare che l'intero deposito sia prosciugato su una sola candela.
Come specificare correttamente il ritardo per l'apertura dell'ordine successivo dopo la chiusura dell'ordine corrente? Il tempo di ritardo dovrebbe essere uguale al tempo della candela ed essere calcolato automaticamente.
Grazie!
La logica è la seguente:
Beh, ad essere onesti, non l'ho controllato affatto - non ho la cronologia di MT4 a portata di mano - l'ho solo scritto "in ginocchio" guardando lo script di Dimitri...
Funziona. A prima vista tutto sembra a posto, aprendo/chiudendo scrive solo non la data, ma so come risolvere questo problema. Grazie mille.
Aiuto con questo consulente sulla build precedente funzionava e ora non lo fa!!!!
Per cosa hai bisogno di aiuto? C'è qualcosa che non puoi fare da solo?
Qui c'è aiuto e discussione, ma non l'appagamento gratuito dei desideri
Per cosa hai bisogno di aiuto? C'è qualcosa che non puoi fare da solo?
Qui c'è aiuto e discussione, ma non l'appagamento gratuito dei desideri
Non capisco qual è l'errore?