Você precisa escrever um assessor. Eu tenho uma idéia. - página 4

 
dimasik >>:
lascu.roman, ты можешь сделать чтобы ордера открывались не с рынка, а отложенниками??? Это важно, потому что брокер с рынка не принимает сразу установку SL и TP. Вот.

Isto é feito em 2 etapas.

1) Aberto no mercado TP = 0, SL = 0

2) Modificar SL, TP.

Ou será que eu me enganei?

 
meta-trader2007 >> :

Na verdade, este TS é lucrativo nos períodos de H1 e mais alto (mas nem sempre, e às vezes - durante uma tendência sem tendência).

O principal é não usar TP e o arrasto tem que ser 3 ou mais vezes de parada.

eu devo ter estado testando no lugar errado =)

 
GarF1eld >> :

É feito em 2 etapas.

...

Ou será que eu me enganei?

É melhor mudar o CD para um normal.

talvez eu estivesse testando no lugar errado =)

Você tem que testar em uma história de má qualidade)

E aqui está como nos pontos de controle:


 
Eu tenho um pouco de vantagem).
 
meta-trader2007 >> :

É melhor mudar o CD para um normal.

Você tem que testar em uma história de má qualidade)

É assim nos pontos de controle:


Você poderia acrescentar ao Expert Advisor sobre pedidos pendentes para apagar pedidos anteriores quando o próximo par de pedidos for aberto?

Seria muito bom...e o fluxo comercial não estaria entupido...os 418 erros estão surgindo

 
E apagar quando um dos que já estão abertos é acionado)
 
extern bool Limits = TRUE; // TRUE - LIMIT orders; FALSE - STOP orders
extern double Distance = 10; // Probably less than zero
extern double TP = 144;
extern double SL = 55;
extern double TralSL = 34;
extern double Lots = 0.1;

double Spread;

void init()
{
  Distance *= Point;
  TP *= Point;
  SL *= Point;
  TralSL *= Point;
  
  Spread = Point * MarketInfo(Symbol(), MODE_SPREAD);
  
  return;
}

void TrailingOrders()
{
  int i, Total = OrdersTotal();
  double Difference, tp, sl;
  
  for ( i = 0; i < Total; i++)
  {
    OrderSelect( i, SELECT_BY_POS);
   
    if (OrderType() == OP_BUY)
    {
      sl = Bid - TralSL;
      Difference = NormalizeDouble( sl - OrderStopLoss(), Digits);
        
      if ( Difference > 0)
      {
        sl = NormalizeDouble( sl, Digits);
        
        OrderModify(OrderTicket(), OrderOpenPrice(), sl, OrderTakeProfit(), 0);
      }
    }
    else if (OrderType() == OP_SELL)
    {
      sl = Ask + TralSL;
      Difference = NormalizeDouble( sl - OrderStopLoss(), Digits);
        
      if ( Difference < 0)
      {
        sl = NormalizeDouble( sl, Digits);
       
        OrderModify(OrderTicket(), OrderOpenPrice(), sl, OrderTakeProfit(), 0);
      }
    }
  }
  
  return;
}

bool OrderScan( int TypeOrder )
{
  int i, Total = OrdersTotal();
  
  for ( i = 0; i < Total; i++)
  {
    OrderSelect( i, SELECT_BY_POS);
    
    if (OrderType() == TypeOrder)
      return(TRUE);
  }
  
  return(FALSE);
} 

void MyOrderSend( int TypeOrder, double open, double sl, double tp )
{
  if ( OrderScan( TypeOrder))
    OrderModify(OrderTicket(), open, sl, tp, 0);
  else
    OrderSend(Symbol(), TypeOrder, Lots, open, 0, sl, tp);
      
  return;
}

void OpenOrders( double H, double L )
{
  double open, tp, sl;
  
  if ( Limits)
  {
    if (! OrderScan(OP_BUY))
    {
      open = NormalizeDouble( L - Distance + Spread, Digits);
      tp = NormalizeDouble( open + TP, Digits);
      sl = NormalizeDouble( open - SL, Digits);
  
      MyOrderSend(OP_BUYLIMIT, open, sl, tp);
    }
  
    if (! OrderScan(OP_SELL))
    {
      open = NormalizeDouble( H + Distance, Digits);
      tp = NormalizeDouble( open - TP, Digits);
      sl = NormalizeDouble( open + SL, Digits);
  
      MyOrderSend(OP_SELLLIMIT, open, sl, tp);
    }
  }
  else
  {
    if (! OrderScan(OP_BUY))
    {
      open = NormalizeDouble( H + Distance + Spread, Digits);
      tp = NormalizeDouble( open + TP, Digits);
      sl = NormalizeDouble( open - SL, Digits);
  
      MyOrderSend(OP_BUYSTOP, open, sl, tp);
    }

    if (! OrderScan(OP_SELL))
    {
      open = NormalizeDouble( L - Distance, Digits);
      tp = NormalizeDouble( open - TP, Digits);
      sl = NormalizeDouble( open + SL, Digits);
  
      MyOrderSend(OP_SELLSTOP, open, sl, tp);
    }
  }
  
  return;
}

void start()
{
  static int PrevTime = 0;

  TrailingOrders();
  
  if ( PrevTime == Time[0])
    return;
    
  PrevTime = Time[0];
  
  OpenOrders(High[1], Low[1]);
  
  return;
}


mpeugep, poste aqui os resultados de seus testes.

 

rodou estes EAs em demonstração, os pedidos não estão sendo colocados.... Qual é a razão?

 
dimasik >> :

rodaram estes EAs em demonstração, os pedidos não estão sendo colocados.... qual é a razão?

As ordens pendentes são colocadas no início da formação de um novo bar, desde que não haja posições em aberto correspondentes.

Escreva aqui sobre os resultados positivos do testador com a pilha anexada.

 

Quando testei o especialista exp_Higt-Low.mq4 em tempo real na demonstração do DAX (durante 5 horas), a princípio ele mostrou lucro, e depois começou a perder.

Tenho apenas uma coisa a dizer - é possível trabalhar nesta direção. O único problema é que meu Expert Advisor tenta carregar um fluxo comercial com ordens pendentes, por isso tem a tarefa de fechar ordens pendentes, por exemplo, quando uma das ordens pendentes aciona ou quando um novo par de ordens pendentes abre.

para mql4com

você poderia acrescentar a exp_Higt-Low.mq4 que o meta-trader2007 publicou anteriormente, como descrevi acima?

Continuarei os testes amanhã.

Razão: