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

 
todem:
na definição de uma tendência?

Em uma mudança de tendência ao longo de um período de tempo... Ver https://www.mql5.com/ru/forum/131277/page148 e https://www.mql5.com/ru/forum/131277/page149
 

Você pode me dizer por que OrderSelect retorna VERDADEIRO mesmo que o pedido com este bilhete não exista (ele é deletado)?


   if(OrderSelect(tickethigh1, SELECT_BY_TICKET, MODE_TRADES)==false)
 
100yan:

em uma mudança de tendência em uma parte do tempo...


Por favor me diga se a função Tp e Slossa funciona aqui

if (total > 0) AveragePrice = NormalizeDouble(AveragePrice / Count, Digits);
if (NewOrdersPlaced) {
for (cnt = OrderTotal() - 1; cnt >= 0; cnt--) {
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
if (OrderType() == OP_BUY) {
PriceTarget = AveragePrice + TakeProfit * Ponto;
BuyTarget = PriceTarget;
Stopper = AveragePrice - Stoploss * Ponto;
flag = TRUE;
}
}
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
if (OrderType() == OP_SELLL) {
PriceTarget = AveragePrice - TakeProfit * Ponto;
SellTarget = PriceTarget;
Stopper = AveragePrice + Stoploss * Ponto;
flag = TRUE;

 
todem:
compilou multa para mim

Desculpe, o Indicador funciona - era assim que era originalmente, e o erro está no arquivo tcht - ele não compila.

Arquivos anexados:
 

Posso usar o init para fazer cálculos para o buffer de indicadores?

Eu queria recalcular no init todas as barras, exceto a barra zero e na barra zero inicial - isso não conta...

 
Pyro:

Você pode me dizer por que a OrderSelect retorna VERDADEIRO mesmo que não exista uma ordem com tal bilhete (ele foi apagado)?

Você já leu bem a referência da função?

Vamos lê-lo novamente:

---------------------------------------------------------------------------------------------------------------------------------------------------------------

bool OrderSelect( int index, int select, int pool=MODE_TRADES)
A função seleciona uma ordem para posterior manipulação. Devolve VERDADEIRO se a função for concluída com sucesso. Devolve FALSO se a função falhar. Para obter informações sobre o erro, ligue para a função GetLastError().
O parâmetro do pool é ignorado se o pedido for selecionado pelo número do bilhete. O número do bilhete é um identificador único para o pedido. Para determinar a partir de qual lista um pedido é selecionado, devemos analisar sua hora de encerramento. Se o tempo de fechamento do pedido for 0, então o pedido está aberto ou pendente e é retirado da lista de posições abertas do terminal. Uma posição aberta pode ser diferenciada de uma ordem pendente por seu tipo. Se o tempo de fechamento não for igual a 0, então o pedido é fechado ou pendente e foi selecionado a partir do histórico do terminal. A distinção entre uma ordem fechada e uma ordem pendente excluída também pode ser feita por tipo de ordem.
Parâmetros:
índice - Posição do pedido ou número do pedido, dependendo do segundo parâmetro.
selecione - A bandeira do método de seleção. Pode ser um dos seguintes valores:
SELECT_BY_POS - o parâmetro de índice contém o número do índice da posição na lista,
SELECT_BY_TICKET - o parâmetro do índice contém o número do bilhete.
piscina - Fonte de dados para a seleção. É usado quando o parâmetroselecionado é igual a SELECT_BY_POS. Pode ser um dos seguintes valores:
MODE_TRADES (padrão) - a ordem é selecionada entre ordens abertas e pendentes,
MODE_HISTÓRIA - o pedido é selecionado entre os pedidos fechados e excluídos.


---------------------------------------------------------------------------------------------------------------------------------------------------------------

Este aqui:

O parâmetro do pool é ignorado se o pedido for selecionado pelo número do bilhete. O número do bilhete é o identificador único do pedido. Para determinar a partir de qual lista um pedido é selecionado, seu horário de fechamento deve ser analisado. Se o tempo de fechamento do pedido for 0, então o pedido está aberto ou pendente e é retirado dalista de posições abertas do terminal.

Você faz o quê?

if(OrderSelect(tickethigh1, SELECT_BY_TICKET, MODE_TRADES)==false)

Mostrei em vermelho o pool de parâmetros, que é ignorado ao escolher por bilhete e uma ordem é retirada de qualquer lista (aberta ou fechada) de posições do terminal. É por isso que ele retorna a verdade. Afinal, tal bilhete existe e uma ordem é selecionada, mas a partir da lista de ordens fechadas...

Devemos fazer isso dessa maneira:

   if (OrderSelect(tickethigh1,SELECT_BY_TICKET))
   if (OrderOpenTime()==0) {
      // ... код при успешном выборе ордера по тикету в списке рыночных ордеров
   }

... ou:

if (OrderSelect(tickethigh1,SELECT_BY_TICKET))
   if (OrderOpenTime()>0) {
      // ... код при успешном выборе ордера по тикету в списке закрытых ордеров
   }

... ...ou:

   if (OrderSelect(tickethigh1,SELECT_BY_TICKET)) {
      if (OrderOpenTime()>0) {
         // ... код при успешном выборе ордера по тикету в списке закрытых ордеров
      }
      if (OrderOpenTime()==0) {
         // ... код при успешном выборе ордера по тикету в списке рыночных ордеров
      }
   }

Acho que já expliquei muito bem... :)

 

artmedia70


Obrigado por uma resposta tão detalhada e abrangente. Realmente o mais claro possível :) THX!!!

 
Pyro:

artmedia70


Obrigado por uma resposta tão detalhada. O mais claro possível :) THX!!!

:) Obrigado. Seja bem-vindo.

Gostaria de alertar sobre algumas "insidiosidades" na seleção de posições em aberto através de seu ingresso. O problema é que ao final de um dia de negociação, quando uma posição é movida para o dia seguinte, a corretora reabre a ordem. Ou seja, a posição atual é fechada e outra posição é aberta com o mesmo volume, mas com um novo bilhete incluindo a troca. Portanto, seu Expert Advisor deve acompanhar as ordens reabertas e levar em conta seus novos tickers, caso contrário tudo "fluirá" - a ordem com o ticker antigo aparecerá na lista de ordens fechadas, e você não poderá abrir uma posição existente movida para o próximo dia de negociação usando o ticker antigo. As posições parcialmente fechadas encontrarão o mesmo destino - um novo bilhete também lhes será atribuído.

Portanto, mantenha seu próprio registro rigoroso de todas as ordens da EA e acompanhe todas essas mudanças "insidiosas" no tempo.

 
artmedia70:


Gostaria de alertar sobre uma certa "insidiosidade" de selecionar as posições em aberto através de seu bilhete. A questão é que ao final do dia de negociação, quando uma posição é transferida para o dia seguinte, o CD reabre a ordem.

Em algumas corretoras isso é feito, mas a grande maioria não sofre com isso.
 
sergeev:
Não sei se isto é verdade para algumas corretoras, mas a maioria delas não faz esta merda.

Não é uma regra de "boas maneiras" considerar este comportamento do CD também? Afinal de contas ... Sim, não importa... Eu apenas tento considerar tudo, bem... ou o que eu sei.

A cautela é precavida, eh? ;)

Razão: