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:
inputbool UseDateFrom = false; // Указывать дату начала inputdatetime DateFrom=0; // Дата начала inputbool UseDateTo=false; // Указывать дату окончания inputdatetime DateTo=0; // Дата окончания
//+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ voidOnStart(){
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...
inputbool UseDateFrom = false; // Указывать дату начала inputdatetime DateFrom=0; // Дата начала inputbool UseDateTo=false; // Указывать дату окончания inputdatetime DateTo=0; // Дата окончания
//+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ voidOnStart(){ //--- 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); } //+------------------------------------------------------------------+
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.
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:
trova l'ultimo ordine chiuso in base al suo tipo e al tempo della sua chiusura
Troviamo il bar in cui è stato chiuso al momento della chiusura di questo ordine
Se il valore ottenuto della barra è superiore a zero, si può aprire una nuova posizione, altrimenti no.
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. Sembra essere Ok, ma l'apertura/chiusura ha una data sbagliata, ma so come sistemarla. Grazie mille.
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?