[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 478

 
abolk:

o link https://www.mql5.com/ru/code tem um armazém repleto de outros similares

você deu um link para toda uma grande seção ))))

isso é engraçado

 

Boa tarde!

Estou pedindo ajuda, eu já me matei, não consigo entender!!! Eu preciso, que ao atingir +20 p., SL da ordem foi reorganizado no preço de abertura, ou seja, a função dá 77

 for(i=(OrdersTotal()-1); i>=0; i--) // перебор ордеров 
         { 
       if (!OrderSelect(i, SELECT_BY_POS))
      {
         continue;
      }

      if (OrderSymbol()!=Instr||OrderMagicNumber()!=MN)
          continue;
      if(OrderStopLoss()==OrderOpenPrice())
            break;    
       if (   OrderProfit()>=(MarketInfo(Symbol(),MODE_TICKVALUE)*Bezub)        ) 
   return(77);
                  
           }
   

Não consigo colocá-lo para trabalhar.

 
demlin:

Preciso que o SL do pedido seja reajustado ao preço de abertura quando ele atingir +20 pips, ou seja, a função mostra 77

20 p não é calculado dessa forma, você tem que usar a função OrderOpenPrice() e compará-la com o preço atual, ou seja, quando o pedido atinge um lucro positivo ou zero, você provavelmente quer que o resultado seja 77, ou seja

for(i=(OrdersTotal()-1); i>=0; i--) // перебор ордеров 
         { 
            if (!OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) continue;
            if (OrderSymbol()!=Instr||OrderMagicNumber()!=MN)  continue;
            if(OrderStopLoss()==OrderOpenPrice()) break;    
            if ( OrderProfit()>=0)) return(77);
           }
a função OrderProfit() devolve o lucro do pedido na moeda do depósito, não em pips
 
Você pode me dizer se é possível para uma EA obter dados indicadores (daqueles que permitem fazê-lo) a partir de outro indicador. Eu não encontrei tal oportunidade nos tipos de preços.
 
IgorM:

20p não é calculado desta forma, você tem que usar a função OrderOpenPrice() e compará-la com o preço atual, aparentemente você quer que o resultado seja devolvido quando o pedido atingir um lucro positivo ou zero, então parece que é assim:

a função OrderProfit() devolve o lucro do pedido na moeda do depósito, não em pips

É mais ou menos o que eu pensava, eu não calculo 20 pips. Eles são definidos na variável Bezub. Tento comparar o lucro atual da ordem na moeda do depósito (OrderProfit()) e os 20 pontos necessários na moeda do depósito ((MarketInfo(Symbol (),MODE_TICKVALUE)*Bezub)
 
demlin:
Isso é o que eu pensava, não estou calculando 20 p. Eles estão definidos na variável Bezub. Estou tentando comparar o lucro da ordem atual na moeda do depósito (OrderProfit()) e o nível requerido de 20 p na moeda do depósito ((MarketInfo(Symbol (),MODE_TICKVALUE)*Bezub)

então você esqueceu de levar em conta o preço atual e quantos pips o preço moveu desde que o pedido foi feito:

(OrderOpenPrice() -Bid)*MarketInfo(Symbol(),MODE_TICKVALUE)*Bezub

ZZZEROXXX:
Favor informar se eu poderia obter dados indicadores (os que o permitem) de outro indicador. Eu não encontrei tal oportunidade nos tipos de preços.

iCustom()

https://book.mql4.com/ru/samples/shared
 
IgorM:

então você esqueceu de levar em conta o preço atual e quantos pips o preço moveu desde que o pedido foi feito:

(OrderOpenPrice() -Bid)*MarketInfo(Symbol(),MODE_TICKVALUE)*Bezub


Tentei seu esquema. Alerta dá um (OrderOpenPrice() -Bid)*MarketInfo(Symbol(),MODE_TICKVALUE)*Bezub valor de -0,033. Embora, há 21p no lucro! Isto é normal?
 
demlin:
Testou seu esquema. Alerta gera para (OrderOpenPrice() -Bid)*MarketInfo(Symbol(),MODE_TICKVALUE)*Bezub valores -0,033. Embora, há 21p no lucro! Isto é normal?

Desculpem, estou escrevendo sem checar, estou errado aqui, deveria funcionar assim:

Venda:(OrderOpenPrice()-Bid)*MarketInfo(Symbol(),MODE_TICKVALUE)*lot/Point

Comprar: (Ask-OrderOpenPrice())*MarketInfo(Symbol(),MODE_TICKVALUE)*lot/Point

 
IgorM:

Desculpem, estou escrevendo sem checar, estou errado aqui, deveria funcionar assim:

Venda:(OrderOpenPrice()-Bid)*MarketInfo(Symbol(),MODE_TICKVALUE)*lot/Point

Comprar: (Ask-OrderOpenPrice())*MarketInfo(Symbol(),MODE_TICKVALUE)*lot/Point

Isso também não são números bonitos ainda. Acho que não se trata da fórmula. A própria expressão (MarketInfo(Symbol(),MODE_TICKVALUE)*Bezub) dá basicamente 20 para o Euro. A questão está em algum lugar do loop
 
IgorM:

Desculpem, estou escrevendo sem checar, estou errado aqui, deveria funcionar assim:

Venda:(OrderOpenPrice()-Bid)*MarketInfo(Symbol(),MODE_TICKVALUE)*lot/Point

Comprar: (Ask-OrderOpenPrice())*MarketInfo(Symbol(),MODE_TICKVALUE)*lot/Point

Isso também não são números bonitos ainda. Acho que não se trata da fórmula. A própria expressão (MarketInfo(Symbol(),MODE_TICKVALUE)*Bezub) dá basicamente 20 para EURUSD. Está em algum lugar para o loop
Razão: