[ARQUIVO]Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por ela. Não posso ir a lugar nenhum sem você - 5. - página 123

 
Obrigado por sua ajuda, substituíOrderTotal() porOrderHistoryTotal(). Funcionou.
 

Para aqueles que entendem mql4 mais do que eu, por favor, ajudem. Há 3 perguntas.

1.Primeiro sobre a dupla constante. Todos nós conhecemos o iMa, máscaras, Média móvel/ A questão é: Mapeamento incorreto de valores.

Exemplo:

extern string  MA1="";
extern string  MA2="";
extern string  MA3="";
string com;


double MA1 = iMA(NULL,PERIOD_M15,9,0,0,0);
double MA2 = iMA(NULL,PERIOD_M15,15,0,0,0);
double MA3 = iMA(NULL,PERIOD_M15,21,0,0,0);

if (MA1>MA2 && MA1!=MA2 && MA1>MA3 && MA1!=MA3 ) com="значение1";
if (MA1<MA2 && MA1==MA2 && MA1<MA3 && MA3!=MA3 ) com="значение2";

Portanto, o valor todo o tempo será = valor1. O código teimosamente se recusa a entender != (não igual)

2. Pergunta /Fechamento da Busca de Abertura/.

O que eu quero do programa mas ele não funciona.

1. condição de verificação (verdadeiro ; falso)

2. Se houver tal ordem, nós não a abrimos; se não houver ordem, nós a abrimos. Abrimo-lo com base na condiçãoOrderComment().

3. Verificação Se o evento X ou Y ocorrer , fechar. X-(por exemplo outro sinal iMA1>iMA2, Y-um outro sinal iMA2>iMA3)

É assim que eu faço, mas nada sai.

if (MA1>MA2 && MA1!=MA2 && MA1<MA3 && MA2>MA3 && MA2!=MA3)
{
   for (int i=1;i<=OrdersTotal(); i++)       
       {
        if(OrderSelect(i-1,SELECT_BY_POS,MODE_TRADES)==true)
           {
            if (OrderComment()=="значение1")return(0);
            else
            {
            OrderSend(Symbol(),OP_SELL, LOT,NormalizeDouble(Bid,Digits),2,0,0,com,Magic,0,Red);
            }
           }
       } 
}

E como fechar, não entendo onde inserir.

3. Pergunta sobre a compensação (int shift)

No segundo grupo do iMA, eu desloco a barra de corrente relativa de volta por 3) Para que, quando um sinal descrito acima, não abra ordens repetidas em cada barra. Mas a mudança não acontece por alguma razão.

double MA1 = iMA(NULL,PERIOD_M15,9,0,0,0);
double MA2 = iMA(NULL,PERIOD_M15,15,0,0,0);
double MA3 = iMA(NULL,PERIOD_M15,21,0,0,0);

double MA4 = iMA(NULL,PERIOD_M15,9,0,0,3);
double MA5 = iMA(NULL,PERIOD_M15,15,0,0,3);
double MA6 = iMA(NULL,PERIOD_M15,21,0,0,3);

Por favor, ajude-me com o conhecimento. Não sei como utilizá-lo. Não sei onde na Internet há uma implementação semelhante.

 
dertop:

Para aqueles que entendem mql4 mais do que eu, por favor, ajudem. Há 3 perguntas.

1.Primeiro por duplo constante.

2. Como fechar, não entendo onde colocar.

3. Pergunta sobre a compensação (int shift)

1. https://www.mql5.com/ru/articles/1561

2. se (condições de fechamento) OrderClose(...)

3. Veja o que é exatamente essa mudança e quem ela muda
 
ilunga:

1. https://www.mql5.com/ru/articles/1561

2. se (condições de fechamento) OrderClose(...)

3. Veja o que é exatamente este turno e quem ele muda


Muito obrigado por uma resposta tão rápida.

Cerca de 1. sim, eu entendi, vamos cavar lá.

Em 2.se (condições de fechamento) OrderClose(...) (está claro sem ele) Mas eu fiquei confuso em if, what for where and why....

Corrigir se estiver errado....

if (MA1>MA2 && MA1!=MA2 && MA1<MA3 && MA2>MA3 && MA2!=MA3)                                         // если true то заходим в тело цикла...
{
   for (int i=1;i<=OrdersTotal(); i++)                                                             //шаг2 проверяем все ордера на наличие ордера со значением1
       {
        if(OrderSelect(i-1,SELECT_BY_POS,MODE_TRADES)==true)
           {
            if (OrderComment()=="значение1")return(0);                                            // если орден найден то ничего не делаем
            else
            {
            OrderSend(Symbol(),OP_SELL, LOT,NormalizeDouble(Bid,Digits),2,0,0,com,Magic,0,Red);   // а вот тут проблемы кто за чем идёт и куда вставить условие закрытие отдельно за телом всего условия (ma1;ma2 и тд), или там где OrderSelect()
            }
           }
       } 
}

O índice do valor obtido do buffer indicador (deslocamento em relação à barra atual pelo número especificado de períodos de retorno). da ajuda mql4

 
dertop:


Muito obrigado por uma resposta tão rápida.

Por 2.se (condições de fechamento) OrderClose(...) (isso é compreensível sem ele) Mas estou confuso em if, what for where and why....

Corrigir se estiver errado....


if (MA1>MA2 && MA1!=MA2 && MA1<MA3 && MA2>MA3 && MA2!=MA3)                                         // если true то заходим в тело цикла...
{
   for (int i=1;i<=OrdersTotal(); i++)                                                             //шаг2 проверяем все ордера на наличие ордера со значением1
       {
        if(OrderSelect(i-1,SELECT_BY_POS,MODE_TRADES)==true)
           {
            if (OrderComment()=="значение1")return(0);                                            // если орден найден то ничего не делаем
            else
            {
            OrderSend(Symbol(),OP_SELL, LOT,NormalizeDouble(Bid,Digits),2,0,0,com,Magic,0,Red);   // а вот тут пока написано следующее: для каждого из ордеров у которого мы сюда зашли мы поставим еще один ордер
            }
           }
       } 
}
 
ilunga:

Desculpe, por que verificar as desigualdades quando a condição já está dada! Isto atrasa a leitura das condições e seu cumprimento!

if (MA1>MA2 && MA1!=MA2 && MA1<MA3 && MA2>MA3 && MA2!=MA3)//MA1!=MA2 && и && MA2!=MA3 не нужны, т.к. в предыдущих сравнениях
                                                          //равенство ухе исключено! Так что нужно так:
if (MA1>MA2 && MA1<MA3 && MA2>MA3)
 
borilunad:

Desculpe, por que verificar as desigualdades quando a condição já está dada! Isto atrasa a leitura das condições e seu cumprimento!


Há algo de estranho aqui.

if (MA1>MA2 && MA1<MA3 && MA2>MA3)

MA1>MA2 e MA2>MA3 e depois MA1<MA3

Especialmente porque é suficiente para

if (MA1>MA2 && MA2>MA3)
 
borilunad:

Desculpe, por que verificar as desigualdades quando a condição já está dada! Isto atrasa a leitura das condições e seu cumprimento!


Desculpe, perdi um pouco, não prestei atenção no início. Estes cálculos são feitos para 4 MAs, e há casos em que MA1>MA2 e no momento MA3=MA4 (então é necessário verificar porque é assim que a estratégia é construída)

if (MA1>MA2 && MA1!=MA2 && MA1<MA3 && MA2<MA3 && MA2!=MA3 && MA3<MA4 && MA3!=MA4)                                         // если true то заходим в тело цикла...
{
   for (int i=1;i<=OrdersTotal(); i++)                                                             //шаг2 проверяем все ордера на наличие ордера со значением1
       {
        if(OrderSelect(i-1,SELECT_BY_POS,MODE_TRADES)==true)
           {
            if (OrderComment()=="значение1")return(0);                                            // если орден найден то ничего не делаем
                else
                {
                if (OrderComment()!="значение1")                                                         // если такого ордера нету
                   {
                   OrderSend(Symbol(),OP_SELL, LOT,NormalizeDouble(Bid,Digits),2,0,0,com,Magic,0,Red);   // тогда открываем
                   }
                }
         if (MA1<MA2 && MA1!=MA2 && MA1>MA3 && MA1!=MA3 && MA3>MA4 && MA3!=MA4)                          // если true новый сигнал
             {
            OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),3,CLR_NONE);               // тогда закрываем
             }

           }
       } 
}

Como esta?????

 
Vinin:


Há algo de estranho aqui.

MA1>MA2 e MA2>MA3 e depois MA1<MA3


Sim, desculpe ter ficado confuso, escrevendo pela primeira vez no fórum. Copiou primeiro, depois decidiu escrever à mão e ficou confuso. mas o exemplo acima está correto...

MA1>MA2 e MA1<MA3 e MA3<MA4

 

Boa tarde.

Por favor, ajude-me a modificar o indicador.

Eu tenho um Pivot padrão, gostaria de ter um indicador que calcula os níveis usando fórmulas padrão, mas usando dados H, L, C, eu mesmo entro.

Quero usar isto como um input para meus próprios indicadores.