Alguma ajuda necessária - página 8

 
qgmql:

Este código está bem? se não estiver, por favor, escreva algum código em vez de link, ainda estou confuso.


NÃO https://www.mql5.com/en/forum/133792/page3#550831

dá valor pip para um lote negociado em um símbolo específico

 

1. Há algumas ordens de compra abertas e uma ordem de compra pendente é feita. todas as ordens estão no mesmo par de moedas. como um EA selecionará apenas a última ordem aberta para verificar seus limites de parada?

2. cada ordem aberta foi colocada a preços diferentes com tp 20. é possível para a EA modificar todas as ordens abertas exceto a última, e alterar seus limites de parada para os limites de parada da última ordem aberta?

EXEMPLO:

Sr    type   price     tp
1     buy    1.23950   1.23750
------------------------------
#  buylimit   1.23750   1.23550

//////////////////////////////

1    buy     1.23950   1.23550 // tp modified and now equal to 2nd tp
2    buy     1.23750   1.23550 // 2nd tp
------------------------------
#  buylimit   1.23550   1.23350

//////////////////////////////

1    buy     1.23950   1.23350 // tp modified and now equal to 3rd tp
2    buy     1.23750   1.23350 // tp modified and now equal to 3rd tp
3    buy     1.23550   1.23350 // 3rd tp
------------------------------
#  buylimit   1.23350   1.23150
 

Alguma confusão com...

//Signal Filter
#define  XXX   0
#define  AAA   1
#define  BBB   2

int SignalS = XXX;

if(SignalS & AAA !=0)
OrderSend(NULL, OP_BUY, LotSize, Ask, Slippage, SL, TP, WindowExpertName(), MagicID, 0, Blue);

O antigo editor aceita as linhas em destaque, mas o novo editor dá o aviso "Expressão não booleana".

Eu tentei então...

if(SignalS && AAA !=0)
//or
if(SignalS !=0 & AAA !=0)

Agora o novo editor aceita os dois, mas... qual deles trabalhará o mesmo como a linha em destaque? se ambos forem verdadeiros, então qual deles devo usar? (mais conveniente?)

PS: O código abaixo também é aceito pelo novo editor...

if((SignalS & AAA) !=0)

O novo editor aceita os três, mas... qual deles trabalhará da mesma forma como a linha destacada? se todos forem verdadeiros, então qual deles será mais conveniente para mim?

 
qgmql: O novo editor aceita os três, mas... qual deles trabalhará da mesma forma como a linha destacada? se todos forem verdadeiros, então qual deles será mais conveniente para mim?
  1. Não use um pouco de máscara
    //Signal Filter
    #define  XXX   0
    #define  AAA   1
    #define  BBB   2
    
    int SignalS = XXX;
    
    if(SignalS & AAA !=0)
    enum eSignals = {XXX, AAA, BBB};
    
    eSignals SignalS = XXX;
    
    if(SignalS == AAA)
    
    Código de autodocumentação.

  2. Usando um pouco de máscara:
    Em build 600+ != tem maior precedência do que bitwise e, você DEVE usar
    (SignalS & AAA) !=0
    Em construções anteriores era maior do que a multiplicação

    Operação

    Descição

    Ordem de execução

    ()

    []

    .

    Função Chamada

    Referência a um elemento de matriz

    Referência a um elemento da estrutura

    Da esquerda para a direita

    !

    ~

    ++

    --

    (tipo)

    tamanho do

    Negação lógica

    Negação bitwise (complemento)

    Mudança de sinal

    Incremento por um

    Diminuir por um

    Digitação

    Determinação do tamanho em bytes

    Da direita para a esquerda

    *

    /

    %

    Multiplicação

    Divisão

    Divisão de módulos

    Da esquerda para a direita

    +

    Acréscimo

    Subtração

    Da esquerda para a direita

    <<

    >>

    Turno esquerdo

    Turno certo

    Da esquerda para a direita

    <

    <=

    >=

    Menos de

    Menor ou igual

    Maior do que

    Maior ou igual

    Da esquerda para a direita

    ==

    !=

    Igual

    Não igual

    Da esquerda para a direita

    &

    Bitwise E operação

    Da esquerda para a direita

    ^

    Bitwise exclusivo OR

    Da esquerda para a direita

    |

    Operação Bitwise OR

    Da esquerda para a direita

    &&

    Lógica E operação

    Da esquerda para a direita

    ||

    Operação Lógica OU

    Da esquerda para a direita

    ?:

    Operador condicional

    Da direita para a esquerda

    =

    *=

    /=

    %=

    +=

    -=

    <<=

    >>=

    &=

    ^=

    |=

    Atribuição

    Multiplicação com atribuição

    Divisão com atribuição

    Módulo com atribuição

    Adição com atribuição

    Subtração com atribuição

    Turno esquerdo com atribuição

    Turno certo com atribuição

    Bitwise AND com atribuição

    Exclusivo OU com atribuição

    Bitwise OR com atribuição

    Da direita para a esquerda

    ,

    Vírgula

    Da esquerda para a direita

    () Chamada de função Da esquerda para a direita[] Referente a um elemento de matriz
    !      Negação lógica Da direita para a esquerda - Operação de mudança de sinal++ Incremento- Diminuição~ Negação bitwise (complemento)
    & Bitwise operation E Da esquerda para a direita| Bitwise operation OU^ Bitwise operation exclusive OU<< Left shift>> Right shift
    * Multiplicação Da esquerda para a direita/ Divisão% Divisão Módulo
    + Adição Da esquerda para a direita Subtração
    < Menor que Da esquerda para a direita <= Menor ou igual> Maior que>= Maior ou igual== Igual!= Não igual
    || Lógico OU Da esquerda para a direita
    && Lógico E Da esquerda para a direita
    = Atribuição Da direita para a esquerda+= Atribuição adicional-= Atribuição subtração*= Atribuição multiplicação/= Atribuição divisão%= Atribuição módulo>>= Atribuição deslocamento à direita<<= Atribuição deslocamento à esquerda&= Atribuição bitwise AND|= Atribuição bitwise OR^= Atribuição exclusiva OR
    Vírgula Da esquerda para a direita
 

WHRoeder i encontrou seu código (selecione a última ordem de mercado) e adicionou linhas destacadas para verificar seu preço tp e para definir o mesmo preço tp em ordens anteriores:

int PositionIndex;    //  <-- this variable is the index used for the loop

int TotalNumberOfOrders;   //  <-- this variable will hold the number of orders currently in the Trade pool
double Ord_TP=0;
TotalNumberOfOrders = OrdersTotal();    // <-- we store the number of Orders in the variable

for(PositionIndex = TotalNumberOfOrders - 1; PositionIndex >= 0 ; PositionIndex --)  //  <-- for loop to loop through all Orders . .   COUNT DOWN TO ZERO !
   {
   if( ! OrderSelect(PositionIndex, SELECT_BY_POS, MODE_TRADES) ) continue;   // <-- if the OrderSelect fails advance the loop to the next PositionIndex
   
   if( OrderMagicNumber() == MagicNo       // <-- does the Order's Magic Number match our EA's magic number ? 
      && OrderSymbol() == Symbol()         // <-- does the Order's Symbol match the Symbol our EA is working on ? 
      && ( OrderType() == OP_BUY           // <-- is the Order a Buy Order ? 
      ||   OrderType() == OP_SELL ) )      // <-- or is it a Sell Order ?
   if(OrderTakeProfit()>0) 
   Ord_TP = OrderTakeProfit(); break;
   if(OrderTakeProfit() == Ord_TP) continue;
    OrderModify(OrderTicket(),0,0,Ord_TP,0,CLR_NONE);
      //if ( ! OrderClose( OrderTicket(), OrderLots(), OrderClosePrice(), Slippage ) )               // <-- try to close the order
         //Print("Order Close failed, order number: ", OrderTicket(), " Error: ", GetLastError() );  // <-- if the Order Close failed print some helpful information 
      
   } //  end of For loop

Uma linha extra...

if(OrderTakeProfit()>0) 
   Ord_TP = OrderTakeProfit(); break;
   if(OrderTakeProfit() == Ord_TP) continue;
   if(OrderTakeProfit() != Ord_TP)
    OrderModify(OrderTicket(),0,0,Ord_TP,0,CLR_NONE);

Por favor, oriente, se eu estiver errado.

(Todos os tipos de ordens de mercado+de gasto são apenas compra, não venda ou apenas venda, não compra e eu quero que o tp de todas as ordens de mercado seja alterado toda vez, quando uma nova ordem de mercado for aberta).

ISTO É REALMENTE DIFÍCIL PARA MIM, MAS QUERO FAZÊ-LO :(

 
Sua indentação está errada porque você não usou o aparelho
if(OrderTakeProfit()>0) 
   Ord_TP = OrderTakeProfit(); break;
   if(OrderTakeProfit() == Ord_TP) continue;
   if(OrderTakeProfit() != Ord_TP)
    OrderModify(OrderTicket(),0,0,Ord_TP,0,CLR_NONE);
O que seu código realmente é
if(OrderTakeProfit()>0) 
   Ord_TP = OrderTakeProfit(); 
break;
/*NOTREACHED
   if(OrderTakeProfit() == Ord_TP) continue;
   if(OrderTakeProfit() != Ord_TP)
    OrderModify(OrderTicket(),0,0,Ord_TP,0,CLR_NONE);
*/
 
As coisas estão ficando complicadas para mim. Acho que eu deveria escrever código desde o início. e colarei cada parte do código aqui. talvez eu pudesse entender isso melhor.