Apprendre et écrire ensemble en MQL5 - page 9

 
gdtt:

le conseiller utilise

de la 0ème barre est prise, les valeurs des tampons de l'indicateur sont modifiées à chaque tick jusqu'à la clôture de la bougie.

C'est vrai, j'ai fait une expérience, mais en substance, cela ne résout pas le problème principal : comment faire en sorte qu'un EA recalcule le tampon de l'indicateur non seulement sur la barre demandée, mais aussi plusieurs barres en arrière ?

Усреднение ценовых рядов без дополнительных буферов для промежуточных расчетов
Усреднение ценовых рядов без дополнительных буферов для промежуточных расчетов
  • 2010.10.25
  • Nikolay Kositsin
  • www.mql5.com
Статья о традиционных и не совсем традиционных алгоритмах усреднения, упакованных в максимально простые и достаточно однотипные классы. Они задумывались для универсального использования в практических разработках индикаторов. Надеюсь, что предложенные классы в определенных ситуациях могут оказаться достаточно актуальной альтернативой громоздким, в некотором смысле, вызовам пользовательских и технических индикаторов.
 

Une solution a peut-être été trouvée ! L'un d'eux...

Pour cela, vous devez toutefois créer une version spéciale de l'indicateur.

 

Messieurs,

Je suis en train d'écrire un indicateur : ...
int handle ;
double indicatorBuffer[] ;
...
int OnInit()
{
... handleMA = iMA(_Symbol, _Period, periodMA, shiftMA, MODE_SMA, AppPrice) ;
...
}

int OnCalculate (const int rates_total, // taille du tableau price[]
const int prev_calculated, // barres traitées lors de l'appel précédent
const int begin, // où commencent les données significatives
const double& price[]) // tableau pour le calcul
{
... faire quelque chose

La question est la suivante : comment faire pour que handleMA = iMA(_Symbol, _Period, periodMA, shiftMA, MODE_SMA, AppPrice) sache ce qu'est AppPrice?
ou comment extraire Apply to : de l'onglet Parameters pour l'utiliser dans le code ?

Merci d'avance...

 
FlyAgaric:

Messieurs,


La question est la suivante : comment faire en sorte que handleMA = iMA(_Symbol, _Period, periodMA, shiftMA, MODE_SMA, AppPrice) sache ce qu'est AppPrice?
ou comment extraire Appliquer à : de l'onglet Paramètres pour l'utiliser dans le code ?

Merci d'avance...

Voir OnCalculate():

La sélection d'une série temporelle ou d'un indicateur nécessaire comme tableau price[] est effectuée par l'utilisateur lors du démarrage de l'indicateur dans l'onglet "Paramètres". Pour ce faire, vous devez spécifier l'élément nécessaire dans la liste déroulante du champ "Appliquer à".

Pour recevoir les valeurs d'un indicateur personnalisé d'autres programmes mql5, la fonction iCustom() est utilisée, elle renvoie le handle de l'indicateur pour les opérations suivantes. Vous pouvez également spécifier le tableau price[] approprié ou le handle d'un autre indicateur. Ce paramètre doit être passé en dernier dans la liste des variables d'entrée de l'indicateur personnalisé.
 
Rosh:

Voir OnCalculate():


Merci Rosh, mais ma question est exactement la même. Que dois-je spécifier dans l'opérateur
handleMA = iMA(_Symbol, _Period, periodMA, shiftMA, MODE_SMA, AppPrice)
comme AppPrice ?

Je lis très attentivement l'aide disponible. Peut-être que la chaleur a fait des ravages, mais ...

 
FlyAgaric:

Merci Rosh, mais ma question est exactement la même. Que dois-je préciser dans la déclaration
handleMA = iMA(_Symbol, _Period, periodMA, shiftMA, MODE_SMA, AppPrice)
comme AppPrice ?

J'ai lu très attentivement l'aide disponible. Peut-être que la chaleur a fait des ravages, mais ...

Spécifiez un handle d'indicateur, si vous voulez calculer sur les données d'un autre indicateur. Ou le type de prix sur lequel l'indicateur sera calculé.
 
FlyAgaric:

Merci Rosh, mais ma question est exactement la même. Que dois-je préciser dans la déclaration
handleMA = iMA(_Symbol, _Period, periodMA, shiftMA, MODE_SMA, AppPrice)
comme AppPrice ?

J'ai lu très attentivement l'aide disponible. Peut-être que la chaleur a fait des ravages, mais ...

La chaleur. Vous devez spécifier ENUM_APPLIED_PRICE comme AppPrice)
input ENUM_APPLIED_PRICE AppPrice=PRICE_CLOSE;
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Ценовые константы
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Ценовые константы
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы индикаторов / Ценовые константы - Документация по MQL5
 
Swan:
La chaleur. Vous devez spécifier ENUM_APPLIED_PRICE comme AppPrice)

Swan, merci de votre attention. Mais si vous utilisez
entrée ENUM_APPLIED_PRICE AppPrice=PRICE_CLOSE ; et le premier formulaire

int OnCalculate (const int rates_total, // taille du tableau price[]
const int prev_calculated, // barres traitées lors de l'appel précédent
const int begin, //où commencent les données significatives
const double& price[]) // tableau pour les calculs
Nous obtenons un message d'avertissement à la compilation : Deux fonctions OnCalculate sont définies. La fonction de données de prix sera utilisée NameIndicator.mq5 (pg)
et le tableau price[] reste délié de AppPrice de quelque manière que ce soit, à moins qu'il ne soit identique à Apply to : dans le troisième onglet "Paramètres".

La question, en fait, est de savoir si les indicateurs intégrés à un seul tampon comme iMA() et la première forme de intCalculate() peuvent être utilisés, si le tableau price[] est en quelque sorte
utilisés dans les calculs.

 
Rosh:
Spécifiez le handle de l'indicateur si vous souhaitez effectuer des calculs sur les données d'un autre indicateur. Ou le type de prix sur lequel l'indicateur sera calculé.

Nous (plutôt moi) avons un certain malentendu.

La question, en fait, est de savoir si nous pouvons utiliser les indicateurs intégrés à tampon unique comme iMA() et la première forme de int OnCalculate(), si le tableau price[] est en quelque sorte
utilisé dans les calculs.

 
FlyAgaric:

Nous (plutôt moi) avons un certain malentendu.

La question, en fait, est de savoir si l'on peut utiliser les indicateurs intégrés à un tampon de type iMA() et la première forme int OnCalculate() si le tableau price[] est d'une manière ou d'une autre
utilisés dans les calculs.

Votre paramètreAppPrice n'a rien à voir avec OnCalculate().

int OnInit()
{
... handleMA = iMA(_Symbol, _Period, periodMA, shiftMA, MODE_SMA, AppPrice);
...
}

Vous pouvez lui donner la valeur d'une des constantes de prix (option 1) ou la poignée d'un autre indicateur (option 2). Et puis tu peux :

1ère variante.

Dans la fonction OnCalculate() du deuxième type

int OnCalculate (const int rates_total,      // размер входных таймсерий
                 const int prev_calculated,  // обработано баров на предыдущем вызове
                 const datetime& time[],     // Time
                 const double& open[],       // Open
                 const double& high[],       // High
                 const double& low[],        // Low
                 const double& close[],      // Close
                 const long& tick_volume[],  // Tick Volume
                 const long& volume[],       // Real Volume
                 const int& spread[]         // Spread
   );

demander toutes les données nécessaires et effectuer le calcul

2ème variante.

Utilisez OnCalculate() de n'importe quel type selon les besoins du code et utilisez CopyBuffer() pour obtenir les valeurs des indicateurs.

Raison: