Scriverò un EA gratuitamente - pagina 149

 
DDM77:
Dopo che il bot è stato testato, un ordine ufficiale è possibile

Bellissimo :)

 
Александр:

un paio di cambiamenti

Cosa è stato cambiato esattamente?

 

Salve, colleghi.

L'argomento è ancora rilevante? Ci sono dei mecenati che sono pronti a sviluppare il robot gratuitamente?

Ho bisogno di un assistente che sia un buon codificatore .mq4.

Io stesso sono un programmatore, ma non sono molto bravo con mq4. Ci sono alcuni problemi, che o non so come descrivere, o non funzionano.

Ho una semplice strategia di scalping (M15-M30) e un robot scritto inizialmente. Ha bisogno di essere migliorato.

Non darò il link al mio sito, non sarà considerato come una mia pubblicità:

RVI 50

EMA 9

EMA 100

Condizioni di ingresso per una posizione lunga:

EMA9 attraversa EMA100 dal basso verso l'alto, RVI deve anche attraversare la linea dello zero dal basso verso l'alto o essere sopra la linea dello zero. Se queste condizioni sono soddisfatte, apriamo una posizione di acquisto e piazziamouno stop loss di 2-3 punti sotto il minimo più vicino. Il Take Profit è 1,5-2 volte superiore allo Stop Loss.

Condizioni di entrata per una posizione corta:

EMA9 attraversa EMA100 dall'alto verso il basso, mentre l'indicatore RVI deve anche attraversare la linea dello zero dall'alto verso il basso o essere sotto la linea dello zero. Se queste condizioni sono soddisfatte, apriamo una posizione di vendita. Uno stop loss è posto appena sopra il massimo più vicino. Il Take Profit è 1,5-2 volte superiore allo Stop Loss.


Ho scritto un robot primitivo ma sta perdendo perché devo sistemare qualcosa che non funziona, inoltre forse qualcuno ha qualche idea su come filtrare i falsi segnali? (certo che lo fanno)...

Quello che non funziona e che dobbiamo sistemare:

1. Stop Loss e Take Profit sono fissati rispettivamente a 100 e 200, questi livelli non sono sufficienti. Dovremmo calcolare uno stop loss minimo/massimo dall'insieme delle candele delle ultime X barre (impostare X barre come parametro di input) e prendere profitto da esso. Non so come farlo da solo. Il punto più importante, perché il robot fallisce proprio a causa della chiusura sullo stop, anche se il segnale era corretto e il profitto sarebbe andato oltre.

2. Il robot, per qualche motivo, apre (nel tester) diversi ordini sulla stessa barra entro alcuni tick, anche se sta controllando di aprire un ordine sulla stessa barra (preso in prestito da questo forum), ma non funziona. Dobbiamo modificare il controllo e vedere perché non funziona.

3. Completare l'aggiunta di un trailing stop (parametri in entrata del robot) quando il BU raggiunge un certo livello, per esempio, 1/2 del TP calcolato (è anche possibile specificare il fattore BU nei parametri, per esempio, da 0,3 a 0,7). Il trailing separato è descritto nel robot (il codice è preso da questo forum), ma non tiene conto della BU. E per qualche motivo non funziona nello Strategy Tester, devo capire perché.

4. Voglio aggiungere la gestione del denaro, ma non so come. Per esempio, il divieto di aprire ordini più di 5 in una direzione, se ci sono attivi. O proibire il commercio quando si imposta il saldo/equity sul conto.

5. Martingala. Filtraggio dei segnali. (Opzionale).


Questo è tutto. Il file del robot è pronto per essere presentato al personale se ci sono interessati alla cooperazione. Se siete interessati, sono pronto a condividere il file del robot di trading in un messaggio personale, se sono interessato. Io stesso finirò, poi rimane solo 1 punto.

 

Ho risolto il punto 1. Ho trovato come calcolare il prezzo sulla storia della barra usando iLowest/iHighest )) per l'ultimo semestre di storia l'indicatore di redditività è leggermente aumentato) su tutta la storia sta perdendo (

Continuo a non capire il punto 2.

Ho iniziato a gestire il trailing, forse lo "vincerò" da solo) la redditività dovrebbe crescere un po', perché ci sono accordi con grandi prese che il prezzo proprio non raggiunge e lo chiude per stop, anche se ci potrebbe essere qualche profitto.

 

sul secondo punto:

datetime current, last=0;
int shift=1;

void OnTick()
   {
   current=iTime(symbol,frame,shift);
   //ограничение на торговлю вне начала бара
   if(last==current) return;
   last=current;

   }

sul terzo punto:

//трейлинг рыночных ордеров, стоплосс держится на расстоянии Distance от самой экстремальной тени из последних History баров 
int DoTrailOrder(int ePosition, int eMagicNumber, double eDistance, int eHistory, string eSymbol, int eTimeFrame)
   {
   if(!OrderSelect(ePosition,SELECT_BY_POS,MODE_TRADES)) return(1);
   int eType=OrderType();
   if(eType!=OP_BUY && eType!=OP_SELL) return(0);
   if(OrderMagicNumber()!=eMagicNumber) return(0);
   if(OrderSymbol()!=eSymbol) return(0);
   //наблюдаем начиная с бара следующим за баром открытия
   if(iBarShift(eSymbol,eTimeFrame,OrderOpenTime())==0) return(0);
   int eDigits=(int)MarketInfo(eSymbol,MODE_DIGITS);
   double ePoint=MarketInfo(eSymbol,MODE_POINT);
   double eSpread=MarketInfo(eSymbol,MODE_SPREAD);
   double eExtremum;
   if(eType==OP_BUY)
      {
      //стоп устанавливается на расстоянии eDistance от самой низкой тени бара из истории eHistory
      eExtremum=iLow(eSymbol,eTimeFrame,iLowest(eSymbol,eTimeFrame,MODE_LOW,eHistory,1));
      //расстояние от минимума до StopLoss должно превысить TrailingLevel
      if(NormalizeDouble(eExtremum-OrderStopLoss(),eDigits)<=eDistance*ePoint) return(0);
      //расстояние от минимума до цены открытия должно превысить TrailingLevel
      if(NormalizeDouble(eExtremum-OrderOpenPrice(),eDigits)<=eDistance*ePoint) return(0);
      //новый стоп должен быть не ближе к текущей цене, чем на два спреда
      if(NormalizeDouble(MarketInfo(eSymbol,MODE_BID)+eDistance*ePoint-eExtremum,eDigits)<=2*eSpread*ePoint) return(0);
      if(!OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(eExtremum-eDistance*ePoint,eDigits),OrderTakeProfit(),OrderExpiration(),clrBlue)) return(-1);
      }
   if(eType==OP_SELL)
      {
      //стоп устанавливается на расстоянии eDistance от самой высокой тени бара из истории eHistory
      eExtremum=iHigh(eSymbol,eTimeFrame,iHighest(eSymbol,eTimeFrame,MODE_HIGH,eHistory,1));
      if(NormalizeDouble(OrderStopLoss()-eExtremum,eDigits)<=(eDistance+eSpread)*ePoint && OrderStopLoss()!=0) return(0);
      if(NormalizeDouble(OrderOpenPrice()-eExtremum,eDigits)<=(eDistance+eSpread)*ePoint) return(0);
      //один спред между Ask и Bid сократился
      if(NormalizeDouble(eExtremum+eDistance*ePoint-MarketInfo(eSymbol,MODE_ASK),eDigits)<=eSpread*ePoint) return(0);
      if(!OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(eExtremum+(eDistance+eSpread)*ePoint,eDigits),OrderTakeProfit(),OrderExpiration(),clrRed)) return(-1);
      }
   return(0);
   }
 

I trailing stop possono aumentare l'aspettativa, ma non migliorano la redditività. Ci sarà una sottoperformance in un mercato rumoroso, dove il prezzo fa fuori uno stop appena tracciato, quando senza di esso ci sarebbe potuto essere più profitto.

È meglio pensare a chiudere il commercio deliberatamente. State cercando dei segnali per aprire, allora perché buttare la chiusura per arbitrare?
 

Grazie per i consigli sui punti 2 e 3. Farò dei test.

Per quanto riguarda la chiusura, naturalmente è possibile chiudere quando scatta il segnale opposto, devo pensare... cosa darà più effetto

Voglio seguire qualcosa quando raggiunge un certo livello. sarà uno svantaggio ma non voglio anche avere un grande drawdown. devo pensarci))

grazie

 

Dimitri, sul trailing - questa è un'informazione già testata da molte persone più di una volta. Il codice finale di cui sopra è probabilmente il migliore di tutti. Ma non è senza questo inconveniente.

Provate, tutto deve essere provato.

 
Ivan:

Cosa è stato cambiato esattamente?

L'ho già dato da qualche parte. Qui c'è di più.

 
Дмитрий Хлыстов:

Grazie per i consigli sui punti 2 e 3. Farò delle prove.

Per quanto riguarda la chiusura, naturalmente è possibile chiudere quando scatta il segnale opposto, devo pensare... cosa darà più effetto

Voglio seguire qualcosa quando raggiunge un certo livello. sarà uno svantaggio ma non voglio anche avere un grande drawdown. devo pensarci))

grazie

Il mercato non si muove per punti, cioè non si basa sui punti. Si sposta di livello in livello. La distanza si misura meglio in tempo di tendenza. Forse in tick, ma non in pip.

Motivazione: