Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 97
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
A ideia é sua, mas não o código. O programador escreveu o código, não você, você escreveu o ToR.
Imagine - utilizadores de Windows que exigem código aberto - não será isso absurdo?
Tanto quanto sei, o código utilizado pelos peritos pertence à MetaQuotes, ou a si pessoalmente?
O que tem isto a ver com o Windows, em primeiro lugar os utilizadores não têm o direito de o exigir porque este produto pertence à macrosoft, aqui é um pouco diferente, a macrosoft vai começar a pedir o código fonte aberto do seu produto aos programadores que o escreveram, e eles vão torcer os dedos e não o dar.
Aah :-=) então há fontes antes da protecção? o que mais quer então? Foi-lhe dito - ninguém dará código fonte aberto de EA protegido, e eu não o daria. E se houvesse um requisitopara exigir o código fonte do seu produto após a conclusão.
Eu teria recusado a tarefa.
De que mais precisa então? Há o código fonte antes da defesa, portanto é o mesmo que o conselheiro com a defesa. eles devem trabalhar igualmente bem.
No processo do trabalho do Consultor Especialista, foram feitas modificações, foram acrescentadas várias funções, etc., mas não há código fonte aberto com estas modificações.
então penso que a verdade está do vosso lado.
Tanto quantosei, o código utilizado pelos peritos pertence à MetaQuotes, ou a si pessoalmente?
Se eu escrever o código, ele pertence-me a mim pessoalmente.MetaQuotes é proprietária da linguagem de programação.
tudo é justo.
Pode dizer-me como fechar uma encomenda em aberto no Expert Advisor? Compreendo como fechar uma posição usando Stop Loss ou Take Profit. Como fazê-lo manualmente?
Pode aconselhar como fechar uma encomenda aberta num Consultor Especialista? Compreendo como uma posição é fechada em Stop Loss ou Take Profit. Como fazê-lo manualmente?
Ou utilizar a classe CTrade, que tem uma função
trade.PositionClose(_Symbol);
algo como isto
https://www.mql5.com/ru/docs/standardlibrary/tradeclasses/ctrade/ctradepositionclose
lazarev-d-m: Ou utilize a classe CTrade, existe uma função
O método PositionClose() da classe CTrade também fecha uma posição utilizando ordens opostas.
Por favor, aconselhem-me sobre a solução ou a razão para esta situação. Estou a trabalhar na MQL5 não há muito tempo, por isso ainda não tenho experiência suficiente.
Tentei fazer um EA multi-divisas sem utilizar aulas. Infelizmente, não encontrei nenhum artigo detalhado sobre EAs multi-divisas.
Escrevi a seguinte peça de código.
int nomer_instr; // este é o número de índice de moeda na matriz de nomes de moeda
string Name_symbol[6] = {"AUDUSD", "EURUSD", "GBPUSD", "USDCAD", "USDCHF", "USDJPY" } ; // matriz de nomes de moeda: em [0]-"AUDUSD", 1-"EURUSD", 2-"GBPUSD", 3-"USDCAD", etc.
duplo Close_buf[], Open_buf[], High_buf[], Low_buf[]; //base arrays para parâmetros de candelabros
datatime Time_buf[]; //base array of bar open time
duplo Close_H1[6][150], Open_H1[6][150], High_H1[6][150], Low_H1[6][150]; // arrays para parâmetros de velas EA multi-moeda para o período de tempo H1
// o número de filas na matriz corresponde ao número de moedas analisadas
data/hora Hora_H1[6][150]; // matriz de tempo de abertura do bar
duplo Close_H4[6][150], Open_H4[6][150], High_H4[6][150], Low_H4[6][150]; // arrays para parâmetros de candelabros do Expert Advisor multimoedas para o período de tempo H4
// o número de filas na matriz corresponde ao número de moedas analisadas
data/hora Hora_H4[6][150]; // hora de abertura da barra de arrays
int OnInit()
{
}
nulo OnDeinit(const int razão)
{
//---
ArrayFree(Time_buf);
ArrayFree(Close_buf);
ArrayFree(Open_buf);
ArrayFree(High_buf);
ArrayFree(Low_buf);
}
nulo OnTick()
{
//------------------------------------------------------------------------------
aqui está uma peça de código para determinar o momento em que uma nova barra abre Nev_Time[0].
e o número de série da barra em processamento no processo de teste ou de comercialização
//------------------------------------------------------------------------------------------------------------------------
ArraySetAsSeries(Close_buf, true); //set indexing for the close_array array as in timeseries
ArraySetAsSeries(Open_buf, true); //set indexing for array open_array como em séries temporais
ArraySetAsSeries(High_buf, true); //set indexing for array high_array como em séries temporais
ArraySetAsSeries(Low_buf, true); //set indexing for array low_array as in timeseries
ArraySetAsSeries(Time_buf, true); //set indexing for array time_array como nas séries temporais
for( nomer_instr=0; nomer_instr<==5; nomer_instr++ )
{
//========================================================================
CopyTime( Nome_símbolo[nomer_instr], PERÍODO_H1,0,160,Time_buf); // copiar dados históricos de tempo para cada barra para o buffer
CopyClose( Nome_símbolo[nomer_instr], PERÍODO_H1,0,160,Close_buf); // copiar os dados históricos de fecho de cada barra para o buffer
CopyOpen( Nome_símbolo[nomer_instr], PERÍODO_H1,0,160,Open_buf); // copiar os dados do histórico aberto para cada barra para o buffer
CopyHigh( Nome_símbolo[nomer_instr], PERÍODO_H1,0,160,high_buf); // copiar os dados do histórico alto para cada barra para o buffer
CopyLow( Nome_símbolo[nomer_instr], PERÍODO_H1,0,160,low_buf); // copiar dados históricos baixos para cada barra para o buffer
//========================================================================
for( i=1; i<=145; i++ )
{
Time_H1[nomer_instr][i]=Time_buf[i];
Close_H1[nomer_instr][i]=Close_buf[i];
Open_H1[nomer_instr][i]=Open_buf[i];
High_H1[nomer_instr][i]=High_buf[i];
Low_H1[nomer_instr][i]=Low_buf[i];
}
//======================================================================================
// verificar a mudança de hora dos dados gerados do castiçal de uma hora de tempo
if( Schetchik_svech > 8 && Schetchik_svech < 15 )
{
if( nomer_instr == 5 )
{
Alert("================================================");
Alert(" número do bar = ",Schetchik_svech,", bar open time Nev_Time[0]=",Nev_Time[0]);
Alerta(" número do instrumento: nomer_instr=",nomer_instr,", instrumento: Nome_símbolo[nomer_instr]=",Nome_símbolo[nomer_instr]);
Alert("---------------------------------------------------------");
for(( i=1; i<=5; i++ )
{
Alert("i=",i,", Time_H1[nomer_instr][i]=",Time_H1[nomer_instr][i],", Close_H1[nomer_instr][i]=",Close_H1[nomer_instr][i]);
}
}
}
//======================================================================================
} // fim do laço para as moedas usadas no período de tempo H1
//##############################################
aqui está a mesma parte do gráfico para o cronograma H4
//############################################
} // fim da função OnTick()
A verificação do desempenho desta peça de software revelou-me um resultado inesperado:
- Para o caso de H1, quando a saída dos parâmetros de barras para o gráfico, em que se encontra o Expert Advisor, temos uma diferença de uma hora entre a abertura da barra zero e a primeira barra.
Por exemplo, o Expert Advisor está no gráfico EURUSD e a hora da abertura da barra zero é Nev_Time[0]=2011.01.03 13:00:00, depois a hora da abertura da primeira barra Time_H1[1][1]=2011.01.03 12:00:00
O resultado é consistente com o senso comum.
- Agora o Expert Advisor está no mesmo gráfico e analisamos os dados de qualquer outra moeda, por exemplo , AUDUSD:
hora da abertura da barra zero Nev_Time[0]=2011.01.03 13:00:00, depois a hora de abertura da 1ª barra Time_H1[1][1]=2011.01.03 11:00:00
Este resultado é simplesmente inaceitável, mas não encontrei nenhuma razão para este efeito nos artigos.
Por favor, aconselhe como se livrar deste incómodo, não posso escrever um Consultor Especialista para cada moeda.
Obrigado pelo seu feedback.
O que é que o Time_H1[1][0] devolve?
Não utilizo este elemento da matriz, porque irei directamente ao algoritmo para procurar fractais nas últimas 5 barras. E Time_H1[1][0] é o tempo aberto da barra zero onde os parâmetros desta barra ainda não foram formados. Posso estar errado, mas pela minha própria experiência, sei que a utilização de parâmetros de uma barra zero para formar séries temporais leva à sua distorção.