Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 97

 
Vladon:

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.

 
Vladon:

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 decurso do trabalho do Consultor Especialista, foram feitas modificações, foram acrescentadas várias funções, etc., pelo que não há código fonte aberto com estas modificações.
 
ComplexFX:
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 o faço manualmente?
 
pogeon:
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?
Em mql5, uma posição aberta é fechada por ordens opostas, cujo volume total é igual ao volume de uma posição fechada.
 
progeon:
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

Документация по MQL5: Стандартная библиотека / Торговые классы / CTrade / PositionClose
Документация по MQL5: Стандартная библиотека / Торговые классы / CTrade / PositionClose
  • www.mql5.com
Стандартная библиотека / Торговые классы / CTrade / PositionClose - Документация по MQL5
 
Yedelkin: Em mql5, uma posição aberta é fechada por ordens dirigidas contrariamente, cujo volume total é igual ao volume da posição fechada.

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.

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
Основы языка / Функции / Функции обработки событий - Документация по MQL5
 
Boris.45: hora do bar zero aberto Time_H1[1][1]=2011.01.03 13:00:00, depois a hora do primeiro bar aberto Time_H1[1][1]=2011.01.03 11:00:00
E o que é que o Time_H1[1][0] devolve?
 
Yedelkin:

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.