[ARQUIVO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 4. - página 489

 

Boa tarde! Você sabe, basta cortar o código da seção init da EA, (eu estava depurando-o para o fim de semana - sem carrapatos!), movê-lo para começar. Removido o laço externo dos fóruns. Eu o compilei.

É codificado - "continuar" - "quebrar" ou "continuar" usado dentro de algum ciclo apenas C:\Alpari`sexperts\Outputs.mq4 (69, 20)

Do que se trata? Bem, em loop continuo, em loop, e daí? Eu não falo muito inglês. Se eu consigo entender algumas palavras, não consigo fazer sentido delas!

 if (strela1 < strela2)
    {Sleep(600);
        if (SELL > 0) udalenie (OP_SELL);Sleep(600);
        if (BUY == 0)
        {Sleep(600);RefreshRates();
           OrderSend (Symbol( ), OP_SELL, lot, NormalizeDouble (Bid, Digits), 5 , NormalizeDouble( Ask+ (stoplos*Point),Digits),   NormalizeDouble( Ask-( takeprofit*Point),Digits), NULL, magicnumber, 0, CLR_NONE) ;            
           int Error=GetLastError(); 
           Sleep(600);
    if (Error==129)continue;    }
    
    
    }
    else if (strela1 > strela2)
    {Sleep(600);
        if (BUY > 0) udalenie (OP_BUY);Sleep(600);
        if (SELL == 0)
        {Sleep(600); RefreshRates();
             OrderSend (Symbol( ), OP_BUY, lot,NormalizeDouble(Ask, Digits), 5, NormalizeDouble( Bid- (stoplos*Point),Digits),   NormalizeDouble( Ask+( takeprofit*Point),Digits), NULL, magicnumber, 0, CLR_NONE); 
            
           Error=GetLastError(); 
        if (Error==129)continue;  }
 
Dimka-novitsek:

Boa tarde! Você sabe, basta cortar o código da seção init da EA, (eu estava depurando-o para o fim de semana - sem carrapatos!), movê-lo para começar. Removido o laço externo dos fóruns. Compilado.

Foi usado dentro de algum ciclo apenas com... "continuar" - "quebrar" ou "continuar" C:\Alpari`sexperts\Outputs.mq4 (69, 20)

O que é isso? Bem, no loop, no loop, e daí? Eu não sou muito bom em inglês. Se eu entendo algumas palavras, não consigo fazer sentido de todas elas!

Você não tem um loop, mas tem o operador contínuo (só é usado em loops).
 
Lians:

Por favor, ajude a fazer esta função vice versa:

Isto é, se o preço for para um prejuízo de uma ordem aberta pelo número de pips LevelProfit (você pode chamá-lo LevelLoss), você tem que mover TakeProfit para zero ou para um prejuízo de 1 pip 2, etc., dependendo do que você colocar no parâmetro LevelWLoss, de modo que se o preço se vira mesmo, não haveria mais lucro. Ou talvez você tenha um pronto?

Agradecemos antecipadamente))

A função pode ser a seguinte:

void fMoving_TPInBU (int fi_LevelLOSS,       // уровень Лосса в пп. (для цены) - ТОЛЬКО > 0
                     int fi_LevelBU,         // уровень БУ в пп. (для тэйкпрофита) - может быть и >= 0 и < 0
                     string fs_Symbol = "",  // Symbol
                     int fi_Type = -1,       // Type
                     int gi_MG = -1)         // MagicNumber
{
    double ld_Point, ld_Price;
    int    li_Type, li_cnt, li_total = OrdersTotal();
//----
    if (li_total == 0) return;
    if (fs_Symbol == "" || fs_Symbol == "0") fs_Symbol = Symbol();
    for (int li_pos = li_total - 1; li_pos >= 0; li_pos--)
    {
        if (!OrderSelect (li_pos, SELECT_BY_POS, MODE_TRADES)) continue;
        if (OrderSymbol() != fs_Symbol) continue;
        if (gi_MG > -1) if (gi_MG != OrderMagicNumber()) continue;
        li_Type = OrderType();
        if (li_Type > 1) continue;
        if (li_Type > -1) if (li_Type != fi_Type) continue;
        RefreshRates();
        if (li_Type == 0) {li_cnt = 1; ld_Price = MarketInfo (fs_Symbol, MODE_BID);}
        else {li_cnt = -1; ld_Price = MarketInfo (fs_Symbol, MODE_ASK);}
        ld_Point = MarketInfo (OrderSymbol(), MODE_POINT);
        if (li_cnt * (OrderOpenPrice() - ld_Price) >= fi_LevelLOSS * ld_Point)
        {
            double ld_TP = NormalizeDouble (OrderOpenPrice() + li_cnt * fi_LevelBU * ld_Point, MarketInfo (fs_Symbol, MODE_DIGITS));
            //---- Проверка на "излишнюю" модификацию
            if (ld_TP - OrderTakeProfit() != 0.0)
            {OrderModify (OrderTicket(), ld_Price, OrderStopLoss(), ld_TP, 0);}
        }
    }
//----
}

Não se esqueça de verificar as restrições MODE_STOPLEVEL e MODE_FREEZELEVEL ao modificar uma STOP.

 

Obrigado!!! Vamos dar uma olhada...

Como não? E se (BUY == 0)- isto não é um loop? Estranhamente, eu só removi o laço externo, que rodeava todo o programa entre parênteses. Era necessário para a depuração, então eu o retirei.

Se não estiver lá, deixe-o passar se (strela1 < strela2), a lógica do programa não será quebrada.

 
Dimka-novitsek:

Obrigado!!! Vamos dar uma olhada...

Como não? E se (BUY == 0)- isto não é um loop? Estranho, eu só removi o laço mais externo que estava entrelaçando o programa inteiro no início.


Não. Não é um loop. Você tirou exatamente o que deveria ter ficado. Leia o tutorial inteiro! Especialmente aqui: "Um exemplo de utilização de um operador composto em um operador condicional. O operador condicional if(expressão) vem primeiro, seguido pelo operador do complexo. O operador do complexo contém uma lista de operadores executáveis".

 
Leitura.
 
AJUDA! Por favor, ajude-me!! Como exemplo, anexarei esta foto. Não sou programador deste indicador para alguma forma soldado, mas depois encontrei uma falta de conhecimento e habilidades que tentaram uma semana inteira para exibir as setas na tela não funcionaram. vou explicar a essência. em áreas selecionadas, sublinhado em branco, há uma clara divergência (como entendo) que é a diferença entre o histograma e a linha de preço. na figura, por exemplo, marquei estes lugares números 1-2-3-4.Nesses locais, os valores da linha indicadora diminuem modulo, embora o preço continue a atualizar o fundo e assim chegamos ao ponto 5 nele vemos a base do preço atualizado baixo e fundo no fechamento, o histograma também está crescendo, mas a linha mostra uma diminuição.
Arquivos anexados:
tjllfe2.zip  45 kb
 

TarasBY, obrigado pelas explicações e pela função!

Estou levando a função para minha coleção, mas não entendo algo:

Parâmetro fi_LevelBU tem valor negativo - ele muda de valor, enquanto que se tem valor positivo, ele mostra lucro ou vice-versa?

E segundo: é melhor verificar se há restrições dentro da própria função ou fora da função?

 
Lians:

TarasBY, obrigado pelas explicações e pela função!

Estou levando a função para minha coleção, mas não entendo algo:

Se o parâmetro fi_LevelBU for negativo, significa mudança do TP para lucro, enquanto que se for positivo, significa lucro ou vice versa?

Correto (não vice versa).

Lians:

E o segundo: é melhor verificar se há restrições dentro da própria função ou fora da função?

Cada um decide por si mesmo. Eu criei uma biblioteca que é responsável pela execução de ordens de comércio e verificações de todas as limitações.

P.S. Havia um pequeno erro no código de função (parêntese extra) - eu o consertei.

 

Rapazes, aconselhem como resolver o problema

Se você usar no Expert Advisor

while(!IsStopped())

então por alguma razão o assessor continua a trabalhar mesmo quando o botão "assessores" é liberado Eu preciso que ele seja desativado e quando eu uso este ciclo quando um EA está funcionando é impossível abrir propriedades do EA, pode ser que alguém saiba como consertar o EA ????? Eu sei sobre o sono(......);