Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 721

 
Como fazer um martingale adequado?
Eu entendo corretamente:
Antes de abrir cada comércio, você precisa verificar todas as trocas neste símbolo com este mágico e se o último comércio na data com uma perda, respectivamente, aumentar o lote?
 
Roman Sharanov:
Qual é a maneira correta de se fazer um martingale?
Eu entendo corretamente:
Antes de abrir cada comércio, você precisa verificar todas as trocas neste símbolo com este mágico e se o último comércio por data estiver com prejuízo, respectivamente aumentar o lote?

É assim

 
Sergey Gritsay:

É assim

simplesmente não entendem como calcular a transação mais recente de todas elas

 
Pessoal, se alguém se deparou, precisa obter dados indicadores com base em outro indicador, por exemplo, RSI sobreposto ao RSI.
 
Roman Sharanov:

Eu simplesmente não entendo como calcular a transação mais recente de todas elas

É mais ou menos assim.

double  ProfitLastDeals()
  {
   double m_profit=0;
   int total=OrdersTotal();

   for(int i=0; i<total; i++)
     {
      if(!OrderSelect(i,SELECT_BY_POS))continue;
      if(OrderMagicNumber()!=m_magic)continue;
      if(OrderSymbol()!=m_symbol)continue;
      if(OrderType()==m_type)
        {
         m_profit=OrderProfit();
        }
     }
   return(m_profit);
  }
 
Sergey Gritsay:
Pessoal, se alguém se deparou, eu preciso obter dados indicadores baseados em outro indicador, por exemplo, RSI sobreposto ao RSI.

Tudo resolvido, a questão não é mais relevante

 
Roman Sharanov:

Só não entendo como calcular o mais recente de todos os ofícios

Desculpe, o último exemplo seleciona entre aberto, entre fechado deveria ser assim

double  ProfitLastDealsHistory()
  {
   double m_profit=0;
   int total=OrdersHistoryTotal();

   for(int i=0; i<total; i++)
     {
      if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))continue;
      if(OrderMagicNumber()!=m_magic)continue;
      if(OrderSymbol()!=m_symbol)continue;
      if(OrderType()==m_type)
        {
         m_profit=OrderProfit();
        }
     }
   return(m_profit);
  }
 

Estranho comportamentodo iBarShift(). Índice de retorno (-1) com a bandeiraexata =falsa explicitamente verificada.

O erro ocorre de forma aleatória a qualquer momento, não há como pegá-lo manualmente.

Ao obter um índice negativo, o código escreve no console os parâmetros da solicitação executada e o resultado

2019.01.04 10:40:24.047 CCC (GBPUSD,M1) Neg index: NZDUSD TimeCurrent: 2019.01.04 09:40:23 Request: 2019.01.04 09:40:23 TimeLastTick: 2019.01.04 09:40:23.44
2019.01.04 10:40:24.047 CCC (GBPUSD,M1) LastError: 0

Solicitação - o momento em que o índice de barras é solicitado

TimeLastTick é a hora do último tick para o símbolo solicitado;MqlTick[] é tirado logo após o erro.

Quais poderiam ser as razões para tal comportamento, talvez alguém o tenha encontrado?

 
SemenTalonov:

Estranho comportamentodo iBarShift(). Índice de retorno (-1) com a bandeiraexata =falsa explicitamente verificada.

O erro ocorre de forma aleatória a qualquer momento, não há como pegá-lo manualmente.

Ao obter um índice negativo, o código escreve no console os parâmetros da solicitação executada e o resultado

Solicitação - o momento em que o índice de barras é solicitado

TimeLastTick é a hora do último tick para o símbolo solicitado;MqlTick[] é tirado logo após o erro.

Quais podem ser as razões para tal comportamento, talvez alguém tenha encontrado?

O que diz a documentação sobre exato == falso ?
 
Artyom Trishkin:
O que diz na documentação sobre exatamente == falso ?

Valor devolvido se nenhuma barra foi encontrada no momento especificado. Seexato=falso iBarShift retorna índice da barra mais próxima com tempo aberto menor que o especificado (time_open<time). Se tal barra não for encontrada (sem histórico antes do tempo especificado), a função retornará -1.

Mas nós temos história, é um fato. Tudo acontece na barra mais nova (série 0 por tempo).

Razão: