Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 6. - pagina 65

 

Buona giornata a tutti voi! Se ho provato a piazzare uno stop loss su uno strascico, non funzionerebbe nello Strategy Tester, ma non ho visto un tale problema. Nello Strategy Tester, quando l'EA dovrebbe piazzare uno stop loss, non lo fa ma a volte lo fa, ma non ho trovato nessuna regolarità e la precisione dei test ne risente molto. Lo stesso Expert Advisor sul deposito demo mostra che il traino funziona. Il terminale non segnala alcun errore. È un bug nel codice o un bug nel terminale? Puoi aiutarmi a capirlo? Ho provato tutto il codice e non capisco cosa c'è di sbagliato, non voglio cambiare la strategia delle tracce. Ho allegato il codice completo di Expert Advisor e sotto c'è il codice del trawl (leggermente modificato trailing on candlestick shadow di Yury Dzyuban)

void TrailingByShadows(int ticket,int tmfrm,int bars_n, int indent) {  
   int i;
   double new_extremum;

   if ((bars_n<1) || (indent<0) || (ticket==0) || ((tmfrm!=1) && (tmfrm!=5) && (tmfrm!=15) && (tmfrm!=30) && (tmfrm!=60) && (tmfrm!=240) && (tmfrm!=1440) && (tmfrm!=10080) && (tmfrm!=43200)) || (!OrderSelect(ticket,SELECT_BY_TICKET))) {
      Print("Трейлинг функцией TrailingByShadows() невозможен из-за некорректности значений переданных ей аргументов.");
      return(0);
   } 
   if (OrderType()==OP_BUY) {
      for(i=1;i<=bars_n;i++) {
         if (i==1) new_extremum = iLow(Symbol(),tmfrm,i); else if (new_extremum>iLow(Symbol(),tmfrm,i)) new_extremum = iLow(Symbol(),tmfrm,i);
      }  
  
      if ((((new_extremum - indent*Point)>OrderStopLoss() + 1.0 * Point) || (OrderStopLoss()==0)) && ((new_extremum - indent*Point)>OrderOpenPrice()) && (new_extremum - indent*Point<Bid-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point) && (getLots(new_extremum) > 0))
      if (!OrderModify(ticket,OrderOpenPrice(),new_extremum-indent*Point,OrderTakeProfit(),OrderExpiration()))
         Print("Не удалось модифицировать ордер №",OrderTicket(),". Ошибка: ",GetLastError());
   }
   if (OrderType()==OP_SELL) {
      for(i=1;i<=bars_n;i++) {
         if (i==1) new_extremum = iHigh(Symbol(),tmfrm,i); else if (new_extremum<iHigh(Symbol(),tmfrm,i)) new_extremum = iHigh(Symbol(),tmfrm,i);
      }         
      if ((((new_extremum + (indent + MarketInfo(Symbol(),MODE_SPREAD))*Point)<OrderStopLoss() - 1.0 * Point) || (OrderStopLoss()==0)) && ((new_extremum + (indent + MarketInfo(Symbol(),MODE_SPREAD))*Point)<OrderOpenPrice()) && (new_extremum + (indent + MarketInfo(Symbol(),MODE_SPREAD))*Point>Ask+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point) && (getLots(new_extremum) > 0))
      if (!OrderModify(ticket,OrderOpenPrice(),new_extremum + (indent + MarketInfo(Symbol(),MODE_SPREAD))*Point,OrderTakeProfit(),OrderExpiration()))
         Print("Не удалось модифицировать ордер №",OrderTicket(),". Ошибка: ",GetLastError());     
   }      
}

double getLots(double newSL) {
   int opnTime = 0; // время открытия трейда для цикла пересчета позиций
   double lotSum = 0; 
   for (int i = 0; i <= OrdersTotal()-1; i++) {
      OrderSelect(i, SELECT_BY_POS);     
      if ((OrderOpenTime() > opnTime) && (OrderType() == OP_BUY) || (OrderType() == OP_SELL)) { 
         opnTime = OrderOpenTime(); 
         if (OrderType() == OP_BUY)    { lotSum += OrderLots() * (newSL - OrderOpenPrice()) / Point; }
         if (OrderType() == OP_SELL)   { lotSum -= OrderLots() * (newSL - OrderOpenPrice()) / Point; }
      }
   }   
   return(lotSum);
}
File:
avalanche.mq4  12 kb
 
Su quali tempi e con quale qualità fate i test?
 

EURUSD, M1, 99%, 90%

All'inizio ho usato la storia dei tick standard, caricata con MT, ho trovato questo problema, così come dei vuoti inspiegabili nella storia delle quotazioni, così sono passato a Tick Data Suite, ho scaricato le quotazioni da Dukascopy, la qualità è aumentata da 90 a 99, ma il problema persiste.

ZS: Probabilmente la stessa situazione nella vita reale, o non ho testato abbastanza a lungo (circa 3 settimane), durante quel periodo ho dovuto chiudere manualmente diverse volte perché il trawl non era installato, ma ho pensato che fosse perché dovevo disconnettere periodicamente la macchina terminale e questo in qualche modo influenzava il funzionamento di EA, recentemente l'ho spostato su VPS forse una settimana fa e ora sembra disegnare la stessa situazione

 

Il test è eseguito su un lasso di tempo che è uguale al valore della variabile tmfrm o no?

in caso contrario, dovreste assicurarvi che ci sia una cronologia sull'intervallo di tempo del tmfrm...

e il numero di serbatoi trasmessi nella variabile bars_n corrisponde al timeframe trasmesso nella variabile tmfrm ?

 
keekkenen:

Il test è eseguito su un lasso di tempo che è uguale al valore della variabile tmfrm o no?

in caso contrario, dovreste assicurarvi che ci sia una cronologia sull'intervallo di tempo del tmfrm...

e il numero di serbatoi passati nella variabile bars_n corrisponde al timeframe passato nella variabile tmfrm ?


Sì, credo che tu abbia ragione, ho trascurato il codice della funzione di qualcun altro, non l'ho studiato a fondo e non ho preso in considerazione quel parametro. Di conseguenza, lo stop loss è stato impostato per un periodo diverso. Grazie per il vostro aiuto.

ZS: È sempre così: qualche piccola cosa fa sì che il codice non funzioni come vorrei.

 

Chissà cosa diavolo sta succedendo con il mattone rosso nel registro!

2013.08.05 08:00:41 '9291791': Segnale - non trovato segnale di aggiornamento - 7400 in base

Non c'è niente di sbagliato nel mio codice! E anche con i segnali! Cosa significa questo?

 
Mepkypuu:


Sì, sembra che tu abbia ragione, ho trascurato il codice della funzione di qualcun altro, non l'ho esaminato in dettaglio e non ho preso in considerazione questo parametro. Di conseguenza, lo stop loss è stato impostato per un periodo diverso. Grazie per il vostro aiuto.

ZS: È sempre così: qualche piccola cosa fa sì che il codice non funzioni come vorrei.


Ne sono stato felice troppo presto, il trailing ha iniziato a funzionare meglio, ma sulla storia ci sono ancora casi in cui non funziona, cioè il problema è solo parzialmente risolto.
 
splxgf:

Perché durante le corse viene preso lo spread attuale, ma durante le notizie e la sera differisce dallo spread giornaliero.

Come si aggiusta lo spread? Dopo tutto, OrderSend specifica o Ask o Bid.
 
Mepkypuu:

Non ne sono ancora contento, il trailing funziona meglio, ma ci sono ancora casi in cui non funziona, cioè il problema è solo parzialmente risolto.

Quello che chiamate Trailing non è veramente Trailing, è calcolato in un modo diverso e il suo comportamento può essere illogico.
 
Leo59:

Come si può aggiustare lo spread? Dopo tutto, OrderSend specifica o Ask o Bid.
Nel tester sotto il TF!
Motivazione: