Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 71

 
xyz999: 2) Se l'ottimizzazione (backtest) è stata effettuata su un periodo di 10 mesi e l'opzione 1/4 forward test è stata selezionata, come per esempio, come dovrei capire:
Terminale cliente / Tester di strategia / Backtesting / Forward Testing
 

Grazie.

Sì, da questo link.

http://www.metatrader5.com/ru/terminal/help/tester/tester_using/forward_testing.

Ho trovato la risposta alla mia seconda domanda. Tuttavia, non ci sono risposte alla prima e alla terza domanda.

Anche a me piacerebbe averli.

Voglio conoscere i risultati e i rapporti degli altri trader. Poiché i miei risultati sono molto allarmanti. Sono uno scienziato nel campo del controllo automatico e della modellazione di processi non stazionari, che include anche un grafico del movimento dei prezzi nel mercato. Ho modellato processi non stazionari per molti anni e il modo in cui il tester lavora non si adatta in alcun modo ai miei anni di esperienza. Qui c'è qualcosa che non va. O uso il tester in modo sbagliato o non funziona correttamente. Scopriamolo insieme.

Il mio backtest che segue strettamente il periodo di ottimizzazione mostra il 200% del profitto che avevamo durante l'ottimizzazione. Tuttavia, scegliendo altri parametri di ottimizzazione e testando durante il periodo di ottimizzazione, otterremo un profitto molte volte inferiore. Questo non dovrebbe essere il caso. Ecco perché ho alcune domande.

 
xyz999: Ho trovato una risposta alla mia seconda domanda. Tuttavia, non c'è alcuna risposta alla prima e alla terza domanda. Anche a me piacerebbe averli.

Beh, non dipende da me, come si dice: "Quello che posso" (c). Sono lontano dall'argomento stesso. Prova a cercare nel forum, forse dove i test in avanti sono già stati discussi. Oppure, se pensi che l'argomento sia molto importante, crea un nuovo ramo tematico. Altrimenti, le domande si perderanno nel ramo generale.

xyz999 : Sì, su questo link https://www.metatrader5.com/ru/terminal/help/algotrading/testing ho trovato la risposta alla mia seconda domanda.

Ci sono anche materiali di riferimento nel terminale. F1.

 
mario065:

Ha fatto una cosa molto stupida.

Ho preso il corpo dell'indicatore Custom Moving Average e ci ho messo dentro il buffer MFI.

Ho cambiato il prezzo.

Ti ho fatto un esperto, solo un indicatore e un commento per verificare.

Grazie per non aver lasciato il messaggio senza risposta. Ahimè il tester continua a rifiutare lo smoothing degli altri indicatori. Il mio EA sta usando i valori di due indicatori - MFI e DEMA allo stesso tempo. Ho implementato il tuo algoritmo con MFI nel mio EA - invano - non sono stato in grado di eseguirlo per l'ottimizzazione delle variabili globali.

Grazie ancora per i vostri messaggi.
 
L'articolo sull'EA https://www.mql5.com/ru/articles/100 menziona le condizioni per aprire le posizioni, ma nessuna condizione per chiuderle.


   bool Buy_opened=false;  // переменные, в которых будет храниться информация 
   bool Sell_opened=false; // о наличии соответствующих открытых позиций

   if(PositionSelect(_Symbol)==true) // есть открытая позиция
     {
      if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
        {
         Buy_opened=true;  //это длинная позиция
        }
      else if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
        {
         Sell_opened=true; // это короткая позиция
        }
     }    
             
   bool Buy_Condition_1=...
   bool Buy_Condition_2=...
   bool Buy_Condition_3=...

   
 if(Buy_Condition_1 || Buy_Condition_2)
     { 
       if(Buy_Condition_3)
        {
         // есть ли в данный момент открытая позиция на покупку?
         if(Buy_opened)
           {
            Alert("Уже есть позиция на покупку!!!");
            return;    // не добавлять к открытой позиции на покупку
           }        
         mrequest.action = TRADE_ACTION_DEAL;                                  // немедленное исполнение
         mrequest.price = NormalizeDouble(latest_price.ask,_Digits);           // последняя цена ask
         mrequest.sl = NormalizeDouble(latest_price.ask - STP*_Point,_Digits); // Stop Loss
         mrequest.tp = NormalizeDouble(latest_price.ask + TKP*_Point,_Digits); // Take Profit
         mrequest.symbol = _Symbol;                                            // символ
         mrequest.volume = Lot;                                                // количество лотов для торговли
         mrequest.magic = EA_Magic;                                            // Magic Number
         mrequest.type = ORDER_TYPE_BUY;                                       // ордер на покупку
         mrequest.type_filling = ORDER_FILLING_FOK;                            // тип исполнения ордера - все или ничего
         mrequest.deviation=10;                                               // проскальзывание от текущей цены
         //--- отсылаем ордер
         OrderSend(mrequest,mresult);
         // анализируем код возврата торгового сервера
         if(mresult.retcode==10009 || mresult.retcode==10008) //запрос выполнен или ордер успешно помещен
           {
            Alert("Ордер Buy успешно помещен, тикет ордера #:",mresult.order,"!!");
           }
         else
           {
            Alert("Запрос на установку ордера Buy не выполнен - код ошибки:",GetLastError());
            return;
           }
        }
      }
 
 bool Buy_Close_1=....
 bool Buy_Close_2=...
 bool Buy_Close_3=...
 
 if(Buy_Close_1 || Buy_Close_2)
     {
      if(Buy_Close_3)
        {
        // есть ли в данный момент открытая позиция на покупку?
         if(????)
         {
           Alert("Позицию на покупку закрываю!!!");
            return;    // закрыл
         }        
         mrequest.action = TRADE_ACTION_DEAL;                                  // немедленное исполнение
         mrequest.price = NormalizeDouble(latest_price.bid,_Digits);           // последняя цена bid
         mrequest.sl = 0;
         mrequest.tp = 0;
         mrequest.symbol = _Symbol;                                            // символ
         mrequest.volume = Lot;                                                // количество лотов для торговли
         mrequest.magic = EA_Magic;                                            // Magic Number
         mrequest.type = ORDER_TYPE_SELL; // ордер на продажу                                     // ордер на покупку
         mrequest.type_filling = ORDER_FILLING_FOK;                            // тип исполнения ордера - все или ничего
         mrequest.deviation=10;                                               // проскальзывание от текущей цены
         //--- отсылаем ордер
         OrderSend(mrequest,mresult);

Al posto dei punti interrogativi ho messo PositionSelect(_Symbol) con valore true. Non ha aiutato.


Domanda. Cosa posso cambiare minimamente - per essere in grado di impostare le condizioni di chiusura?
Пошаговое руководство по написанию MQL5-советников для начинающих
Пошаговое руководство по написанию MQL5-советников для начинающих
  • 2010.06.09
  • Samuel
  • www.mql5.com
Написание советников на MQL5 проще чем кажется, вы легко можете этому научиться. В этом руководстве вы познакомитесь с основными моментами, необходимыми для написания простого советника на основе конкретной торговой стратегии. Рассмотрена структура советника, использование встроенных технических индикаторов и торговых функций, вопросы отладки и тестирования советника на исторических данных.
 
Lester:
L'articolo sull'Expert Advisor https://www.mql5.com/ru/articles/100 menziona le condizioni di apertura delle posizioni, ma non le condizioni di chiusura delle posizioni.


Al posto dei punti interrogativi ho messo PositionSelect(_Symbol) con valore true. Non ha aiutato.


Domanda. Cosa posso cambiare al minimo - per poter impostare le condizioni di chiusura?

Avete un ritorno dopo l'allarme. Probabilmente la posizione non si chiude a causa di questo ritorno. Per favore, toglietelo e riprovate.

// есть ли в данный момент открытая позиция на покупку?
         if(????)
         {
           Alert("Позицию на покупку закрываю!!!");
           return;    // закрыл
         }  


 
Grazie, perché mi sembrava che la risposta fosse molto semplice e che fosse vicina.
Tuttavia, è sorta un'altra domanda sulla parte dei punti interrogativi.

Sull'algoritmo.

In condizioni appropriate + nessuna posizione - la posizione è aperta, e in altre condizioni e la presenza di una posizione aperta - la posizione aperta è chiusa.

Se non mi sbaglio - esistenza di una posizione, cioè Buy_opened

if(Buy_Condition_1 || Buy_Condition_2)
     { 
       if(Buy_Condition_3)
        {
         // есть ли в данный момент открытая позиция на покупку?
         if(Buy_opened)
           {
            Alert("Уже есть позиция на покупку!!!");
            return;    // не добавлять к открытой позиции на покупку
           }        

uguale a uno - causa allarme e ritorno (ritorna all'inizio), e uguale a zero - apre l'ordine Buy.

Domanda. Cosa dovrei scrivere al posto dei punti interrogativi - la condizione di un ordine aperto, in modo che l'EA non apra una posizione (nel mio caso, apre un ordine di vendita)?

 bool Buy_Close_1=....
 bool Buy_Close_2=...
 bool Buy_Close_3=...
 
 if(Buy_Close_1 || Buy_Close_2)
     {
      if(Buy_Close_3)
        {
        // есть ли в данный момент открытая позиция на покупку?
         if(????)
         {
           Alert("Позицию на покупку закрываю!!!");
            return;    // закрыл
         }        
         mrequest.action = TRADE_ACTION_DEAL;                                  // немедленное исполнение
         mrequest.price = NormalizeDouble(latest_price.bid,_Digits);           // последняя цена bid
         mrequest.sl = 0;
         mrequest.tp = 0;

Al momento ho anche prescritto Buy_opened, perché le condizioni di questa definizione sono legate a PositionSelect(_Symbol)

Capisco che le domande non significano nulla, in quanto è possibile provare rapidamente tutte le opzioni logiche possibili e testare, ma il problema è che il bug del tester non mi permette di farlo, ma c'è la possibilità di diagnosticare effettivamente su M1 in modalità di trading reale.

 
Lester:
...

Capisco che le domande non significhino nulla in quanto è possibile ricontrollare rapidamente tutte le opzioni logiche possibili e testare, ma il problema è che il bug del tester non mi permette di farlo, ma c'è la possibilità di diagnosticare effettivamente su M1 in modalità di trading reale.

Non capisco bene la sua domanda.

E quale bug nel tester hai trovato che ti impedisce di eseguire il test?

 
tol64:

Non capisco bene la sua domanda.

Qual è il bug del tester che ti impedisce di eseguire il test?

L'ho descritto prima o nel ramo Indicator. Dema riferendosi alla maniglia dell'indicatore MFI non viene visualizzato nella finestra MFI e quindi il tester non funziona, ma l'Expert Advisor funziona. Lo stesso vale per MA, AMA...!

Sulla domanda. Cosa dovremmo scrivere al posto dei punti interrogativi per far "capire" all'Expert Advisor che c'è una posizione aperta e non aprire un ordine!

bool Buy_Close_1=....
 bool Buy_Close_2=...
 bool Buy_Close_3=...
 
 if(Buy_Close_1 || Buy_Close_2)
     {
      if(Buy_Close_3)
        {
        // есть ли в данный момент открытая позиция на покупку?
         if(????)
         {
           Alert("Позицию на покупку закрываю!!!");
           // Return убрал благодаря форуму ))
         }        
 
Lester:
Descritto in precedenza, o nel ramo degli indicatori. Dema che si riferisce alla maniglia dell'indicatore MFI - non viene visualizzato nella finestra MFI, e quindi - l'Expert Advisor non funziona. Lo stesso vale per MA, AMA.

Sulla domanda. Cosa dobbiamo scrivere al posto dei punti interrogativi affinché l'EA "veda" che c'è una posizione aperta e non apra un ordine!

Se c'è una posizione (PositionSelect(_Symbol)) e tutte le altre condizioni sono soddisfatte, allora chiudete la posizione. Se il ritorno dal tuo esempio non viene rimosso, la condizione dovrebbe essere come questa

if(!PositionSelect(_Symbol))
  {
   return;
  }

il che significa che se non c'è una posizione, allora uscire. Se non esce, il programma eseguirà il codice che viene dopo questo blocco.

Ma io metterei il controllo della presenza/assenza di posizione prima dei controlli delle condizioni di chiusura.