Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 6. - página 122

 
skyjet:

Olá! à procura de erros nesta função.

A idéia é que as ordens pendentes que não tenham sido abertas devem ser apagadas dois dias após terem sido colocadas.

min=1440;

if (OrdersTotal()>0)
{  for (int i=OrdersTotal()-1; i>=0; i--)
   {  if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {  if (OrderSymbol()!=Symbol()) continue;
         if (OrderType()==OP_BUYSTOP || OrderType()==OP_SELLSTOP)
         {  if(TimeCurrent()-OrderOpenTime()>=min)
            {  OrderDelete(OrderTicket());
               return;
         }  }
}  }  }
 
skyjet:

Olá! à procura de erros nesta função.

A idéia é que as ordens pendentes que não tenham sido abertas devem ser apagadas dois dias após terem sido colocadas.

min=1440;


Por que você gostaria de rastrear e excluir ordens pendentes? Você deve definir sua data de expiração=TimeCurrent()+min*60+sec; eles mesmos serão apagados após min*60+sec.
 
Sepulca:

Por que você precisa monitorar e apagar as ordens pendentes? Você precisa definir data de expiração=TimeCurrent()+min*60+sec; eles se apagarão após min*60+sec.
Talvez, a ordem pendente feche de acordo com algum algoritmo, portanto fechará em 1 dia se houver outra condição, por exemplo, 2 dias. 2 dias.
 
Sepulca paladin80 Obrigado! data de expiração é exatamente o que precisamos :)
 

paladin80:

OrderOpenTime() retorna o tempo de abertura do pedido.

Para uma ordem pendente, esta função retorna zero.

 
PapaYozh:

OrderOpenTime() retorna o tempo de abertura do pedido.

Para uma ordem pendente, esta função retorna zero.

Hmm, eu rapidamente ajustei o código sem verificar as funções propriamente ditas. Certo, OrderOpenTime() mostra o tempo de abertura da posição pelo corretor, mas não o tempo de aceitação da ordem pendente pelo corretor. Isto é, provavelmente, seria melhor especificar a hora de fechamento imediato no pedido, ou registrar a hora de envio do pedido no número mágico (se não for usado de qualquer forma) e comparar TimeCurrent() com OrderMagicNumber( ).
 

Boa tarde. Ajude-me a lidar com o indicador personalizado.

Estou resolvendo o problema de determinar a distância até a linha de tendência. Preciso chegar à linha de tendência exatamente no período de tempo em que ela é traçada (independentemente do período de tempo que é aberto no terminal). O valor atual da linha de tendência pode ser obtido usando a função ObjectGetValueByShift. Como os cálculos podem ser feitos apenas pelo tempo aberto, escrevi um pequeno indicador. Fui atraído pelo fato de que a função iCustom tem o parâmetro de tempo, mas me pergunto o quanto este parâmetro é considerado ao chamar o indicador.

Aqui está o indicador:


#property indicator_chart_window
#property indicator_buffers 1
//--------------------------------------------------------------------   
extern string TL_name = "TL_1";
//--------------------------------------------------------------------   
double valueBuf[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init() {
   //---- indicators
   SetIndexBuffer(0,valueBuf);
   SetIndexStyle (0,DRAW_LINE,STYLE_SOLID,1, White);
   //----
   return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit() {
   //----
   //----
   return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start() {
   int i;
   int    counted_bars = IndicatorCounted();
   //----
   i = Bars - counted_bars - 1;           // Индекс первого непосчитанного
   
   // Цикл по непосчитанным барам
   while(i>=0) {
      valueBuf[i] = NormalizeDouble(ObjectGetValueByShift(TL_name,i), Digits);
      i--;
   }     
   //----
   return(0);
}

O indicador considera o valor atual da tendência.
Eu chamo o próprio indicador:

TL_price_now = iCustom(NULL,PERIOD_D1,"TL_value",TL_name,0,0);

Aqui, por exemplo, o tempo PERIOD_D1 é passado para o indicador como um parâmetro, no qual a tendência é traçada e para o qual a distância deve ser calculada.

Calculo a distância para a tendência de forma simples:

dist = NormalizeDouble(TL_price_now - Bid, Digits);
Parece ser assim, mas não é assim: ao mudar para outros timings (diferente de D1), o indicador retorna outros valores (correto para os timings para os quais eu mudo).
Aqui temos uma pergunta: até que ponto um período é considerado quando se chama a função iCustom?
Ou talvez eu tenha estragado o indicador?
 
pako:


t = OrderTotal();

por que contar???? contou???


Então, eu o fiz para passar o valor por referência. A lógica é simples!
 
artmedia70:

Na minha versão, a função é mais curta ... :)



Sim, a propósito, esta forma de implementação é mais inteligente. Somente no início havia mais espaço ocupado por funções adicionais. Foi assim que aconteceu:

void FindOrders(int& massive[])
{
   int oType;
   ArrayInitialize(massiveOfOrders, 0);
   for (int i=OrdersTotal() - 1; i>=0; i--)
   {
      if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
      if (OrderSymbol() != Symbol()) continue;
      if (OrderMagicNumber() != i_magic) continue;
      
      oType = OrderType();
      massiveOfOrders[oType] = massiveOfOrders[oType] + 1;
   }
}

int start()
{
   int i, oTotal = 0, oPending = 0;
   
   FindOrders(massiveOfOrders);
   
   for (i=0; i<=7; i++)
   {
       if (i > 1 && i < 6)
       {
           oPending += massiveOfOrders[i];
       }
       if (i < 6)
       {
          oTotal += massiveOfOrders[i];
       }
   }
   pr ("FindOrders(): " + "oTotal = " + oTotal);
   pr ("FindOrders(): " + "oPending = " + oPending);

Não há nada a se otimizar, não é mesmo?

Quero dizer, é muito mais conveniente, quando não há absolutamente nada no início. E tudo é chamado puramente por funções. E da última vez verificou-se que o início tem muitos tipos de sobrecrescimento nas principais funções e sobrecrescimento de funções adicionais...

 

Bom dia!

Por favor, ajude e explique por que o Expert Advisor não está trabalhando ou negociando?