Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 1494

 
Maksim Burov #:

Buon pomeriggio.

Mi può dire come fare per far eseguire nuovamente i parametri di ottimizzazione ottenuti, ma per un periodo di tempo diverso.

Ho ottimizzato per l'ultimo semestre i parametri di una coppia di valute, registrati in Excel. Ho preso il periodo dell'ultimo anno e voglio eseguire i parametri. Come faccio a reinserirli nel tester o nell'ottimizzatore?
Controllare cosa passa e cosa non passa, annotarlo in Excel. Magari poi eseguire, ad esempio, il test per gli ultimi 2 anni.

Selezionare il periodo in cui si desidera analizzare i dati. Quindi, nella scheda dei parametri ottenuti, fare clic con il pulsante destro del mouse sui parametri richiesti e selezionare test singolo.
 
Roman Kutemov #:
Selezionare il periodo su cui si desidera analizzare i dati. Quindi, nella scheda dei parametri ottenuti, fare clic con il pulsante destro del mouse su quello desiderato e selezionare test singolo.

Grazie.
E come fare tutto nel campo di applicazione, e non spulciare ogni parametro?

 

Potreste aiutarmi con i calcoli?


Devo avere un take profit pari a 3 volte lo stop. Sembra funzionare, ma qualcosa non va)). Il robot opera su oro e indici, ma si rifiuta di operare sulle valute (anche se calcola tutto correttamente).

Per prima cosa imposto lo stop sul minimo della candela 1:

//---Устанавливаем стоп
   double stoploss = iLow(_Symbol,PERIOD_CURRENT,1);
      Print("Цена стопа ", stoploss);

Poi calcolo la distanza dall'ASK allo stop in punti, e assegno questo valore ai punti pert:

//---Опредеяем размер стопа в пунктах
   double ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
   double low = iLow(_Symbol, 0, 1);
   double points = NormalizeDouble((ask - low) / _Point, _Digits);
      Print("Размер стопа ", points);

Successivamente calcolo lo stop anche in pips:

//---Считаем тейкпрофит
   double TP = NormalizeDouble(points * 3, _Digits);
   Print("Размер тейка ", TP);


Poi apro un'operazione e aggiungo TR all'ASK :

//---Открываем сделку на покупку
         if(Close > maHandle && Close > Open)
            {
               if(trade.Buy(Lot,_Symbol,SYMBOL_ASK,stoploss, ask + TP,"Это я, твой робот") == true)
                  {
                     Print("Открыта покупка");
                  }


E nel tester tutti i calcoli sono corretti, in punti a 5 cifre, lo stop è anche su Low1, la dimensione dello stop è anche corretta in punti a 5 cifre. Ma c'è qualcosa che non va nel take profit, che non è di 507 pip, ma di 5070 pip.



 

Ciao, Sergey.

Quando si calcola lo stop, si passa dalla distanza in prezzo alla distanza in pip. Poi, moltiplicando per 3, si ottiene la distanza dal takeout, anch'essa in pips. E poi si aggiunge il numero di pip al prezzo di domanda.

Cercate di non dividere per la dimensione di un pip o di ricordarvi di moltiplicare di nuovo per esso.

//---Устанавливаем стоп
   double stoploss = iLow(_Symbol,PERIOD_CURRENT,1);
      Print("Цена стопа ", stoploss);

//---Опредеяем размер стопа
   double ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
   double low = iLow(_Symbol, 0, 1);
   double points = NormalizeDouble((ask - low) / _Point, _Digits);
   double points = NormalizeDouble((ask - low), _Digits);
      
//--- ...

Oppure in questo modo

//---Устанавливаем стоп
   double stoploss = iLow(_Symbol,PERIOD_CURRENT,1);
   Print("Цена стопа ", stoploss);

//---Опредеяем размер стопа в пунктах (это целое число)
   double ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
   double low = iLow(_Symbol, 0, 1);
   int points = (ask - low) / _Point;
   Print("Размер стопа ", points);

//---Считаем тейкпрофит
   int TP = points * 3;
   Print("Размер тейка ", TP);

//---Открываем сделку на покупку
         if(Close > maHandle && Close > Open)
            {
               if(trade.Buy(Lot,_Symbol,SYMBOL_ASK,stoploss, NormalizeDouble(ask + TP * _Point, _Digits),"Это я, твой робот") == true)
                  {
                     Print("Открыта покупка");
                  }
 
Yuriy Bykov #:

Ciao, Sergei.


Grazie mille! Mi ero davvero perso nei prezzi/articoli. Proverò ora)))

 
Ora tutto viene conteggiato e impostato correttamente, ma solo su USDJPY, XAUUSD e qualsiasi indice. Ma su valute come USDCAD, EURUSD il gufo non opera e invia l'errore 4756. Ho cercato il valore nella guida, ma non è servito)
 
Sergey Izhutov #:
Ora tutto viene conteggiato e impostato correttamente, ma solo su USDJPY, XAUUSD e qualsiasi indice. Ma su valute come USDCAD, EURUSD il gufo non opera e invia l'errore 4756. Ho cercato il valore nella guida, ma non è servito a nulla).

Fate come nel post precedente: fornite il codice che vi apre le posizioni. Allora, forse, sarete in grado di dare qualche consiglio. Non dovrebbe esserci alcuna differenza fondamentale tra USDJPY e USDCAD, molto probabilmente si tratta di un errore banale.

 
Yuriy Bykov #:

Procedere come nell'ultimo post:

Ecco il codice

//---Открываем сделку на покупку
         if(Close > maHandle && Close > Open)
            {
               if(trade.Buy(Lot,_Symbol,SYMBOL_ASK,stoploss, ask + BuyTP,"Это я, твой робот") == true)
                  {
                     Print("Открыта покупка");
                  }
                 else
                     {
                         // Получение кода ошибки
                         int error_code = GetLastError();
                         Print("Ошибка отправки заявки: ", GetLastError());
                     }
                  
                     return;
            }
            
    //---Открываем сделку на продажу
         if(Close < maHandle && Close < Open)
            {
               if(trade.Sell(Lot,_Symbol,SYMBOL_ASK,stoploss,ask - SellTP,"Это я, твой робот") == true)
                  {
                     Print("Открыта продажа");
                  }
                 else
                     {
                         // Получение кода ошибки
                         int error_code = GetLastError();
                         Print("Ошибка отправки заявки: ", GetLastError());
                     }
                  
                     return;
            }
 

Molto probabilmente l'errore è qui:

if(Close > maHandle && Close > Open)

Secondo la vostra logica maHandle dovrebbe essere il prezzo, e questo è molto probabilmente un handle, cioè un numero intero - il numero di serie dell'indicatore tra tutti gli indicatori caricati. Consultate la Guida di MQL5 per conoscere il modo corretto di ottenere i valori degli indicatori.

 
Yuriy Bykov #:

Probabilmente c'è un errore:

Secondo la vostra logica maHandle dovrebbe essere il prezzo, e questo è molto probabilmente un handle, cioè un numero intero - il numero di serie dell'indicatore tra tutti gli indicatori caricati. Consultate la Guida di MQL5 per conoscere il modo corretto di ottenere i valori degli indicatori.

La sera ho pensato la stessa cosa, cioè che avrei dovuto rimuoverlo. Non ho ancora fatto amicizia con gli indici. Ricordo solo vagamente che nel 4 scrivevo semplicemente Close > MA e tutto funzionava. Proverò a commentare l'handle e a vedere quali sono i risultati.