Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 1477

 
Vasiliy Pushkaryov #:

visualizza le informazioni sulla barra 6201

Cosa c'è scritto?

printf((string)TerminalInfoInteger(TERMINAL_MAXBARS));
Molto probabilmente la storia è più per il tester, in modo che gli indicatori siano calcolati correttamente in esso
 
MrBrooklin #:

Prendendo in considerazione i suggerimenti dei membri del forum, per i quali si tratta di un grande GRAZIE, abbiamo ottenuto questa versione dello script:

Saluti, Vladimir.

Ho completamente tralasciato un punto molto importante dello script. Era necessario normalizzare il lotto. Ecco la versione corretta:

//+------------------------------------------------------------------+
//|                            Lot_Size_Depending_On_Risk_And_SL.mq5 |
//|                                  Copyright 2023, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property script_show_inputs
input uint Risk=6;         // Размер риска (> 0, но не более 100 %)
input uint Stop_Loss=1000; // Размер стоп-лосса (> 0, но не более 4294967295)
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Lot_Size_Depending_On_Risk_And_SL()
  {
//--- блок проверки входных параметров на корректность
   if(Risk==0 || Risk>100 || Stop_Loss==0)
     {
      Print("<===== Введены не корректные размеры риска и/или стоп-лосса! =====>");
      return(0.0);
     }
//--- блок определения размера лота
   double trading_account_currency=SymbolInfoDouble(_Symbol,SYMBOL_POINT)*
                                   SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE)/
                                   SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE);
   double lot=NormalizeDouble((AccountInfoDouble(ACCOUNT_MARGIN_FREE)*Risk*0.01)/
                              (Stop_Loss*trading_account_currency),2);
//--- блок проверки размера лота на минимум и максимум от возможного
   double min_volume=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MIN);
   double max_volume=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MAX);
   if(lot<min_volume)
      lot=min_volume;
   if(lot>max_volume)
      lot=max_volume;
//--- блок расчёта минимального шага изменения объёма необходимого для заключения сделки
   double step_volume=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_STEP);
   int ratio=(int)MathRound(lot/step_volume);
   if(MathAbs(ratio*step_volume-lot)>0.0000001)
      lot=ratio*step_volume;
   return(lot);
  }
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   Print(DoubleToString(Lot_Size_Depending_On_Risk_And_SL(),2));
  }
//+------------------------------------------------------------------+

Saluti, Vladimir.

 
Buon pomeriggio!
Dopo aver terminato il forward testing delrobot, ho riscontrato un problema persistente: quando si avvia un singolo test con il miglior set di parametri, il tester della strategia inizia ad eseguirlo e sembra eseguirlo fino alla fine (a giudicare dal motore dell'indicatore di progresso), ma poi si blocca. È necessario riavviare Metatrader e i risultati del singolo test (e dell'intero test di avanzamento in generale) vanno persi.
Perché il tester si blocca e come si può risolvere?
Saluti, Alexander
 
Esperti, per favore ditemi: come impostare la piattaforma in modo che rifletta la cronologia degli scambi non su tutti i timeframe, ma solo su alcuni di essi?
E quello che abbiamo ora: clicchiamo sulla casella "mostra cronologia degli scambi" e tutta la cronologia (frecce su e giù) sul grafico settimanale sono già un solido recinto.
E vorrei un'impostazione come altri strumenti (linee di tendenza, frecce, ecc.), la cui visualizzazione può essere impostata non su tutti i timeframe.
 

Buon pomeriggio. Puoi dirmi dove vedere l'esempio più semplice di un Expert Advisor basato sull'intersezione di due MA (puoi fare una lezione).
So come aggiungerne uno. Non voglio fare un semplice copia-incolla e allungare il codice, so che ci sono altri metodi.
Se in MQL4 non avevo domande, in MQL5 non riesco a capire bene come fare.

 
makssub esempio più semplice di un Expert Advisor basato sull'intersezione di due MA (puoi fare una lezione).
So come aggiungerne uno. Non voglio fare un semplice copia-incolla e allungare il codice, so che ci sono altri metodi.
Se in MQL4 non avevo domande, in MQL5 non riesco a capire bene come fare.

Salve, aprite MetaEDitor 5. Ha un Expert Advisor integrato (standard) basato sull'intersezione di due MA. Aprire il codice e studiarlo. Oppure cercatelo in CodeBase. Ecco, ad esempio, il primo EA costruito sull'intersezione di due MA.

Saluti, Vladimir.


 
MrBrooklin #:

Salve, aprite MetaEDitor 5. Ha un Expert Advisor integrato (standard) basato sull'intersezione di due MA. Aprire il codice e studiarlo. Oppure cercatelo in CodeBase. Ecco, ad esempio, il primo EA costruito sull'intersezione di due MA.

Saluti, Vladimir.


Grazie, ho dato un'occhiata.

Ho capito cosa succede in OnInit.

Come avvitare tutto correttamente in OnTick?

 
makssub #:

Grazie, l'ho cercato.

In OnInit capisco più o meno cosa sta succedendo.

Come faccio a incastrare tutto in OnTick?

Sto mostrando solo una variante di scrittura di un Expert Advisor, ma ce ne possono essere moltissime. Tutto dipende dalla qualifica del programmatore. La struttura di un Expert Advisor può essere simile a questa:

//+------------------------------------------------------------------+
//|                                                            1.mq5 |
//|                                  Copyright 2023, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Input variables                                                  |
//+------------------------------------------------------------------+

// здесь размещаем входные параметры советника

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   // здесь инициализируем то, что считаем нужным
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   // здесь деинициализируем то, что считаем нужным   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- абстрактный пример советника

   Check_Trading();           // проверим условия разрешающие торговлю
   Signal_Up();               // ищем сигнал для открытия длинной позиции
   Open_Buy_Position();       // открываем длинную позицию
   Close_Buy_Positions();     // закрываем длинную позицию
   
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Check_Trading()
  {

   // здесь вставляем условия разрешающие торговлю

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void  Signal_Up(); 
  {

   // здесь вставляем условия, при которых появляется сигнал на покупку

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Open_Buy_Position(); 
  {

   // здесь вставляем функцию открытия длинной позиции

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Close_Buy_Positions();
  {

   // здесь вставляем функцию закрытия длинной позиции

  }
//+------------------------------------------------------------------+

Qualcosa del genere. Sottolineo ancora una volta che non si tratta di una guida alla scrittura di Expert Advisor, ma di una struttura approssimativa a cui mi attengo quando scrivo i miei Expert Advisor.

Saluti, Vladimir.

 
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   // здесь инициализируем то, что считаем нужным
   return(INIT_SUCCEEDED);

Non so come scriverlo

 
Лауреат #:

Non so come scriverlo

Cosa non ti è chiaro esattamente? Come creare una funzione di inizializzazione di un EA? Allora prova a studiare questo articolo per principianti.

Saluti, Vladimir.