Mudança de Série Mini Índice e Mini Dólar

 

Amigos boa tarde ,,,


Desenvolvi um Robô que está muito mas muito consistente, porém, eu esqueço de mudar a Série dos Contratos quando vence...


Vcs conhecen algum Código MQL5 que emita um aviso quando a Série Mudar?


Agradeço qualquer ajuda ou opinião... 

 
douglas_sb:

Amigos boa tarde ,,,


Desenvolvi um Robô que está muito mas muito consistente, porém, eu esqueço de mudar a Série dos Contratos quando vence...


Vcs conhecen algum Código MQL5 que emita um aviso quando a Série Mudar?


Agradeço qualquer ajuda ou opinião... 

Douglas, conheço não, mas rapaz são tão poucas que ocorrem ao ano, se não me engano apenas 6 vezes. Então é muito fácil você mesmo embutir isso no EA, cria um array, coloca os valores lá e faz uma rotina para diariamente consultar. Pesquisando no google você saberá os nomes e datas das séries de 2021, ai basta tabelar.

 

Porquê não, sempre quando o par alterar você enviar uma atualização do robô no MQL?

1.01, 1.02, 1.03, 1.04 .......


Acredito que possível efetuar essa alteração remota sem atualizar o robô, criando um syntax de verificação remota através de um servidor, como por exemplo o código de verificar licença através de servidor remoto.

Mas... não vai ser tão fácil.


Ótima sorte!

 
Igor Pereira Calil:

....

e vc colocaria o ativo chumbado no codigo do EA?? Erro amador isso né!

basta calcular, não existe uma tabela ?

O vencimento ocorre nos meses pares, na quarta-feira mais próxima do dia 15 do mês de vencimento."


muito fácil!

 
Jonathan Pereira:

e vc colocaria o ativo chumbado no codigo do EA?? Erro amador isso né!

basta calcular, não existe uma tabela ?

O vencimento ocorre nos meses pares, na quarta-feira mais próxima do dia 15 do mês de vencimento."


muito fácil!

Como se faz de forma automática se está posicionado ex no milho? No milho muitos contratos seguintes não tem liquidez. ex somente a segunda, terceira série tem liquidez.

Como trocar de contrato, saber o próximo com liquidez, fechar o vigente no qual se está posicionado e abrir uma posição no mesmo sentido do contrato com liquides via Ea?

Se alguém puder me ajudar seria muito grato.

 

Eu tenho um robô que faz a troca automática sem nenhuma intervenção válido até o ano de 2099, ou pelo menos enquanto não mudarem a regra atual de composição dos códigos.

Ele pode trocar de código automaticamente se for carregado nos ativos Índice, Dólar, Mini-Índice e Mini-Dólar.

O robô efetua a troca do código para a série seguinte no último dia de vigência do código. Isso porque o volume negociado da próxima séria já é maior neste dia.

 
superfilhos #:

Como se faz de forma automática se está posicionado ex no milho? No milho muitos contratos seguintes não tem liquidez. ex somente a segunda, terceira série tem liquidez.

Como trocar de contrato, saber o próximo com liquidez, fechar o vigente no qual se está posicionado e abrir uma posição no mesmo sentido do contrato com liquides via Ea?

Se alguém puder me ajudar seria muito grato.

Eu faço isso assim:

1) coloco o robo no historico por liquidez;

2) o robo no inicio do dia verifica se eh o ultimo dia do contrato que ele opera ou se ele nao tem nada posicionado;

3) apos a verificacao do 2, ele busca o isin mencionado no ativo que ele esta e busca o primeiro ativo que tenha o mesmo isin e seja possivel abrir operações (modo full);

 
Atualizar Contrato Futuro Automaticamente 
Coloque na OnInit

//Obter o Contrato Futuro WIN vigente

String ativo_futuro_atual = StringSubstr(SymbolInfoString("WIN$N", SYMBOL_DESCRIPTION),StringFind(SymbolInfoString("WIN$N",SYMBOL_DESCRIPTION),"W",0,6);

//Atualizar o Gráfico com o ativo futuro vigente

ChartSetPeriod(ChartID(),ativo_futuro_atual,Period());

Obs:
Isso é para o Contrato Futuro de Mini Índice utilizando a série WIN$N, para Mini Dólar utilize WDO$N
 
marlosfer #:
Coloque na OnInit

//Obter o Contrato Futuro WIN vigente

String ativo_futuro_atual = StringSubstr(SymbolInfoString("WIN$N", SYMBOL_DESCRIPTION),StringFind(SymbolInfoString("WIN$N",SYMBOL_DESCRIPTION),"W",0,6);

//Atualizar o Gráfico com o ativo futuro vigente

ChartSetPeriod(ChartID(),ativo_futuro_atual,Period());

Obs:
Isso é para o Contrato Futuro de Mini Índice utilizando a série WIN$N, para Mini Dólar utilize WDO$N

muito obrigado pelo codigo @marlosfer


string ativo_futuro_atual = StringSubstr(SymbolInfoString("WIN$N",SYMBOL_DESCRIPTION ),StringFind(SymbolInfoString("WIN$N",SYMBOL_DESCRIPTION),"W",0),6);
 
Fiz um código que pode ajudar:

Na oninit: 

MqlDateTime datet;
TimeToStruct(TimeCurrent(), datet); //TimeCurrent pode ser substituido por outra data para retornar o contrato daquela data, se em backtest, use TimeCurrent para retornar o do dia atual no ambiente de teste

if(datet.mon == 2 ) //O vencimento é em fevereiro em relação ao contrato futuro.. O seguinte..
{letra_mes_atual = "J";}
if(datet.mon == 4)
{letra_mes_atual = "M";}
if(datet.mon == 6)
{letra_mes_atual = "Q";}
if(datet.mon == 8)
{letra_mes_atual = "V";}
if(datet.mon == 10)
{letra_mes_atual = "Z";}
if(datet.mon == 12)
{letra_mes_atual = "G";}
int nearestWednesday = GetNearestWednesday(2024, 10);
    Print("A quarta-feira mais próxima do dia 15 é o dia: ", nearestWednesday);
Void:

int GetNearestWednesday(int year, int month) 
{
int dia_rolagem_inf;int dia_rolagem_sup;
int dif_sup;int dif_inf;
    MqlDateTime date;date.year = year;date.mon = month;date.day = 15;datetime dt = StructToTime(date); int dayOfWeek = date.day_of_week; // Obtém o dia da semana para o dia 15
    if (dayOfWeek == 3) { // 3 significa quarta-feira
        return 15;
    } else {
        
for(int i = 15; i > 8; i--)
{
    MqlDateTime dates;
    dates.year = year;
    dates.mon = month;
    dates.day = i;
    
    
    datetime dts = StructToTime(dates);
    TimeToStruct(dts, dates);
    
    if(dates.day_of_week == 3) // 3 representa quarta-feira
    {
    dif_inf = 15-i;
    dia_rolagem_inf = i;
    }
    
}
for(int i = 15; i < 22; i++)
{
    MqlDateTime dates;
    dates.year = year;
    dates.mon = month;
    dates.day = i;
    
    // Converte para datetime e atualiza `dates` com informações completas
    datetime dts = StructToTime(dates);
    TimeToStruct(dts, dates); // Atualiza `dates` para obter `day_of_week`
    
    if(dates.day_of_week == 3) // 3 representa quarta-feira
    {
    dif_sup= i-15;
    dia_rolagem_sup = i;
    }
    
}

}
if(dif_inf < dif_sup)//Retorna a quarta-feira mais próxima
{
return dia_rolagem_inf;
}else
{
return dia_rolagem_sup;
}
}