Ho bisogno di scrivere un consulente. Ho un'idea. - pagina 4

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

Questo viene fatto in 2 passi.

1) Aperto sul mercato TP = 0, SL = 0

2) Modificare SL, TP.

O mi sono sbagliato?

 
meta-trader2007 >> :

In realtà questo TS è redditizio sui timeframe H1 e superiori (ma non sempre, e a volte - durante un no-trend).

La cosa principale è non usare TP e la pesca a strascico deve essere 3 o più volte di stop.

Devo aver fatto i test nel posto sbagliato =)

 
GarF1eld >> :

Si fa in 2 passi.

...

O ho sbagliato?

Meglio cambiare il DC con uno normale.

forse stavo testando nel posto sbagliato =)

Devi testare su una storia scadente)

Ed ecco come sui punti di controllo:


 
Ho un po' di problemi).
 
meta-trader2007 >> :

È meglio cambiare il DC con uno normale.

Bisogna testare su una storia di scarsa qualità)

Questo è come sui punti di controllo:


Si potrebbe aggiungere all'Expert Advisor sugli ordini in sospeso di cancellare gli ordini precedenti quando viene aperta la prossima coppia di ordini?

Sarebbe molto buono... e il flusso commerciale non sarebbe intasato... gli errori 418 stanno arrivando

 
E cancellare quando uno di quelli già aperti viene attivato)
 
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, pubblica qui i risultati dei tuoi test.

 

ha eseguito questi EAs su demo, gli ordini non vengono piazzati.... Qual è la ragione?

 
dimasik >> :

ha eseguito questi EAs su demo, gli ordini non vengono piazzati.... Qual è la ragione?

Gli ordini in sospeso vengono piazzati all'inizio della formazione di una nuova barra, a condizione che non ci siano posizioni aperte corrispondenti.

Scrivete qui i risultati positivi del tester con la pila allegata.

 

Quando ho testato l'esperto exp_Higt-Low.mq4 in tempo reale sulla demo DAX (per 5 ore), all'inizio ha mostrato un profitto, e poi ha iniziato a perdere.

Ho solo una cosa da dire: è possibile lavorare in questa direzione. L'unico problema è che il mio Expert Advisor cerca di caricare un flusso di trade con ordini pend enti, per questo ha un compito di chiudere gli ordini pendenti, per esempio, quando una delle posizioni si innesca o si apre una nuova coppia di ordini pendenti. Se non lo faccio, dopo un po' appare un errore 418.

a mql4com

potresti aggiungere l'exp_Higt-Low.mq4 che meta-trader2007 ha postato prima come ho descritto sopra?

Continuerò i test domani.

Motivazione: