Merci, comment puis-je écrire une boucle pour trouver le numéro de la barre qui croise les deux MAs lorsque les deux premiers points de l'algorithme sont respectés et qu'il y a des valeurs des deux MAs sur la première barre ?
/
.
Aha, tu n'as pas résolu le problème avec des tableaux après tout.
Note : La solution à travers les tableaux (copie des TROIS DERNIÈRES valeurs des indicateurs dans les tableaux First[], Second[] et Third[]) est lecroisement de deux iMAs- OnTick() :
//--- We look for crossing of two indicatorsdouble First[];
double Second[];
double Third[];
ArraySetAsSeries(First,true); // index [0] - the most right bar on a chartsArraySetAsSeries(Second,true); // index [0] - the most right bar on a chartsArraySetAsSeries(Third,true); // index [0] - the most right bar on a chartsint buffer_num=0; // indicator buffer number int start_pos=0; // start position int count=3; // amount to copy if(!iMAGet(handle_iMA_First,buffer_num,start_pos,count,First))
return;
if(!iMAGet(handle_iMA_Second,buffer_num,start_pos,count,Second))
return;
if(InpFilterMA)
if(!iMAGet(handle_iMA_Third,buffer_num,start_pos,count,Third))
return;
//--- step 1: check in the arrays bars [0] and [1]if(First[0]>Second[0] && First[1]<Second[1]) // buy
{
if(InpFilterMA)
if(Third[0]>=First[0])
return;
if(!RefreshRates())
{
PrevBars=iTime(1);
return;
}
double sl=m_symbol.Bid()-InpStopLoss*m_adjusted_point;
double tp=m_symbol.Ask()+InpTakeProfit*m_adjusted_point;
OpenBuy(sl,tp);
return;
}
elseif(First[0]<Second[0] && First[1]>Second[1]) // sell
{
if(InpFilterMA)
if(Third[0]<=First[0])
return;
if(!RefreshRates())
{
PrevBars=iTime(1);
return;
}
double sl=m_symbol.Ask()+InpStopLoss*m_adjusted_point;
double tp=m_symbol.Bid()-InpTakeProfit*m_adjusted_point;
OpenSell(sl,tp);
return;
}
//--- step 2: on a step of 1 crossing haven't found. check in the arrays bars [0] and [2]if(First[0]>Second[0] && First[2]<Second[2]) // buy
{
//--- search in historyif(SearchPositions(iTime(start_pos+3),iTime(start_pos)))
return;
if(!RefreshRates())
{
PrevBars=iTime(1);
return;
}
double sl=m_symbol.Bid()-InpStopLoss*m_adjusted_point;
double tp=m_symbol.Ask()+InpTakeProfit*m_adjusted_point;
OpenBuy(sl,tp);
return;
}
elseif(First[0]<Second[2] && First[1]>Second[2]) // sell
{
//--- search in historyif(SearchPositions(iTime(start_pos+3),iTime(start_pos)))
return;
if(!RefreshRates())
{
PrevBars=iTime(1);
return;
}
double sl=m_symbol.Ask()+InpStopLoss*m_adjusted_point;
double tp=m_symbol.Bid()-InpTakeProfit*m_adjusted_point;
OpenSell(sl,tp);
return;
}
Dans votre cas (une valeur à la fois), la boucle ressemblera à ceci :
int signal=0; // "-1" -> Sell; "0" -> Not signal; "1" -> Buydouble MA1_curr=iMAGet(handle_iMA_1,0); // the value of the 1st MA on i bardouble MA2_curr=iMAGet(handle_iMA_2,0); // the value of the 1st MA on i barfor(int i=0;i<100;i++)
{
double MA1_prev=iMAGet(handle_iMA_1,i+1); // the value of the 1st MA on i+1 th bardouble MA2_prev=iMAGet(handle_iMA_2,i+1); // the value of the 1st MA on i+1 th bar//---
signal=0; // "-1" -> Sell; "0" -> Not signal; "1" -> Buyif(MA1_prev<MA2_prev && MA1_curr>MA2_curr)
signal=1;
elseif(MA1_prev>MA2_prev && MA1_curr<MA2_curr)
signal=-1;
//---
MA1_curr=MA1_prev;
MA2_curr=MA2_prev;
}
MA1_curr - la valeur de l'indicateur MA1 sur la barre #i, MA1_prev - la valeur de l'indicateur MA1 sur la barre #i+1 MA2_curr - la valeur de l'indicateur MA2 sur la barre #i, MA2_prev - la valeur de l'indicateur MA2 sur la barre #i+1
Lorsque vous obtenez un croisement (le signal de la variable est soit "-1" soit "1") - la valeur de i sera le numéro de la barre où le croisement a eu lieu.
Il s'agit de l'algorithme le plus simple pour trouver le croisement, mais il n'est pas le plus précis.
Bon après-midi. Pourriez-vous me dire dans quel format télécharger les données historiques du serveur Finam ou MFD.ru pour importer l' historique des cotations ? Je ne peux pas le faire du tout. Je ne peux que l'enregistrer de txt à csv et c'est tout.
Bon après-midi. Pourriez-vous me dire dans quel format télécharger les données historiques du serveur Finam ou MFD.ru pour importer l'historique des cotations ? Je ne peux pas le faire du tout. Je ne peux que l'enregistrer de txt à csv et c'est tout.
Vous n'avez rien à télécharger dans MetaTrader 5 :) - Dès que vous vous connectez au serveur de trading, l'historique des ticks réels est à votre disposition. Regardez versCopyTicks
Dans MetaTrader 5, vous n'avez pas besoin de télécharger quoi que ce soit :) - Dès que vous vous connectez au serveur de négociation, l'historique des ticks réels est à votre disposition. Regardez versCopyTicks
J'ai juste besoin de 10 ans d'actions russes. Mon courtier ne m'en donne pas autant et il est peu probable qu'il en trouve un.
Bonsoir, j'ai une question sur MQL5 si vous pouvez m'aider.
Je n'ai pas encore de manuels sur 5.
La question est la suivante .
#property indicator_level1 30 - J'ai défini le paramètre. Quand je charge l'indicateur sur le graphique. Je comprends.
Je change la ligne par la fonction ColorBuffer[], si la ligne descend en dessous de ce paramètre.
J'ai un problème ici. Si j'ouvre l'indicateur et que je change le paramètre pour un autre, même après avoir chargé l'indicateur, la ligne de niveau est placée là, mais l'indicateur la calcule en utilisant le paramètre qui a été défini auparavant, c'est-à-dire #property indicator_level1 30
Comment dois-je aborder ce niveau afin de le modifier au moment de l'exécution ?
- J'ai déjà essayé de vérifier le paramètre. Et recalculez toute la chaîne d'indicateurs.
Mais il ne le redessine toujours pas comme je le veux !
Au secours !
:)
Séquence des opérations
RSI.mqh
#property indicator_level1 30
#property indicator_level2 70
Dans le code de description de Calculaite. A la fin de la ligne où la ligne passe par For, j'ai ajouté la fonction pour changer la couleur de la ligne si elle est en dessous de ce niveau. ExtColorsBuffer [i] =0 ; si (ExtRSIBuffer [i]> indicator_level2& indicator_levelcolor!=NULL) { ExtColorsBuffer [i] =1 ; } si (ExtRSIBuffer [i]< indicator_level1& indicator_levelcolor!=NULL) { ExtColorsBuffer [i] =2 ;
Résultat attendu
La même chose que sur l'image, mais lorsque j'ouvre les paramètres et changer le niveau indicateur_niveau1 / 2 dans le processus d'utilisation de l'indicateur, il est prévu. L'indicateur est redessiné de sorte que si la ligne franchit un niveau, elle change de couleur. Mais pour moi, c'est au même niveau qu'avant :)
Bonsoir, j'ai une question sur MQL5 si vous pouvez m'aider.
Je n'ai pas encore de manuels sur 5.
La question est la suivante .
#property indicator_level1 30 - J'ai défini le paramètre. Quand je charge l'indicateur sur le graphique. Je comprends.
Je change la ligne par la fonction ColorBuffer[], si la ligne descend en dessous de ce paramètre.
J'ai un problème ici. Si j'ouvre l'indicateur et que je change le paramètre pour un autre, même après avoir chargé l'indicateur, la ligne de niveau est placée là, mais l'indicateur la calcule en utilisant le paramètre qui a été défini auparavant, c'est-à-dire #property indicator_level1 30
Comment dois-je aborder ce niveau afin de pouvoir le modifier au moment de l'exécution ?
- J'ai déjà essayé de vérifier le paramètre. Et recalculez toute la chaîne d'indicateurs.
Mais il ne le redessine toujours pas comme je le veux !
Au secours !
:)
Séquence des opérations
RSI.mqh
#property indicator_level1 30
#property indicator_level2 70
Dans le code de description de Calculaite. A la fin de la ligne où la ligne passe par For, j'ai ajouté la fonction pour changer la couleur de la ligne si elle est en dessous de ce niveau. ExtColorsBuffer [i] =0 ; si (ExtRSIBuffer [i]> indicator_level2& indicator_levelcolor!=NULL) { ExtColorsBuffer [i] =1 ; } si (ExtRSIBuffer [i]< indicator_level1& indicator_levelcolor!=NULL) { ExtColorsBuffer [i] =2 ;
Résultat attendu
Je vois la même chose que sur l'image mais lorsque j'ouvre les paramètres et que je change le niveau indicator_level1 / 2 dans le processus d'utilisation de l'indicateur, j'obtiens un redessin. L'indicateur est redessiné de sorte que si la ligne franchit un niveau - elle change de couleur. Mais pour moi, c'est au même niveau qu'avant :)
Plus d'informations
...
IndicatorSetInteger(INDICATOR_LEVELCOLOR,0,clrCrimson); // Поменяет цвет самого первого по счёту уровня на цвет CrimsonIndicatorSetInteger(INDICATOR_LEVELCOLOR,1,clrDeepSkyBlue); // Поменяет цвет второго по счёту уровня на цвет DeepSkyBlue
Igor, nous avons tous les deux tort. Je n'ai pas compris immédiatement la tâche...
En plus de la directive #property, vous pouvez définir le niveau de l'indicateur avec la fonction
IndicatorSetDouble(INDICATOR_LEVELVALUE,0,20);
Par conséquent, ce niveau doit être fixé dans les paramètres des indicateurs entrants. Dans ce cas, le niveau sera dessiné par la valeur spécifiée et il doit être modifié par cette valeur.
Print("Баланс на счёте = ",AccountInfoDouble(ACCOUNT_BALANCE));
printf("ACCOUNT_BALANCE = %G",AccountInfoDouble(ACCOUNT_BALANCE));
Si vous supprimez %G dans pintf, la valeur ne sera pas affichée, mais dans Print, elle est affichée sans %G.
De même, dans Print la valeur de la balance 10000.0 est affichée, mais dans printf seulement le nombre entier 10000.
Je suis plus intéressé par la différence entre Print et Printf et, surtout, par la raison pour laquelle il n'est pas affiché sans %G. Je n'ai rien compris au livre de référence.
Bonjour chers collègues, j'ai une question, j'essaie d'insérer un widget de mon signal dans la signature sur le forum "forex money", mais ils ont désactivé ou bloqué le HTML, y a-t-il un moyen de le refaire dans l'URL ? car ils sont normalement insérés et affichés.
Merci, comment puis-je écrire une boucle pour trouver le numéro de la barre qui croise les deux MAs lorsque les deux premiers points de l'algorithme sont respectés et qu'il y a des valeurs des deux MAs sur la première barre ?
/
.
Aha, tu n'as pas résolu le problème avec des tableaux après tout.
Note : La solution à travers les tableaux (copie des TROIS DERNIÈRES valeurs des indicateurs dans les tableaux First[], Second[] et Third[]) est lecroisement de deux iMAs- OnTick() :
Dans votre cas (une valeur à la fois), la boucle ressemblera à ceci :
MA1_curr - la valeur de l'indicateur MA1 sur la barre #i, MA1_prev - la valeur de l'indicateur MA1 sur la barre #i+1
MA2_curr - la valeur de l'indicateur MA2 sur la barre #i, MA2_prev - la valeur de l'indicateur MA2 sur la barre #i+1
Lorsque vous obtenez un croisement (le signal de la variable est soit "-1" soit "1") - la valeur de i sera le numéro de la barre où le croisement a eu lieu.
Il s'agit de l'algorithme le plus simple pour trouver le croisement, mais il n'est pas le plus précis.
Ouais, tu as décidé de ne pas utiliser les tableaux après tout...
Merci, votre autreMA Cross EA a été utilisé comme exemple.
Je veux l'entrer sur la troisième, cinquième ou... nième barre après le croisement.
Dans votre cas (obtention d'une valeur), le cycle ressemblera à ceci
Pourquoi n'y a-t-il pas de sortie de la boucle lorsqu'un croisement est trouvé ?
Ces conditions peuvent-elles être placées en dehors de la boucle ?
.
Bon après-midi. Pourriez-vous me dire dans quel format télécharger les données historiques du serveur Finam ou MFD.ru pour importer l' historique des cotations ? Je ne peux pas le faire du tout. Je ne peux que l'enregistrer de txt à csv et c'est tout.
Bon après-midi. Pourriez-vous me dire dans quel format télécharger les données historiques du serveur Finam ou MFD.ru pour importer l'historique des cotations ? Je ne peux pas le faire du tout. Je ne peux que l'enregistrer de txt à csv et c'est tout.
Vous n'avez rien à télécharger dans MetaTrader 5 :) - Dès que vous vous connectez au serveur de trading, l'historique des ticks réels est à votre disposition. Regardez versCopyTicks
Dans MetaTrader 5, vous n'avez pas besoin de télécharger quoi que ce soit :) - Dès que vous vous connectez au serveur de négociation, l'historique des ticks réels est à votre disposition. Regardez versCopyTicks
J'ai juste besoin de 10 ans d'actions russes. Mon courtier ne m'en donne pas autant et il est peu probable qu'il en trouve un.
Description du problème
Séquence des opérations
RSI.mqh
#property indicator_level1 30
#property indicator_level2 70
Dans le code de description de Calculaite. A la fin de la ligne où la ligne passe par For, j'ai ajouté la fonction pour changer la couleur de la ligne si elle est en dessous de ce niveau.
ExtColorsBuffer [i] =0 ;
si (ExtRSIBuffer [i]> indicator_level2& indicator_levelcolor!=NULL) {
ExtColorsBuffer [i] =1 ;
}
si (ExtRSIBuffer [i]< indicator_level1& indicator_levelcolor!=NULL) {
ExtColorsBuffer [i] =2 ;
Résultat attendu
La même chose que sur l'image, mais lorsque j'ouvre les paramètres et changer le niveau indicateur_niveau1 / 2 dans le processus d'utilisation de l'indicateur, il est prévu. L'indicateur est redessiné de sorte que si la ligne franchit un niveau, elle change de couleur. Mais pour moi, c'est au même niveau qu'avant :)
Plus d'informations
...
5.0 Build 1755
Description du problème
Séquence des opérations
RSI.mqh
#property indicator_level1 30
#property indicator_level2 70
Dans le code de description de Calculaite. A la fin de la ligne où la ligne passe par For, j'ai ajouté la fonction pour changer la couleur de la ligne si elle est en dessous de ce niveau.
ExtColorsBuffer [i] =0 ;
si (ExtRSIBuffer [i]> indicator_level2& indicator_levelcolor!=NULL) {
ExtColorsBuffer [i] =1 ;
}
si (ExtRSIBuffer [i]< indicator_level1& indicator_levelcolor!=NULL) {
ExtColorsBuffer [i] =2 ;
Résultat attendu
Je vois la même chose que sur l'image mais lorsque j'ouvre les paramètres et que je change le niveau indicator_level1 / 2 dans le processus d'utilisation de l'indicateur, j'obtiens un redessin. L'indicateur est redessiné de sorte que si la ligne franchit un niveau - elle change de couleur. Mais pour moi, c'est au même niveau qu'avant :)
Plus d'informations
...
5.0 Build 1755
Description du problème
Je voudrais savoir pourquoi je n'aime pas la réponse dans un sujet séparé.
Il s'agit du forum pour le trading, les systèmes de trading automatisés et les tests de stratégies.
J'ai besoin d'aide dans MQL5 #property indicator_level
Alexey Viktorov, 2018.01.31 09:06
Igor, nous avons tous les deux tort. Je n'ai pas compris immédiatement la tâche...
En plus de la directive #property, vous pouvez définir le niveau de l'indicateur avec la fonction
Par conséquent, ce niveau doit être fixé dans les paramètres des indicateurs entrants. Dans ce cas, le niveau sera dessiné par la valeur spécifiée et il doit être modifié par cette valeur.
Cas de test
Forum sur le trading, les systèmes de trading automatisé et les tests de stratégies de trading
Bugs, bugs, questions
Aleksey Rodionov, 2018.02.06 16:31
En voici une intéressante :
Si vous supprimez %G dans pintf, la valeur ne sera pas affichée, mais dans Print, elle est affichée sans %G.
De même, dans Print la valeur de la balance 10000.0 est affichée, mais dans printf seulement le nombre entier 10000.
Je suis plus intéressé par la différence entre Print et Printf et, surtout, par la raison pour laquelle il n'est pas affiché sans %G. Je n'ai rien compris au livre de référence.
Bonjour chers collègues, j'ai une question, j'essaie d'insérer un widget de mon signal dans la signature sur le forum "forex money", mais ils ont désactivé ou bloqué le HTML, y a-t-il un moyen de le refaire dans l'URL ? car ils sont normalement insérés et affichés.
Voici le code <iframe frameborder="0" width="220" height="140" src="https://www.mql5.com/ru/signals/widget/signal/328l?t=green"></iframe>