Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 4

 
Artyom Trishkin:

Pour détacher les fonctions permettant d'obtenir des fractales arbitraires de l'indicateur, nous ne devons pas passer les tableaux high[] et low[] et les valeurs limites par référence.

Comme notre code est très proche de MQL5, nous devrons refuser les fonctions High[], Low[], iHigh() et iLow(). Voici comment cela se présente dans cet indicateur :

Cependant, vous devriez également vérifier la présence de -1 à partir des fonctions GetPriceHigh() et GetPriceLow().
Merci.
 
strongflex:
Le RSI devrait être de 15 minutes. Nous avons besoin que l'EA le vérifie toutes les 20 minutes à partir de l'ouverture du marché (9-00, 9-20, 9-40 etc.). Disons qu'à 10-20 il y a eu un croisement en dessous du niveau 70, il se souvient du prix et à 10-40 il vérifie si le prix est plus bas qu'à 10-20, il ouvre un short.

Tout d'abord, vous devez faire en sorte que le temps recule d'un certain nombre de minutes. Voici un script de test :

//+------------------------------------------------------------------+
//|                                                sTestValueRSI.mq4 |
//|              Copyright 2016, Artem A. Trishkin, Skype artmedia70 |
//|                       https://login.mql5.com/ru/users/artmedia70 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, Artem A. Trishkin, Skype artmedia70"
#property link      "https://login.mql5.com/ru/users/artmedia70"
#property version   "1.00"
#property strict
#property script_show_inputs
//--- input parameters
input ENUM_TIMEFRAMES   TimeframeRSI   = PERIOD_M15;  // Таймфрейм RSI
input int               MinutesBefore  =20;           // Количество минут назад
int minutesBefore=(MinutesBefore<1?1:MinutesBefore);  // Количество минут назад

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   datetime time_before=TimeCurrent()-minutesBefore*PeriodSeconds(PERIOD_M1);
   int shift=Bars(Symbol(),TimeframeRSI,TimeCurrent(),time_before);
   double value=iRSI(Symbol(),TimeframeRSI,14,PRICE_CLOSE,shift);
   Comment("\nCurrent time: ",TimeToString(TimeCurrent()),
           "\nВремя ",minutesBefore," минут назад: ",TimeToString(time_before),
           "\nБар времени ",TimeToString(time_before)," = ",shift," на таймфрейме ",EnumToString(TimeframeRSI),
           "\nЗначение RSI на баре ",shift," периода ",EnumToString(TimeframeRSI),": ",DoubleToString(value,Digits()));
  }
//+------------------------------------------------------------------+

Ce script effectue un décompte à partir de l'heure actuelle du serveur - il s'agit simplement de tester l'obtention de données RSI il y a un certain nombre de minutes.

 

Ensuite, nous devons connaître l'heure actuelle, et savoir si sa valeur est un multiple des minutes de l'intervalle de contrôle. J'en ai fait un EA de test :

//+------------------------------------------------------------------+
//|                                               exTestValueRSI.mq4 |
//|              Copyright 2016, Artem A. Trishkin, Skype artmedia70 |
//|                       https://login.mql5.com/ru/users/artmedia70 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, Artem A. Trishkin, Skype artmedia70"
#property link      "https://login.mql5.com/ru/users/artmedia70"
#property version   "1.00"
#property strict
//--- input parameters
input ENUM_TIMEFRAMES      TimeframeRSI   = PERIOD_M15;  // Таймфрейм RSI
input int                  PeriodRSI      = 14;          // Период расчёта RSI
input ENUM_APPLIED_PRICE   PriceRSI       = PRICE_CLOSE; // Цена расчёта RSI
input int                  MinutesBefore  =20;           // Количество минут назад
//--- global variables
int      minutesBefore; // Количество минут назад
int      periodRSI;     // Период расчёта RSI
double   prevRSIValue;  // Значение RSI xxx минут назад
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   minutesBefore=(MinutesBefore<1?1:MinutesBefore);  // Количество минут назад
   periodRSI=(PeriodRSI<1?1:PeriodRSI);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
  
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   MqlDateTime server_time;
   TimeToStruct(TimeCurrent(),server_time);
   if(server_time.min%minutesBefore==0) prevRSIValue=GetLastDataRSI(Symbol(),TimeframeRSI,TimeCurrent(),minutesBefore);
   Comment("\nТекущее время: ",TimeCurrent(),"\nМинуты текущего времени: ",server_time.min,"\nЗначение RSI: ",DoubleToString(prevRSIValue,Digits()));
  }
//+------------------------------------------------------------------+
double GetLastDataRSI(string symbol_name, ENUM_TIMEFRAMES timeframe, datetime start_time, int minutes_before,
                      int period_rsi=14, ENUM_APPLIED_PRICE price_rsi=PRICE_CLOSE)
  {
   datetime time_before=start_time-minutes_before*PeriodSeconds(PERIOD_M1);
   int shift=Bars(symbol_name,timeframe,start_time,time_before);
   return(iRSI(symbol_name,timeframe,period_rsi,price_rsi,shift));
  }
//+------------------------------------------------------------------+

Ensuite, qu'avons-nous besoin de savoir ?

 
Bon après-midi. Je suis nouveau dans le domaine du trading, j'ai donc beaucoup de questions, notamment sur le logiciel, dans mon cas il s'agit de MT4. Est-il possible de mettre un spread de paire de devises, par exemple, sur une fenêtre graphique sous forme de chiffres et de la même manière un indicateur d'ATR ? Je pense qu'il serait pratique d'utiliser cette façon de présenter les informations sur la situation du marché, il est plus pratique et plus rapide de calculer et d'évaluer sur la base de moyennes. Le deuxième point est le déplacement du stop en fonction de l'ATR. Est-il possible de le rendre automatique ? Si vous êtes assis dans une pose, alors grâce à la calculatrice et à une bonne vue, vous pouvez calculer et fixer un arrêt manuellement - sans problème. Et le rendre automatique est une bonne idée pour un trader, même si cela a ses inconvénients, mais dans une bonne tendance, un stop suiveur réduira le risque d'un stop erroné par un débutant. Merci d'avance.
 
Artyom Trishkin:

Ensuite, nous devons connaître l'heure actuelle, et savoir si sa valeur est un multiple des minutes de l'intervalle de contrôle. J'en ai fait un EA de test :

//+------------------------------------------------------------------+
//|                                               exTestValueRSI.mq4 |
//|              Copyright 2016, Artem A. Trishkin, Skype artmedia70 |
//|                       https://login.mql5.com/ru/users/artmedia70 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, Artem A. Trishkin, Skype artmedia70"
#property link      "https://login.mql5.com/ru/users/artmedia70"
#property version   "1.00"
#property strict
//--- input parameters
input ENUM_TIMEFRAMES      TimeframeRSI   = PERIOD_M15;  // Таймфрейм RSI
input int                  PeriodRSI      = 14;          // Период расчёта RSI
input ENUM_APPLIED_PRICE   PriceRSI       = PRICE_CLOSE; // Цена расчёта RSI
input int                  MinutesBefore  =20;           // Количество минут назад
//--- global variables
int      minutesBefore; // Количество минут назад
int      periodRSI;     // Период расчёта RSI
double   prevRSIValue;  // Значение RSI xxx минут назад
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   minutesBefore=(MinutesBefore<1?1:MinutesBefore);  // Количество минут назад
   periodRSI=(PeriodRSI<1?1:PeriodRSI);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
  
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   MqlDateTime server_time;
   TimeToStruct(TimeCurrent(),server_time);
   if(server_time.min%minutesBefore==0) prevRSIValue=GetLastDataRSI(Symbol(),TimeframeRSI,TimeCurrent(),minutesBefore);
   Comment("\nТекущее время: ",TimeCurrent(),"\nМинуты текущего времени: ",server_time.min,"\nЗначение RSI: ",DoubleToString(prevRSIValue,Digits()));
  }
//+------------------------------------------------------------------+
double GetLastDataRSI(string symbol_name, ENUM_TIMEFRAMES timeframe, datetime start_time, int minutes_before,
                      int period_rsi=14, ENUM_APPLIED_PRICE price_rsi=PRICE_CLOSE)
  {
   datetime time_before=start_time-minutes_before*PeriodSeconds(PERIOD_M1);
   int shift=Bars(symbol_name,timeframe,start_time,time_before);
   return(iRSI(symbol_name,timeframe,period_rsi,price_rsi,shift));
  }
//+------------------------------------------------------------------+

Ensuite, qu'avons-nous besoin de savoir ?

Ensuite, s'il y a un croisement du niveau RSI il y a 20 minutes, nous vérifions le prix, c'est-à-dire que pour le short, le prix doit être inférieur à celui d'il y a 20 minutes. Merci beaucoup. Si ça marche, je te dois une promesse))
 
Vladymyr Glushko:
Bonne journée. Je suis nouveau dans le trading, c'est pourquoi j'ai beaucoup de questions, y compris sur le logiciel, dans mon cas c'est MT4. Est-il possible d'afficher le spread de la paire de devises dans le graphique sous forme de nombre et l'indicateur ATR de la même manière ? Je pense qu'il serait pratique d'utiliser cette façon de présenter les informations sur la situation du marché, il est plus pratique et plus rapide de calculer et d'évaluer sur la base de moyennes. Le deuxième point est le déplacement du stop en fonction de l'ATR. Est-il possible de le rendre automatique ? Si vous êtes assis dans une pose, alors grâce à la calculatrice et à une bonne vue, vous pouvez calculer et fixer un arrêt manuellement - sans problème. Et le rendre automatique est une bonne idée pour un trader, même si cela a ses inconvénients, mais dans une bonne tendance, un stop suiveur réduira le risque d'un stop erroné par un débutant. Merci d'avance.

C'est simple et direct - afficher des objets graphiques, en particulier des étiquettes de texte avec les données requises sur le graphique, et les mettre à jour à chaque tic.

Si vous ne savez pas quoi en faire , essayez de trouver le bon ;)

 
strongflex:
Ensuite, si le niveau RSI a été franchi il y a 20 minutes, nous vérifions le prix, c'est-à-dire que pour un short, le prix doit être inférieur à celui d'il y a 20 minutes. Merci beaucoup. Si tout fonctionne, je serai chargé de la promesse))
Nous ne pourrons vérifier le prix "maintenant" "ensuite" que par l'ouverture/la fermeture/le haut/le bas de la bougie correspondant à ce moment - pas d'historique des tick dans MT4. Nous devons donc trouver un croisement sur les minutes pour déterminer le prix le plus précis possible. Mais qu'entendez-vous par "croisement RSI" ?
 

Artyom Trishkin:
Мы сможем "сейчас" проверить цену "тогда" лишь только открытия/закрытия/хай/лоу свечи, соответствующей тому времени - нету в МТ4 тиковой истории. Поэтому нужно найти пересечение на минутках для наиболее точного определения цены из имеющихся в наличии возможностей. Но что вы имеете в виду под пересечением RSI ?

Le RSI traverse le niveau 70 ; disons que le RSI à 10-00 était inférieur à 70 ; à 10-20 au-dessus de 70 et à 10-40, vérifiez que le 10-20 est supérieur au 10-40.
 
Artyom Trishkin:

C'est facile et simple à faire - afficher des objets graphiques, en particulier - des étiquettes de texte avec les données requises sur le graphique, et les mettre à jour à chaque tick.

Et les différents chaluts dans kodobase sont nombreux - cherchez le bon ;)

Merci beaucoup ...... nous allons le chercher))

 
Artyom Trishkin:

Tout est simple et facile : affichez des objets graphiques, en particulier des étiquettes de texte avec les données requises sur le graphique, et mettez-les à jour à chaque tic-tac.

Et les différents chaluts dans kodobase sont nombreux - trouvez le bon pour vous ;)

Mais comment faire étape par étape ? ..... objets graphiques (qu'est-ce que c'est et comment les définir), mettre des étiquettes avec les données sur le graphique (où entrer et avec quelles données) ...... désolé pour les questions idiotes.
Raison: