Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 11
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Como posso dizer da EA que chegou um alerta indicador?
Você precisa de um alerta?
Normalmente, com um alerta, algum sinal é escrito no buffer, se assim for, você precisa ler o valor do buffer.
Mas você precisa ver o código para dizer exatamente. Ou janela de dados ctrl+D com valores indicadores na barra com alerta.
No apêndice desse artigo, ele se chama sHistoryExport.mq5. Meu compilador não aceita funções cujos nomes começam com "HistoryDeal..." e identificadores que começam com "DEAL_...". Aqui está o código:
#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);
}
//+------------------------------------------------------------------+
Para ser honesto, eu não verifiquei nada - não tenho o histórico do MT4 com o comércio à mão - apenas o escrevi "de joelhos" olhando o roteiro de 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);
}
//+------------------------------------------------------------------+
Obrigado pelo esclarecimento, Artem!
Mas há mais uma pergunta.
Às vezes, um EA abre um pedido imediatamente após o SL ter acionado. Assim, ele pode drenar todo o depósito em uma única vela.
Como especificar corretamente o atraso para abrir o próximo pedido após o fechamento do pedido atual? O tempo de atraso deve ser igual ao tempo do castiçal e ser calculado automaticamente.
Obrigado!
Obrigado pelo esclarecimento, Artem!
Mas há mais uma pergunta.
Às vezes, um EA abre um pedido imediatamente após o acionamento do SL. Assim, podemos deixar que todo o depósito seja drenado em uma única vela.
Como especificar corretamente o atraso para a abertura do próximo pedido após o fechamento do pedido atual? O tempo de atraso deve ser igual ao tempo do castiçal e ser calculado automaticamente.
Obrigado!
A lógica é a seguinte:
Bem, para ser honesto, eu não verifiquei nada - não tenho o histórico do negócio MT4 à mão - apenas o escrevi "de joelhos" olhando para o roteiro de Dimitri...
Funciona. À primeira vista tudo parece bem, abrir/fechar apenas escreve não a data, mas eu sei como consertar isso. Muito obrigado.
Ajuda com este assessor na construção anterior funcionou e agora não!!!!
Com o que você precisa de ajuda? Há alguma coisa que você não possa fazer você mesmo?
Há ajuda e discussão aqui, mas não a satisfação de desejos gratuitos
Com o que você precisa de ajuda? Há alguma coisa que você não possa fazer você mesmo?
Ajuda e discussão aqui, mas não a satisfação de desejos gratuitos
Eu não entendo qual é o erro?