Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 52

 
trader781:

O que fazer se a parada/parada for 200

mas

tp=NormalizeDouble((preço+(TakeProfit*_Point)),Dígitos);

sobre um dólar-yen renderá 317.000 à taxa de câmbio de 117.000

resultado esperado 117.200

Se Point()==0,001 (em USDJPY), então 200*0,001 é igual a 0,2

Agora, se adicionarmos 0,2 a 117,0, obtemos 117,2

Onde está a "injustiça"?

 
Artyom Trishkin:

Se Point()==0,001 (em USDJPY), então 200*0,001 é igual a 0,2

Agora, se adicionarmos 0,2 a 117,0, obtemos 117,2

E onde está a "injustiça"?

espera-se que 117+(200*_Ponto) renderá 117.200

é normalmente testado em EURUSD

Vitaly o descreveu acima, obrigado.

Acho que o encontrei.

Acho que é bom o suficiente como algoritmo intermediário e agora é necessário filtrar esses momentos de alguma forma

https://www.mql5.com/ru/charts/6351907/audjpy-m5-metaquotes-software-corp

График AUDJPY, M5, 2017.01.02 22:49 UTC, MetaQuotes Software Corp., MetaTrader 4, Demo
График AUDJPY, M5, 2017.01.02 22:49 UTC, MetaQuotes Software Corp., MetaTrader 4, Demo
  • www.mql5.com
Символ: AUDJPY. Период графика: M5. Брокер: MetaQuotes Software Corp.. Торговая платформа: MetaTrader 4. Режим торговли: Demo. Дата: 2017.01.02 22:49 UTC.
 
trader781:

117+(200*_Ponto) deve dar uma saída de 117.200

...

Bem, isso é o que ele está dando... Eu lhe mostrei o cálculo. Ou você tem várias moedas e recebe dados de um símbolo "não nativo"?

Depois use SymbolInfoDouble() e (int)SymbolInfoInteger() em vez de Point() e Digits()

 
Artyom Trishkin:

Bem, isso é o que ele está dando... Eu lhe mostrei o cálculo. Ou você tem uma multi-moeda, e tira os dados de um símbolo "não nativo"?

Em vez de Point() e Digits() use SymbolInfoDouble() e (int)SymbolInfoInteger()

Obrigado, funciona))))

Atualmente estou procurando uma maneira de inserir uma parada móvel em uma cadeia de pedidos

Tenho 10 pedidos em etapas de 200 de 115.000 a 117.000

Cada lote é maior por valor x do que o anterior

o objetivo é colocar uma parada móvel em toda a cadeia de pedidos usando o seguinte cálculo (preço médio)+(y*_Ponto)

Minha pergunta é como anexá-lo ao preço médio de toda a pilha e como ele é calculado dependendo dos lotes

 
trader781:

Obrigado, funciona))))

Atualmente procurando uma maneira de inserir o rastreamento em uma cadeia de pedidos

Tenho 10 pedidos em etapas de 200 de 115.000 a 117.000

Cada lote é maior por valor x do que o anterior

o objetivo é colocar uma parada móvel em toda a cadeia de pedidos usando o seguinte cálculo (preço médio)+(y*_Ponto)

Eu mesmo tenho uma rolha de arrasto; a questão é como prendê-la ao preço médio de toda a pilha e como ela é calculada em função dos lotes

Um conselho universal: Aprenda a programar do zero. Então você não terá tais perguntas, a programação não é uma tarefa fácil.

E à essência da pergunta: Então, você tem que olhar através de TODAS as ordens no loop, selecionando apenas "necessárias" e modificando-as. Mas é preciso ter muito cuidado com esta questão, pois a probabilidade de substituir a ordem selecionada para trabalhar é muito alta.

 
Alexey Viktorov:

Um conselho universal: Aprenda a programar do zero. Então não haverá tais perguntas, a programação não é fácil.

E à essência da pergunta: Portanto, você precisa passar por TODAS as ordens do loop, selecionando apenas "necessárias" e modificando-as. Mas é preciso ter muito cuidado com esta questão, pois a probabilidade de substituir a ordem selecionada para trabalhar é muito alta.

Não é alto, mas 100%. No momento estou trabalhando no último e o resto está em pausa, mas o esquema é impreciso e eu gostaria de torná-lo melhor
 

Bom dia a todos, escrevi um EA baseado em MA. (Eu mesmo comecei a escrever na MQL4 não faz muito tempo, então decidi começar com algo simples. Por isso, eu queria saber o que fiz de errado. A essência do Expert Advisor é simples: dar um alerta quando dois ou três MAs são cruzados (dependendo do MÉTODO: Agressivo = cruzamento de dois MAs, conservador = cruzamento de 3 MAs) ... Isso é tudo. Eu entrarei no mercado por conta própria. Em meu consultor especializado, eu prescrevi duas funções: Agressivo - este é um sinal em um simples cruzamento de dois MA e Conservador mais rápidos - quando no cruzamento de dois MA rápidos você também deve considerar o mais lento (ou seja, o sinal na direção da tendência). O problema é que o Expert Advisor dá apenas UM alerta (quando inicia ou muda o cronograma) e fica em silêncio sobre todos os sinais subsequentes! Eu ficaria grato se você me dissesse o que está errado. Eu prescrevi a função para todos os eventos de acordo com as regras da MQL4. É claro que eu poderia registrar tudo sem funções no evento On Tick, mas eu quero registrar funções separadamente, para que asfunções possam ser facilmentechamadas e eu quero adicionar novas funções de "filtros" com o tempo.

Código

================================================================================================

Método externo de bool=falso; // seleção do método: Conservador ou Agressivo.

Tempo_Frame=1;//Time frame

input bool Metod=false; //Conservative-TRUE | Aggressive-FALSE

FastMA_Parametr=5;

int int int int intMA_Parametr=8;

externo int SlowMA_Parametr=18;

TendMA externo interno=163;

bool externo DemarkGo=falso;

período externo interno Demperiodo=4;

int rez;// se MA cruzar para baixo, rez=-1. se cruzar para cima, rez=1.

//+------------------------------------------------------------------+

// Inicializar MA

duplo FastMA=iMA(Symbol(),Time_Frame,FastMA_Parametr,0,3,0,0);// FastMA

duplo MiddiMA=iMA(Symbol(),Time_Frame,MidMA_Parametr,0,3,0,0);// Média MA

duplo SlowMA=iMA(Symbol(),Time_Frame,SlowMA_Parametr,0,1,0,0); Slow MA


//+------------------------------------------------------------------+

int OnInit()

{

rez=0;

return(INIT_SUCCEED);

}

//=======================================

//------------------------------------------------------------------------------

nulo OnDeinit(const int razão)

{



}

//=============================================

//+---------------------Função para o sinal Konservative se Metod=true---------------------------------------------+

int Konservative()

//Cheque um crossover ascendente de 3 linhas

{

se (Metod===verdadeiro)


{

if(FastMA>MiddiMA&&&MiddiMA>SlowMA&&&rez<=0)

{

Alert(Symbol(),Time_Frame,"----Up----. Conservador");

rez=1;

Comentário ("FastMA ",FastMA," MiddiMA ",MiddiMA," SlowMA ",SlowMA," rez ",rez);

retorno(rez);


}


//Cheque para crossover para baixo de 3 linhas

if(FastMA<MiddiMA&&&MiddiMA<SlowMA&&&rez>=0)

{

Alert(Symbol(),Time_Frame", ---- DOWN----. Conservador");

rez=-1;

Comentário ("FastMA ",FastMA," MiddiMA ",MiddiMA," SlowMA ",SlowMA," rez ",rez);

retorno(rez);


}

}

retorno(rez);

}

//=================================================

//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Função agressiva se

int Agressivo()

// Verifique se há um cruzamento ascendente de 2 linhas sem lentidão


{

se (Método==falso)

{

if(FastMA>MiddiMA&&rez<=0)

{

Alert(Symbol(),Time_Frame,"----Up----. agressivo");

rez=1;

Comentário ("FastMA ",FastMA," MiddiMA ",MiddiMA," SlowMA ",SlowMA," rez ",rez);


}


//Cheque para o crossover descendente de 2 linhas sem uma linha lenta

if(FastMA<MiddiMA&&rez>=0)

{

Alert(Symbol(),Time_Frame", ---- DOWN----. Agressivo");

rez=-1;

Comentário ("FastMA ",FastMA," MiddiMA ",MiddiMA," SlowMA ",SlowMA," rez ",rez);

}

}

retorno(rez);

}

 
Олег:


Aqui, eu acho que você mesmo pode fazer isso.
Arquivos anexados:
6645.mq4  7 kb
 
trader781:
Não é alto, mas 100%. No momento atual é a última ordem e as outras estão em pausa, mas o esquema não é preciso e gostaria que fosse melhor.

Não, não 100%. Ou talvez você esteja falando de algo mais.

Em geral, o algoritmo é o seguinte:

Você criou um loop para passar por todas as ordens.

Você seleciona a próxima ordem para trabalhar com ela.

Você verifica se essa ordem é necessária... Caso contrário, a próxima iteração do laço...

Se for "necessário", então você verifica se é adequado para modificação. Basta comparar o quanto está longe de seu nível StopLoss

Se a distância for suficiente, o pedido é modificado.


Portanto, se você tiver uma função de modificação com um loop em todos os pedidos, e antes de sua chamada, o loop também estiver funcionando, então o pedido selecionado será alterado...

 
Alexey Viktorov:

Não, não 100%. Ou talvez você esteja falando de algo mais.

Em geral, o algoritmo é o seguinte:

Você criou um loop para passar por todas as ordens.

Você seleciona a próxima ordem para trabalhar com ela.

Você verifica se essa ordem é necessária... Caso contrário, a próxima iteração do laço...

Se for "necessário", verificar se é adequado para modificação. Basta comparar o quanto está longe de seu nível StopLoss

Se a distância for suficiente, o pedido é modificado.


Portanto, se você tiver uma função de modificação com um loop em todas as ordens, e antes de sua chamada, o loop também está funcionando, então a ordem selecionada será alterada...

A questão é que SEMPRE haverá perda de pedidos com um determinado lote, que também terá que ser preenchido às custas do resto. O gatilho é o tempo de fechamento. Se fecharmos mesmo uma, toda a cadeia será perdida. Portanto, a questão é como arrasto o preço médio de todos os escolhidos.