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.
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 2inputint period = 10; //Период усреденияinputbool USE_LIMIT= false; //вкл/выкл лимитирование//Заключается в ограничении максимального изменения значения индикатораinputdouble use_limit= 0.00005; //Величина//на которую максимально может измениться индикаторdouble Buffer[];
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+intOnInit()
{
SetIndexBuffer(0,Buffer,INDICATOR_DATA);
//PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0);return(0);
}
//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+intOnCalculate(constint rates_total,
constint prev_calculated,
constint begin,
constdouble &price[])
{
//--- вычисления значений индикатора//--- calculate the indicator valuesint start=0;
//--- если расчет уже производился на предыдущем запуске OnCalculate//--- if the calculation is made on a previous run of OnCalculateif(prev_calculated>0) start=prev_calculated-1; // установим начало расчетов с предпослденего бара -- Set the start of the penultimate bar calculations//--- заполняем индикаторный буфер значениями//--- fill indicator buffer valuesfor(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 functionreturn(rates_total);
}
//+------------------------------------------------------------------+
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.
Merci de votre attention.
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).
Si cela ne fonctionne pas sur un compte de démonstration, faites-le moi savoir.
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.
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.
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 не делается проверка на выход за массив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-1Il semble que cela fonctionne