Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 6. - página 235

 

E, é claro, quando abrimos a próxima compra, nós imediatamente rolamos(StopLoss igual ao nosso preço médio + 50 pips) em todas as posições .

Este é o canalha que às vezes não toma a última posição. Tivemos 3 posições, mas 4 delas foram abertas. Esqueci de colocar a StopLoss na quarta posição.

O DedZone deve ser realizado:

StopLevel = (MarketInfo(Symbol(), MODE_STOPLEVEL)*Point);       // текущий уровень стопов
FreezeLevel = (MarketInfo(Symbol(), MODE_FREEZELEVEL)*Point);        // уровень заморозки
DedZone = MathMax(StopLevel,FreezeLevel);              // Зона запрета розмещения ордеров

O cálculo da Zona Franca está na inicialização do Expert Advisor.

 
Limita:

E, é claro, quando abrimos a próxima compra, nós imediatamente rolamos(StopLoss igual ao nosso preço médio + 50 pips) em todas as posições .

Este é o canalha que às vezes não toma a última posição. Tivemos 3 posições, mas 4 delas foram abertas. Esqueci de colocar a StopLoss na quarta posição.

O DedZone deve ser realizado:

A DedZone está na inicialização do Expert Advisor.

StopLevel = (MarketInfo(Symbol(), MODE_STOPLEVEL)*Point);       // текущий уровень стопов
FreezeLevel = (MarketInfo(Symbol(), MODE_FREEZELEVEL)*Point);        // уровень заморозки
DedZone = MathMax(StopLevel,FreezeLevel);              // Зона запрета розмещения ордеров

Quando ambos são iguais a zero, o que então? A Alpari usa spread*2 em tal caso.

E você ainda não respondeu minha pergunta sobre a lógica dessas linhas.

 
ALXIMIKS:

é melhor fazer desta forma (alguém escreveu que tinha problemas com sua maneira de fazer quando modificando ou eliminando pedidos) :

E por que óleo e manteiga ??? (deixar algo em paz).


Obrigado!

Parece estar de acordo com o especialista :))

 
artmedia70:

E você ainda não respondeu minha pergunta sobre a lógica dessas linhas.


artmedia70:

Toda a lógica do comportamento de uma EA pode ser dividida em blocos lógicos que, dependendo das condições, são executados ou não.

Para seus próprios fins, você pode ver que este bloco pode ser uma série de cordas enclausuradas em suportes de fios encaracolados:

Se (condição) {se a condição for verdadeira, o bloco encerrado naqueles suportes é executado}

Caso contrário {se a condição acima não for verdadeira, o bloco encerrado naqueles suportes é executado}

Se não houver parênteses curvos após a condição, o bloco executado quando a condição é verdadeira é uma única linha imediatamente após a condição:

Se (condição) Esta linha for executada

Caso contrário, esta linha é executada.

Em meus exemplos, If is and Otherwise is else.

Tirada aqui

 
artmedia70:

E quando ambos são zero, então o quê? A Alpari usa spread*2 nesse caso.

E você não respondeu à minha pergunta sobre a lógica dessas cordas.



Obrigado pelas informações relativas à Alpari.

Quanto à Lógica de Linha, ALXIMIKS respondeu.

Devo acrescentar que a modificação só deve ser feita se todas as condições forem verdadeiras. Se pelo menos um deles falhar, nós continuamos.

 
Limita:


Obrigado pelas informações relativas à Alpari.

Em relação à lógica das cordas, ALXIMIKS respondeu.

Devo acrescentar que, nesse caso, a modificação só deve ocorrer se todas as condições forem verdadeiras. Se pelo menos um deles falhar, nós seguimos em frente.

Ele me mostrou, por alguma razão, minhas próprias palavras escritas uma vez a alguém.

Eu queria obter uma resposta à minha pergunta sobre lógica. Todos os ifs () nesse bloco de código vão um após o outro. Isso significa que se a primeira condição for verdadeira, a segunda também será verdadeira, se a segunda for verdadeira, a terceira será verdadeira e assim por diante, mas... Se a primeira condição não for verdadeira, a segunda não será executada, mas a terceira será verificada novamente.

Talvez seja assim que deveria ser, afinal de contas:

bool ProfitManagement() {
   double StopLossBuy = BuyAP+Profit*Point;                             //Вычисляем StopLoss
   double TakeProfitBuy = BuyAP + Profit*Point;                  //Вычисляем цену TakeProfit
   double StopLossSell = SellAP-Profit*Point;
   double TakeProfitSell = SellAP - Profit*Point;
   RefreshRates();
   for(int good = 0; good < OrdersTotal(); good ++) {
      if(OrderSelect (good, SELECT_BY_POS)) {            
         if (OrderMagicNumber()!=MagicNumber)   continue;
         if (OrderSymbol()!=Symbol())           continue;
//-------------------------Order Buy-----------------------------------------------------  
         if (OrderType()==OP_BUY) {                             
            if (BuyAP < Bid) { 
               if (MathAbs(OrderStopLoss() - StopLossBuy) >= Tick) { // Профит не равен нужному
                  if (Bid-StopLossBuy>DedZone) {                     // Уровень достаточно удален от цены
                     if (WaitForTradeContext()) {                    // Свободен ли торговый поток?
                        if (!OrderModify(OrderTicket(), 0, NP(StopLossBuy), 0, 0, Lime)) {
                           Alert (Symbol()," Хрень со стопами! ",   GetLastError());
                           return(false);
                           }
                        }
                     }
                  }
               }
            }
//-------------------------Order Buy-----------------------------------------------------  
         if (OrderType()==OP_SELL) {                             
            // вся та же хрень...
            }
//-------------------------Order Buy-----------------------------------------------------  
         }
      }
   return(true);
}

Este é apenas o meu palpite, pois não tenho absolutamente nenhuma idéia da lógica que você tem em mente e não sei o que algumas das variáveis e funções fazem e contêm/retornam.

 
artmedia70:

1) Ele me mostrou por alguma razão minhas próprias palavras, uma vez escritas a alguém.

2) Isso é o que eu queria que você dissesse sobre a lógica. Você tem todo o se () nesse bloco de código indo um após o outro. O que significa que se a primeira condição for verdadeira, a segunda condição também será verdadeira, se a segunda condição for verdadeira, a terceira condição também será verdadeira, etc., mas... Se a primeira condição não for verdadeira, a segunda não será executada, mas a terceira será verificada novamente.

1) bem, isso foi para todos, não apenas para você.

2) você já fez esta declaração uma vez, há alguns dias atrás, só que de minha parte esqueci de verificar novamente esta informação então.

Agora eu fiz um roteiro simples:

int start(){
 if (3>3)
 if (5>3)
 if (5>3){Alert ("AAAAAAAAAAAAAAAAAAAAAAA");}
} 

E afinal você estava errado: NÃO ALERTE!!!

 
ALXIMIKS:

1) bem, isso foi para todos, não apenas para você.

2) Você fez essa declaração uma vez antes, há alguns dias, mas eu esqueci de checar novamente as informações na ocasião.

Agora eu fiz um roteiro simples:

E afinal você estava errado: NÃO ALERTE!!!

int start(){
 if (3>3)
 if (5>3)
 if (5>3){Alert ("AAAAAAAAAAAAAAAAAAAAAAA");}
} 

Bem, eu concordo. Neste caso, fui um pouco precipitado quando escrevi anteriormente sobre o que e como as condições aninhadas seriam aplicadas sem aparelhos. Você está certo nesta situação. Você sabe por quê?

Tente fazer outra execução em seu código.

 
artmedia70:

Bem, eu concordo. Neste caso, fui um pouco precipitado quando escrevi anteriormente sobre o que e como as condições aninhadas seriam aplicadas sem aparelhos. Você está certo nesta situação. Você sabe por quê?

Tente fazer outra execução em seu código.


int start(){
 int a=0;
 if (3>3)
 if (5>3)
 if (5>3){Alert ("AAAAAAAAAAAAAAAAAAAAAAA"); a=5;}
 else Alert ("a=", a);
}

Sem Alerta a partir deste roteiro. O contrário se refere à condição " se (5>3){Alerta ("AAAAAAAAAAAAAAAAAAAAAAAA"); a=5;} "

Agradecimentos :

int start(){
 int a=0;
 if (5>3)
 if (5>3)
 if (3>3){Alert ("AAAAAAAAAAAAAAAAAAAAAAA"); a=5;}
 else Alert ("a=", a);
}

ter umAlerta: "a=0".

Resultado - o tratamento de falhas de condições só é possível para a última condição quando os colchetes "{" não são usados durante a enumeração de uma determinada série de condições.

 
ALXIMIKS:

sem alerta a partir deste roteiro. O contrário se refere à condição " se (5>3){Alerta ("AAAAAAAAAAAAAAAAAAAAAAAAA"); a=5;} "

Agradecimentos :

ter umAlerta: "a=0".

O resultado é que o manuseio sem condições só é possível para a última condição, quando os colchetes "{" não são usados durante a enumeração de uma determinada série de condições.


Isto é, são necessários parênteses para organizar ramos lógicos. Sem eles, a primeira condição é primordial. Se isso não for verdade, outras condições não serão executadas.

Tente resolver o problema:

 if (a>b)
    if (b>c) 
        Alert(" условие if (a>b && b>c) выполнено ");
if (d>e) 
    if (e>f) 
         Alert(" условие if (d>e && e>f) выполнено");

E depois disso, descubra a que mais se refere:

if (a>b)
    if (b>c) 
        Alert(" условие if (a>b && b>c) выполнено ");
else if (d>e) 
    if (e>f) 
         Alert(" условие if (d>e && e>f) выполнено");
Razão: