Questions d'un "mannequin - page 234

 
forward666: Oui, j'ai besoin d'une visualisation

Pour les essais : https://www.metatrader5.com/ru/terminal/help/algotrading/visualization

Aucune aide n'a encore été trouvée pour le trading en direct - essayez simplement d'ouvrir et de fermer une position dans un compte de démonstration.

 
Boris.45: Bonjour, chers traders ! S'il vous plaît, aidez un programmeur débutant. J'ai écrit une partie du programme pour rechercher des canaux mobiles (SK) de Borispolz en utilisant des fractales pour plusieurs délais et j'ai commencé à écrire des algorithmes pour prendre des décisions d'ouverture de positions. J'ai été confronté à une situation où le délai des tendances rapides est seulement une ou deux barres. Cette situation suggère ce qui suit : vous devez travailler sur des délais sélectionnés dans la recherche et le calcul des paramètres SK, tandis que la décision de placer des ordres ou d'ouvrir des positions doit être prise sur des délais très courts. Veuillez me conseiller sur la façon d'organiser le programme de manière à ce que le bloc de calcul des paramètres SK ne fonctionne que sur les périodes sélectionnées, par exemple H1 et H4, et que le bloc de prise de décision concernant le placement des ordres fonctionne sur la période M1.

Merci de votre attention.

Je suis assez loin des fractales, mais voici quelques considérations générales. Nous pouvons essayer de la manière la plus simple : créer un indicateur qui calcule les "paramètres SK" sur H4. Laissez ensuite notre conseiller expert vérifier cet indicateur à chaque tick et prendre des décisions sur le placement des ordres.
 
Yedelkin:

Pour les essais : https://www.metatrader5.com/ru/terminal/help/algotrading/visualization

Pour le trading en direct, je n'ai pas encore trouvé d'aide - essayez simplement d'ouvrir et de fermer une position sur un compte de démonstration.

Merci ! Je vais essayer !

Mais je n'en ai besoin que pour la visualisation sur un compte de démonstration).

 
forward666: Mais je n'en ai besoin que pour la visualisation sur un compte de démonstration).
Si cela ne fonctionne pas sur un compte de démonstration, écrivez-moi.
 
Yedelkin:
Si cela ne fonctionne pas sur un compte de démonstration, faites-le moi savoir.
Ok ! Je vais essayer ce soir et faire un rapport !
 
forward666:

Mais je n'en ai besoin que pour la visualisation sur un compte de démonstration).


À partir de l'historique, vous pouvez tirer la souris vers le graphique (avec la manette - tous).

! !! Avec un contrôleur, les paramètres de la carte seront réinitialisés.
 

Quel est le problème avec le code ?

Les graphiques sont bons, mais dans le testeur, l'erreur Array Out Of Range apparaît.

#property indicator_label1  "LINE"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrGold
#property indicator_style1  STYLE_SOLID
#property indicator_width1  2

input int    period   = 10;       //Период усредения
input bool   USE_LIMIT= false;    //вкл/выкл лимитирование
                                  //Заключается в ограничении максимального изменения значения индикатора
input double use_limit= 0.00005;  //Величина
                                  //на которую максимально может измениться индикатор

double         Buffer[];
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
   
   SetIndexBuffer(0,Buffer,INDICATOR_DATA);
   //PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0);
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[])
  {
//--- вычисления значений индикатора
//--- calculate the indicator values
   int start=0;
//--- если расчет уже производился на предыдущем запуске OnCalculate
//--- if the calculation is made on a previous run of OnCalculate
   if(prev_calculated>0) start=prev_calculated-1; // установим начало расчетов с предпослденего бара -- Set the start of the penultimate bar calculations
//--- заполняем индикаторный буфер значениями
//--- fill indicator buffer values
   for(int i=start;i<rates_total;i++)
     {
      Buffer[0]=price[0];
      double delta=(price[i]-Buffer[i])/period;
      if(USE_LIMIT && delta>use_limit)
        {
         delta=use_limit;
        }
      if(USE_LIMIT && delta<-use_limit)
        {
         delta=-use_limit;
        }
      Buffer[i+1]=Buffer[i]+delta;
     }
//--- вернем значение prev_calculated для следующего вызова функции
//--- return the value for the next call of prev_calculated function
   return(rates_total);
  }
//+------------------------------------------------------------------+
 
lazarev-d-m:

Quel est le problème avec le code ?

Les graphiques sont bons, mais dans le testeur, l'erreur Array Out Of Range apparaît.


La boucle se poursuit jusqu'à ce que i<rates_total. Puis il y a Buffer[ i+1] .

Buffer[rates_total]. Il n'y a rien de tel. Le dernier index est rates_total-1.

 
lazarev-d-m:

Quel est le problème avec le code ?

Les graphiques sont bons, mais dans le testeur, l'erreur Array Out Of Range apparaît.


Buffer[i+1] === +1 не делается проверка на выход за массив
 
Karlson:


La boucle se poursuit jusqu'à ce que i<rates_total. Il y a alors Buffer[ i+1] .

Buffer[rates_total]. Il n'y a rien de tel. Le dernier index est rates_total-1.

Changé en ceci

i<rates_total-1
Il semble que cela fonctionne