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
Oi mladen,
Acho que estou ficando louco, aqui está meu código alterado do PeriodConverter.
//+------------------------------------------------------------------+
//| PeriodConverter.mq4 |
//| Copyright 2006-2014, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "2006-2014, MetaQuotes Software Corp."
#property link "http://www.mql4.com"
#property description "Period Converter to updated format of history base"
#property strict
#property show_inputs
#include
input int StartHour = 9;
input int StartMinute = 0;
input int CloseHour = 17;
input int CloseMinute = 30;
int ExtHandle=-1;
//+------------------------------------------------------------------+
//| script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
datetime time0;
ulong last_fpos=0;
long last_volume=0;
int i,start_pos;
int hwnd=0,cnt=0;
//---- History header
int file_version=401;
string c_copyright;
string c_symbol=Symbol();
int i_period=Period();
int i_digits=Digits;
int i_unused[13];
MqlRates rate;
//---
ExtHandle=FileOpenHistory("TT_"+c_symbol+(string)i_period+".hst",FILE_BIN|FILE_WRITE|FILE_SHARE_WRITE|FILE_SHARE_READ|FILE_ANSI);
if(ExtHandle<0)
return;
c_copyright="(C)opyright 2003, MetaQuotes Software Corp.";
ArrayInitialize(i_unused,0);
//--- write history file header
FileWriteInteger(ExtHandle,file_version,LONG_VALUE);
FileWriteString(ExtHandle,c_copyright,64);
FileWriteString(ExtHandle,c_symbol,12);
FileWriteInteger(ExtHandle,i_period,LONG_VALUE);
FileWriteInteger(ExtHandle,i_digits,LONG_VALUE);
FileWriteInteger(ExtHandle,0,LONG_VALUE);
FileWriteInteger(ExtHandle,0,LONG_VALUE);
FileWriteArray(ExtHandle,i_unused,0,13);
//--- write history file
start_pos=Bars-1;
rate.open=Open[start_pos];
rate.low=Low[start_pos];
rate.high=High[start_pos];
rate.tick_volume=(long)Volume[start_pos];
rate.spread=0;
rate.real_volume=0;
//--- normalize open time
rate.time=Time[start_pos];
for(i=start_pos-1; i>=0; i--)
{
if(IsStopped())
break;
time0=Time;
//--- history may be updated
if(i==0)
{
//--- modify index if history was updated
if(RefreshRates())
i=iBarShift(NULL,0,time0);
}
//---
if((time0>=rate.time || i==0) && MainTime(time0)==true)
{
if(i==0)
{
rate.tick_volume+=(long)Volume[0];
if(rate.low>Low[0])
rate.low=Low[0];
if(rate.high<High[0])
rate.high=High[0];
rate.close=Close[0];
}
last_fpos=FileTell(ExtHandle);
last_volume=(long)Volume;
FileWriteStruct(ExtHandle,rate);
cnt++;
if(time0>=rate.time)
{
rate.time=time0;
rate.open=Open;
rate.low=Low;
rate.high=High;
rate.close=Close;
rate.tick_volume=last_volume;
}
}
else if(MainTime(time0)==true)
{
rate.tick_volume+=(long)Volume;
if(rate.low>Low)
rate.low=Low;
if(rate.high<High)
rate.high=High;
rate.close=Close;
}
}
FileFlush(ExtHandle);
Print(cnt," record(s) written");
//--- collect incoming ticks
datetime last_time=LocalTime()-5;
while(!IsStopped())
{
datetime cur_time=LocalTime();
//--- check for new rates
if(RefreshRates())
{
time0=Time[0];
FileSeek(ExtHandle,last_fpos,SEEK_SET);
//--- is there current bar?
if(time0<rate.time && MainTime(time0)==true)
{
rate.tick_volume+=(long)Volume[0]-last_volume;
last_volume=(long)Volume[0];
if(rate.low>Low[0])
rate.low=Low[0];
if(rate.high<High[0])
rate.high=High[0];
rate.close=Close[0];
}
else if(MainTime(time0)==true)
{
//--- no, there is new bar
rate.tick_volume+=(long)Volume[1]-last_volume;
if(rate.low>Low[1])
rate.low=Low[1];
if(rate.high<High[1])
rate.high=High[1];
//--- write previous bar remains
FileWriteStruct(ExtHandle,rate);
last_fpos=FileTell(ExtHandle);
//----
rate.time=time0;
rate.open=Open[0];
rate.low=Low[0];
rate.high=High[0];
rate.close=Close[0];
rate.tick_volume=(long)Volume[0];
last_volume=rate.tick_volume;
}
//----
FileWriteStruct(ExtHandle,rate);
FileFlush(ExtHandle);
//---
if(hwnd==0)
{
hwnd=WindowHandle(Symbol(),i_period);
if(hwnd!=0)
Print("Chart window detected");
}
//--- refresh window not frequently than 1 time in 2 seconds
if(hwnd!=0 && cur_time-last_time>=2)
{
PostMessageA(hwnd,WM_COMMAND,33324,0);
last_time=cur_time;
}
}
Sleep(50);
}
//---
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
if(ExtHandle>=0)
{
FileClose(ExtHandle);
ExtHandle=-1;
}
//---
}
//+------------------------------------------------------------------+
bool MainTime(datetime time0)
{
datetime temp = time0 - 1 * 60 *60;
if(((TimeHour(temp) == StartHour && TimeMinute(temp) >= StartMinute) ||
TimeHour(temp) > StartHour) &&
(TimeHour(temp)< CloseHour ||
(TimeHour(temp) == CloseHour && TimeMinute(temp) < CloseMinute)))
{
Print(".......return (true) - Time0 = "+TimeToString(time0) + " tempTime = "+TimeToString(temp));
return(true);
}
else
{
Print("+++++++false - Time0 = "+TimeToString(time0) + " tempTime = "+TimeToString(temp));
return(false);
}
}
Adicionei a função MainTime para selecionar as barras que quero mostrar em meu novo gráfico offline.
(Eu também movi o tempo por uma hora, mas isso não é importante).
Agora quando testei isto em um gráfico com 15046 barras (M5) de 0:00 (Hora de início) - 12:00 (Hora de fechamento)
Estou recebendo as mensagens de impressão corretas e, no final, as informações, que 7596 barras foram escritas.
Portanto, está cerca da metade do gráfico original e, portanto, acho que tudo funcionou bem!
Mas quando abro o gráfico off-line correspondente, ele parece exatamente como o gráfico original com todas as barras.
Eu não consigo realmente entender esse comportamento?!?!
Oi mladen,
Acho que estou ficando louco, aqui está meu código alterado do PeriodConverter.
//+------------------------------------------------------------------+
//| PeriodConverter.mq4 |
//| Copyright 2006-2014, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "2006-2014, MetaQuotes Software Corp."
#property link "http://www.mql4.com"
#property description "Period Converter to updated format of history base"
#property strict
#property show_inputs
#include
input int StartHour = 9;
input int StartMinute = 0;
input int CloseHour = 17;
input int CloseMinute = 30;
int ExtHandle=-1;
//+------------------------------------------------------------------+
//| script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
datetime time0;
ulong last_fpos=0;
long last_volume=0;
int i,start_pos;
int hwnd=0,cnt=0;
//---- History header
int file_version=401;
string c_copyright;
string c_symbol=Symbol();
int i_period=Period();
int i_digits=Digits;
int i_unused[13];
MqlRates rate;
//---
ExtHandle=FileOpenHistory("TT_"+c_symbol+(string)i_period+".hst",FILE_BIN|FILE_WRITE|FILE_SHARE_WRITE|FILE_SHARE_READ|FILE_ANSI);
if(ExtHandle<0)
return;
c_copyright="(C)opyright 2003, MetaQuotes Software Corp.";
ArrayInitialize(i_unused,0);
//--- write history file header
FileWriteInteger(ExtHandle,file_version,LONG_VALUE);
FileWriteString(ExtHandle,c_copyright,64);
FileWriteString(ExtHandle,c_symbol,12);
FileWriteInteger(ExtHandle,i_period,LONG_VALUE);
FileWriteInteger(ExtHandle,i_digits,LONG_VALUE);
FileWriteInteger(ExtHandle,0,LONG_VALUE);
FileWriteInteger(ExtHandle,0,LONG_VALUE);
FileWriteArray(ExtHandle,i_unused,0,13);
//--- write history file
start_pos=Bars-1;
rate.open=Open[start_pos];
rate.low=Low[start_pos];
rate.high=High[start_pos];
rate.tick_volume=(long)Volume[start_pos];
rate.spread=0;
rate.real_volume=0;
//--- normalize open time
rate.time=Time[start_pos];
for(i=start_pos-1; i>=0; i--)
{
if(IsStopped())
break;
time0=Time;
//--- history may be updated
if(i==0)
{
//--- modify index if history was updated
if(RefreshRates())
i=iBarShift(NULL,0,time0);
}
//---
if((time0>=rate.time || i==0) && MainTime(time0)==true)
{
if(i==0)
{
rate.tick_volume+=(long)Volume[0];
if(rate.low>Low[0])
rate.low=Low[0];
if(rate.high<High[0])
rate.high=High[0];
rate.close=Close[0];
}
last_fpos=FileTell(ExtHandle);
last_volume=(long)Volume;
FileWriteStruct(ExtHandle,rate);
cnt++;
if(time0>=rate.time)
{
rate.time=time0;
rate.open=Open;
rate.low=Low;
rate.high=High;
rate.close=Close;
rate.tick_volume=last_volume;
}
}
else if(MainTime(time0)==true)
{
rate.tick_volume+=(long)Volume;
if(rate.low>Low)
rate.low=Low;
if(rate.high<High)
rate.high=High;
rate.close=Close;
}
}
FileFlush(ExtHandle);
Print(cnt," record(s) written");
//--- collect incoming ticks
datetime last_time=LocalTime()-5;
while(!IsStopped())
{
datetime cur_time=LocalTime();
//--- check for new rates
if(RefreshRates())
{
time0=Time[0];
FileSeek(ExtHandle,last_fpos,SEEK_SET);
//--- is there current bar?
if(time0<rate.time && MainTime(time0)==true)
{
rate.tick_volume+=(long)Volume[0]-last_volume;
last_volume=(long)Volume[0];
if(rate.low>Low[0])
rate.low=Low[0];
if(rate.high<High[0])
rate.high=High[0];
rate.close=Close[0];
}
else if(MainTime(time0)==true)
{
//--- no, there is new bar
rate.tick_volume+=(long)Volume[1]-last_volume;
if(rate.low>Low[1])
rate.low=Low[1];
if(rate.high<High[1])
rate.high=High[1];
//--- write previous bar remains
FileWriteStruct(ExtHandle,rate);
last_fpos=FileTell(ExtHandle);
//----
rate.time=time0;
rate.open=Open[0];
rate.low=Low[0];
rate.high=High[0];
rate.close=Close[0];
rate.tick_volume=(long)Volume[0];
last_volume=rate.tick_volume;
}
//----
FileWriteStruct(ExtHandle,rate);
FileFlush(ExtHandle);
//---
if(hwnd==0)
{
hwnd=WindowHandle(Symbol(),i_period);
if(hwnd!=0)
Print("Chart window detected");
}
//--- refresh window not frequently than 1 time in 2 seconds
if(hwnd!=0 && cur_time-last_time>=2)
{
PostMessageA(hwnd,WM_COMMAND,33324,0);
last_time=cur_time;
}
}
Sleep(50);
}
//---
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
if(ExtHandle>=0)
{
FileClose(ExtHandle);
ExtHandle=-1;
}
//---
}
//+------------------------------------------------------------------+
bool MainTime(datetime time0)
{
datetime temp = time0 - 1 * 60 *60;
if(((TimeHour(temp) == StartHour && TimeMinute(temp) >= StartMinute) ||
TimeHour(temp) > StartHour) &&
(TimeHour(temp)< CloseHour ||
(TimeHour(temp) == CloseHour && TimeMinute(temp) < CloseMinute)))
{
Print(".......return (true) - Time0 = "+TimeToString(time0) + " tempTime = "+TimeToString(temp));
return(true);
}
else
{
Print("+++++++false - Time0 = "+TimeToString(time0) + " tempTime = "+TimeToString(temp));
return(false);
}
}
Adicionei a função MainTime para selecionar as barras que quero mostrar em meu novo gráfico offline.
(Eu também movi o tempo por uma hora, mas isso não é importante).
Agora quando testei isto em um gráfico com 15046 barras (M5) de 0:00 (Hora de início) - 12:00 (Hora de fechamento)
Estou recebendo as mensagens de impressão corretas e, no final, as informações, que 7596 barras foram escritas.
Portanto, está cerca da metade do gráfico original e, portanto, acho que tudo funcionou bem!
Mas quando abro o gráfico off-line correspondente, ele parece exatamente como o gráfico original com todas as barras.
Eu não consigo realmente entender esse comportamento?!?!É porque você está usando o nome original e o período de tempo do símbolo. Você tem que mudar ou o nome do símbolo ou o período de tempo (melhor mudar o período de tempo, dessa forma todo seu código deve reconhecer o nome correto do símbolo)
Se você mudar o prazo, certifique-se de não usar alguns prazos "legais" (1,5,15,30,60,...)
Hi,
Esta ea é utilizada para a proteção da equidade em combinação com outras ea. Você pode inserir limites de lucros e perdas de patrimônio e quando o limite for atingido, a ea fechará todas as ordens e fechará outras EA.
O problema com a proteção de patrimônio líquido da ea é que ela só funciona quando o mt4 é maximizado. Se seu mt4 for minimizado ou estiver funcionando no VPS, quando o limite for atingido, a EA não começará a fechar ordens até que eu maximize a EA ou faça login no VPS. No momento em que eu fizer o login ou maximizar o fechamento da ea start closing.
Thnx.
Hi,
Esta ea é utilizada para a proteção da equidade em combinação com outras ea. Você pode inserir limites de lucros e perdas de patrimônio e quando o limite for atingido, a ea fechará todas as ordens e fechará outras EA.
O problema com a proteção de patrimônio líquido da ea é que ela só funciona quando o mt4 é maximizado. Se seu mt4 for minimizado ou estiver funcionando no VPS, quando o limite for atingido, a EA não começará a fechar ordens até que eu maximize a EA ou faça login no VPS. No momento em que eu fizer o login ou maximizar o fechamento da ea start closing.
Thnx.Ele se comporta da mesma forma em seu PC (não no VPS)?
Se funcionar bem em seu PC nas mesmas condições, então você tem um problema com seu VPS.
É porque você está usando o nome original e o período de tempo do símbolo. Você tem que mudar ou o nome do símbolo ou o período de tempo (melhor mudar o período de tempo, dessa forma todo seu código deve reconhecer o nome correto do símbolo)Se você mudar o período de tempo, certifique-se de não usar alguns períodos de tempo "legais" (1,5,15,30,60,...)
Obrigado, eu mudei
ExtHandle=FileOpenHistory("TT_"+c_symbol+(string)3+".hst",FILE_BIN|FILE_WRITE|FILE_SHARE_WRITE|FILE_SHARE_READ|FILE_ANSI);
and
FileWriteInteger(ExtHandle,3,LONG_VALUE);
Mas se eu abrir o gráfico offline ...,M3 só mostra "Aguardando Atualizações"... e nada acontece
Obrigado, eu mudei
ExtHandle=FileOpenHistory("TT_"+c_symbol+(string)3+".hst",FILE_BIN|FILE_WRITE|FILE_SHARE_WRITE|FILE_SHARE_READ|FILE_ANSI);
and
FileWriteInteger(ExtHandle,3,LONG_VALUE);
Interessante
Use este como base para seu indicador. Este aqui funciona (parece que a versão que você usou como base tem erros nele)
Ajude-me! para esta ea
Saudações
Por favor, especialistas
fixado em EA parar de perder e ter lucro
lacunas.ex4
lacunas.mq4
Olá,
Você pode ajudar a adicionar uma opção DEMA ao indicador anexo?
Atualmente as opções são:
0= sma
1=ema
2=smma
3=lwma
Gostaria de acrescentar:
4= DEMAIsto é possível?Muito obrigado!
Olá,
Você pode ajudar a adicionar uma opção DEMA ao indicador anexo?
Atualmente as opções são:
0= sma
1=ema
2=smma
3=lwma
Gostaria de acrescentar:
4= DEMAIsto é possível?Muito obrigado!MrWigglesworth
Aqui está uma versão com dema adicionada como tipo 4 : ma__dema_crossover_with_arrow_and_email.mq4
Saudações
Por favor, especialistas
fixado em EA parar de perder e ter lucro
lacunas.ex4
lacunas.mq4amirreza132
Que a EA é projetada para capturar lacunas e já tem lucro nos casos em que a lacuna acontece