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

 

Não abre um negócio, onde está a culpa?

iRSI_handle=iRSI(NULL,0,15,PRICE_OPEN);

double iRSI_buf[];

ArraySetAsSeries(iRSI_buf,true);

CopyBuffer(iRSI_handle,0,0,20,iRSI_buf);

if (iRSI_buf[0]>60)

trader.Buy(Lot);
 
Askr:

Não abre o comércio, onde está o insecto?

Bug número 1: Em cada tick cria um NOVO indicador MANÍPULO

Shoal número 2: (provavelmente) a variável Lote tem um volume incorrecto.

Falha número 3: (provavelmente) o tipo de enchimento de encomenda para a classe CTrade não é preenchido.


Em geral, o que está no diário de bordo do terminal (ou do testador)?

 
Kirill Belousov:

o montante multiplicado pela perda em moeda a partir de 1 SL

E se a perda for 1, em BO, por exemplo.

Coloco os valores na fórmula, nem sequer perto do mesmo resultado.

O que é que está errado?

double lot=1.0;
double koef_lot=2.0;
int seriya =15;
double depo=0.0;
depo=(lot*(koef_lot*seriya-1))/(koef_lot-1);
   Comment(" depo ",depo);
 
Vladimir Karputov:

Lacuna número 1: Em cada tique cria um NOVO indicador MANÍPULO

Shoal número 2: (provavelmente) a variável Lote tem um volume incorrecto.

Falha número 3: (provavelmente) o tipo de enchimento de encomenda para a classe CTrade não é preenchido.


De qualquer forma, o que está no registo do terminal (ou do testador)?

Este código sim estava na onítica

ArraySetAsSeries(iRSI_buf,true);

CopyBuffer(iRSI_handle,0,0,20,iRSI_buf);

Transferiu-o para a onytics. Acabei de ler os artigos aqui - e compreendi que não há diferença para o trabalho, mas é melhor no onitiket. Mas em termos de clareza para mim, era mais conveniente fazer tudo em 1 bloco, sou puramente para mim enquanto resolvo problemas que me proponho (aprendizagem).

O problema foi com o lote - tive de colocar não um lote variável - e a função returnlot (porque era uma função para calcular o lote).

Agora encontrei um erro na função de lote - o lote é calculado com muitas casas decimais e, como resultado, a ordem não pode ser aberta. Precisamos de reduzir os caracteres desnecessários e deixar apenas 2.

//параметры
input double      StartLot=0.1;
input double      StartEquityLot=10000;

//переменные
double KoefLotEQUITY;//разница эквити
double Lot;

//функция расчета текущего торгового лота
double LotF(double Lot)
{
KoefLotEQUITY=AccountInfoDouble(ACCOUNT_EQUITY)/ StartEquityLot;
Lot=StartLot*KoefLotEQUITY;
//функция минимального возможного лота
if (Lot<0.01)
{
Lot=0.01;
}

return(Lot);
} 

NormalizeDouble e DoubleToStr até agora não podem funcionar - escreve que a função não pode ser colocada na função, e abaixo quando coloco o seu trabalho com a função escreve erro - que não posso corrigir.


 
Askr:

Este código estava na onítica.

Mudou-o para ontic. Acabei de ler os artigos aqui - e deles entendi que não há diferença para o trabalho, mas é melhor em ontiket. Mas em termos de clareza para mim, era mais conveniente fazer tudo em 1 bloco, sou puramente para mim enquanto resolvo problemas que me proponho (aprendizagem).

O problema era com o lote - não era necessário definir um lote variável - e a função returnlot (porque havia uma função para calcular o lote).

Agora encontrei um erro na função de lote - o lote é calculado com muitas casas decimais e, como resultado, a ordem não pode ser aberta. Precisamos de reduzir os caracteres desnecessários e deixar apenas 2.

Quando colo a função NormalizeDouble e DoubleToStr ainda não o posso fazer, diz que a função não pode ser colocada nela e abaixo vejo erros que não posso corrigir.


Na MQL5 é necessário criar um manípulo indicador SOMENTE uma vez e SOMENTE no OnInit. É um axioma. Não é possível criar um manípulo indicador em cada tick no OnTick - está incorrecto.

A normalização correcta do lote está na classe de comércio CSymbolInfo::NormalizePreço

 
Vladimir Karputov:

Na MQL5 deve criar um manípulo indicador SOMENTE uma vez e SOMENTE no OnInit. É um axioma. Não é possível criar um manípulo indicador em cada tick no OnTick - isto é DIREITO.

A normalização correcta do lote está na classe de comércio CSymbolInfo::NormalizePreço

Errado, eu não discuto com isso. MAS!!! O que mudará se o criarmos em cada carrapato? Nem mesmo o valor irá mudar.

 
Alexey Viktorov:

Errado, não há discussão com isso. MAS!!! O que vai mudar se criar em cada carrapato?? Nem mesmo o valor irá mudar.

Qual é o objectivo? Apenas muito trabalho extra para o guião, só isso.

 
Alexey Viktorov:

Errado, não há discussão com isso. MAS!!! O que vai mudar se criar em cada carrapato?? Nem mesmo o valor irá mudar.

Num artigo recente, mostrei que a MQL5 combate eficazmente os vestígios da codificação no estilo MQL4 - criação de pegas em cada carrapato: a memória não é desperdiçada, mas a velocidade de operação é pelo menos reduzida. Mas repito: a criação de indicadores em MQL5 no estilo MQL4 não é o método correcto. Se mudar para MQL5, isso significa que o estilo de programação deve ser reconstruído.

 
Konstantin Nikitin:

Qual é o objectivo? É apenas um trabalho extra para o guião, só isso.

É claro que não vale a pena. Foi uma pergunta tão oculta drubashke: Porquê assemelhar-se ao neurótico, que aqui já é suficiente, e incluir Caps Lock?

 

Ou seja, o resultado é o mesmo, mas é claro que a execução não tem sentido e é muito mais ocupada, como entendo pelo que foi escrito.

Gostaria que tivessem pensado em escrever sobre isso no artigo, mas em geral é claro que não há razão para fazer a mesma coisa várias vezes.

Mas eu tinha o objectivo de escrever para compreender e trabalhar por si próprio, não para optimizar - isto é, depois de ter contado.