[Arquivo!] Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por ela. Não poderia ir a lugar algum sem você - 2. - página 485

 
FOReignEXchange:


Eu não entendo? Estou apenas procurando na ajuda, lá OrderSelect() usa uma condição. E eu não o vi em nenhum lugar sem ser verdade.

se for uma declaração de condição. E deve haver uma condição entre parênteses. Isso me parece mais lógico. Embora possa não haver diferença.


especificação:

bool OrderSelect( int index, int select, int pool=MODE_TRADES) 

retorna verdadeiro ou falso

ver https://docs.mql4.com/ru/basis/operators/if.

Se a expressão for verdadeira, operador1 é executado, e o controle é dado ao operador que segue operador2 (ou seja, operador2 não é executado). Se a expressão for falsa, o operador2 é executado.

se (expressão) operador1 outro operador2

A outra parte do se o operador pode ser omitido. Portanto, aninhadas se as declarações com a outra parte omitidas podem causar ambigüidade. Neste caso, o operador está ligado ao precedente mais próximo , se estiver no mesmo bloco que não tem mais nenhuma parte.

ou seja, não é necessário comparar OrderSelect()==verdadeiro - basta usar OrderSelect() ou !OrderSelect() em vez de OrderSelect()==falso

 

Não é isso que eu quero dizer.

É que quando seleciono um pedido, eu sempre o escrevo por extenso.

if(OrderSelect(count,SELECT_BY_POS,MODE_TRADES)==true)

Nunca vi isso sem ser verdade.

abolk:
то есть сравнение OrderSelect()==true делать не обязательно - достаточно просто использовать OrderSelect() или !OrderSelect() вместо OrderSelect()==false

Eu peguei.

 
FOReignEXchange:

Eu nunca vi um sem verdadeiro.


Você está olhando para os códigos das pessoas erradas.
 
FOReignEXchange:

Não é isso que eu quero dizer.

É que quando seleciono um pedido, eu sempre o escrevo por extenso.

Nunca vi isso sem ser verdade.

Eu peguei.


duas entradas perfeitamente iguais - uma não é pior ou melhor que a outra - todos fazem o que lhes apetece, como entendem, como estão acostumados a
 
sergeev:

Você está olhando para os códigos das pessoas erradas.


A propósito, tenho de entregá-lo à FOReignEXchange.

Abri o "Moving Average.mq4" e o vi:

      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
 
abolk:


Print() para emitir o valor da variável global_trailing_SP diretamente na função que você definiu.

Onde você lê o valor desta variável?


Uau! )) Se eu imprimir() o valor da variávelglobal_trailing_SP da função apresentada, vejo um valor completamente inesperado no log (destacado em amarelo). Enquanto que antes fora desta função é impresso corretamente (em frente ao ponto vermelho).

global_trailing_SP é uma variável global. Ela é declarada fora da função Start(),

double global_trailing_SP = 0.0; 

Após a função de parada móvel mudar com sucesso o valor da posição principal, o valor da perda de parada da posição principal é atribuído em um loop separado à variávelglobal_trailing_SP .

   for(count = OrdersTotal()-1; count >= 0; count--)
      {  OrderSelect(count,SELECT_BY_POS,MODE_TRADES);
         if(OrderType() == OP_SELL && OrderMagicNumber() == Magic_Source_SP)
            {  global_trailing_SP = NormalizeDouble(OrderStopLoss(),dgt); Print("global_trailing_SP: ",DoubleToStr(global_trailing_SP,5));  }
      }
Este é o valor indicado pelo ponto vermelho acima.

Este valor é então passado para a função onde várias modificações de ordem acontecem. Mas como resultado, o registro exibe um valor que eu não esperava e o valor de Stop Loss certamente não é modificado. Como este problema pode ser resolvido? Acontece que nem tudo é sempre tão lógico quanto pode parecer à primeira vista))))

 

Não é melhor fazer isso aqui onde está o SELLSTOP?

if((global_trailing_SP < Stp_Loss && global_trailing_SP > High_1)) 
{  OrderModify(OrderTicket(),OrderOpenPrice(),global_trailing_SP,0,0,DeepPink);
Print("Условие ModifyOrder исполнилось: global_trailing_SP: ",global_trailing_SP,", Stop Loss: ",OrderStopLoss());  }
else   Print("Условие не выполняется!");

Para que tudo seja exatamente o mesmo que no SELL.

 
FOReignEXchange:

Não é melhor fazer isso aqui, onde está o SELLSTOP?

Para que tudo seja exatamente o mesmo que no SELL.


Esse parece não ser o problema neste caso. Leia mais acima.
 
tol64:


Uau! )) Se eu imprimir() o valor da variável global_trailing_SP da função apresentada, eu vejo um valor absolutamente inesperado no diário (destacado em amarelo). Enquanto que antes fora desta função é impresso corretamente (em frente ao ponto vermelho).

global_trailing_SP é uma variável global. Ela é declarada fora da função Start(),

Após a função de parada móvel mudar com sucesso o valor da posição principal, em um loop separado, a variável global_trailing_SP é atribuída com o valor de perda de parada da posição principal.

Este é o valor indicado pelo ponto vermelho acima.

Este valor é então passado para a função onde várias modificações de ordem acontecem. Mas como resultado, o registro exibe um valor que eu não esperava e o valor de Stop Loss certamente não é modificado. Como este problema pode ser resolvido? Acontece que nem tudo é sempre tão lógico como pode parecer à primeira vista))))


mostrar como você lê a variável global_trailing_SP
 

Portanto, não entendo. A ordem pendente existe no momento da modificação da ordem principal?

Se existir, então a modificação da ordem principal e a modificação da ordem pendente estão no mesmo bloco. E se a ordem principal for modificada, o pendente deve fazer o mesmo, se essa for a sua idéia.

Outra coisa é que nossa idéia não funciona. Isso significa um erro no estado. Tente fazer tudo da mesma forma que na condição de modificação da ordem principal, como eu mostrei acima. Parece-me que o erro está na lógica. Não me surpreende. Aqui tudo é muito complicado. Você deve simplificar as coisas.

Razão: