Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 4
Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
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().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 ?
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 ?
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 ;)
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))
Artyom Trishkin:
Мы сможем "сейчас" проверить цену "тогда" лишь только открытия/закрытия/хай/лоу свечи, соответствующей тому времени - нету в МТ4 тиковой истории. Поэтому нужно найти пересечение на минутках для наиболее точного определения цены из имеющихся в наличии возможностей. Но что вы имеете в виду под пересечением RSI ?
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))
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 ;)