Questions des débutants MQL5 MT5 MetaTrader 5 - page 721
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
Bonjour.
Aidez-moi, s'il vous plaît.
Signal lorsque les lignes de l'indicateur sont croisées sur la première barre.
La position s'ouvre correctement sur la première barre si le décalage ma_shiftT = 0 et ma_shiftD = 0. Si le décalage ma_shiftT = -1 et ma_shiftD = 1, la position s'ouvre sur la troisième ou la quatrième barre.
Que dois-je faire pour ouvrir une position si elle est croisée sur la première barre ?
input int ma_shiftD=1;
int iTEMAHandle; // хэндл индикатора iTEMA
int iDEMAHandle; // хэндл индикатора
double ma1Val[]; // динамические массивы для хранения численных значений для каждого бара
double maVal[]; //
//+------------------------------------------------------------------+
int OnInit()
{
//---
m_symbol.Name(Symbol());
//--- Получить хэндл индикатора iTEMA
iTEMAHandle=iTEMA(_Symbol,PERIOD_CURRENT,30,ma_shiftT,PRICE_CLOSE);;
//---Получить хэндл индикатора
iDEMAHandle=iDEMA(_Symbol,PERIOD_CURRENT,30,ma_shiftD,PRICE_CLOSE);;
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- освобождаем хэндлы индикаторов
IndicatorRelease(iTEMAHandle);
IndicatorRelease(iDEMAHandle);
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
//--- массив значений индикатора
ArraySetAsSeries(ma1Val,true);
//--- массив значений индикатора
ArraySetAsSeries(maVal,true);
if(CopyRates(_Symbol,_Period,0,5,mrate)<0)
{
Alert("Ошибка копирования исторических данных - ошибка:",GetLastError(),"!!");
return;
}
//====
if(CopyBuffer(iTEMAHandle,0,0,5,ma1Val)<0)
{
Alert("Ошибка копирования буферов индикатора TEMA - номер ошибки:",GetLastError(),"!!");
return;
}
if(CopyBuffer(iDEMAHandle,0,0,5,maVal)<0)
{
Alert("Ошибка копирования буферов индикатора DEMA - номер ошибки:",GetLastError());
return;
}
bool Sell_Condition_3=(maVal[2]<=ma1Val[2]);
bool Sell_Condition_4=(maVal[1]>ma1Val[1]);
if(Sell_Condition_3 && Sell_Condition_4)
{
// открываю позицию SELL
}
}
Premièrement : pourquoi copier 5 valeurs d'indicateur si vous n'en utilisez qu'une seule ?
Deuxièmement : La position des lignes indicatrices n'indique pas leur croisement.
Il suffit de copier 2 valeurs, en commençant par la première.
CopyBuffer(iTEMAHandle, 0, 1, 2, ma1Val)
CopyBuffer(iDEMAHandle, 0, 1, 2, maVal)
La seule façon de déterminer s'il y a une intersection est de comparer la position des lignes sur la deuxième barre et sur la première. POUR LA TÂCHE À ACCOMPLIR.
Il est nécessaire de considérer la direction de l'indexation des tableaux. Dans ce cas, nous obtiendrons
Si la condition est remplie, le fait de l'intersection est évident. La direction de l'intersection peut être déterminée par vous-même.
ps ; Oh, c'est vrai... Je n'ai pas regardé attentivement la définition du fait d'intersection. En tout cas, les valeurs supplémentaires ne sont pas nécessaires. C'est probablement ce qui vous a déconcerté.
Bonjour.
Aidez-moi, s'il vous plaît.
Signal lorsque les lignes de l'indicateur sont croisées sur la première barre.
La position s'ouvre correctement sur la première barre si le décalage ma_shiftT = 0 et ma_shiftD = 0. Si le décalage ma_shiftT = -1 et ma_shiftD = 1, la position s'ouvre sur la troisième ou la quatrième barre.
Que dois-je faire pour ouvrir une position lorsqu'il croise sur la première barre ?
input int ma_shiftD=1;
int iTEMAHandle; // хэндл индикатора iTEMA
int iDEMAHandle; // хэндл индикатора
double ma1Val[]; // динамические массивы для хранения численных значений для каждого бара
double maVal[]; //
//+------------------------------------------------------------------+
int OnInit()
{
//---
m_symbol.Name(Symbol());
//--- Получить хэндл индикатора iTEMA
iTEMAHandle=iTEMA(_Symbol,PERIOD_CURRENT,30,ma_shiftT,PRICE_CLOSE);;
//---Получить хэндл индикатора
iDEMAHandle=iDEMA(_Symbol,PERIOD_CURRENT,30,ma_shiftD,PRICE_CLOSE);;
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- освобождаем хэндлы индикаторов
IndicatorRelease(iTEMAHandle);
IndicatorRelease(iDEMAHandle);
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
//--- массив значений индикатора
ArraySetAsSeries(ma1Val,true);
//--- массив значений индикатора
ArraySetAsSeries(maVal,true);
if(CopyRates(_Symbol,_Period,0,5,mrate)<0)
{
Alert("Ошибка копирования исторических данных - ошибка:",GetLastError(),"!!");
return;
}
//====
if(CopyBuffer(iTEMAHandle,0,0,5,ma1Val)<0)
{
Alert("Ошибка копирования буферов индикатора TEMA - номер ошибки:",GetLastError(),"!!");
return;
}
if(CopyBuffer(iDEMAHandle,0,0,5,maVal)<0)
{
Alert("Ошибка копирования буферов индикатора DEMA - номер ошибки:",GetLastError());
return;
}
bool Sell_Condition_3=(maVal[2]<=ma1Val[2]);
bool Sell_Condition_4=(maVal[1]>ma1Val[1]);
if(Sell_Condition_3 && Sell_Condition_4)
{
// открываю позицию SELL
}
}
J'ai joint un exemple pour vous aider. Dans cet exemple, je ne copie pas plusieurs valeurs, mais une seule à la fois. En comparant ce que mon exemple renvoie et ce que votre exemple renvoie, vous devriez voir - comment l'indexation se produit dans les tableaux de votre exemple (c'est-à-dire que vous devriez comprendre où un élément de la barre 1 est stocké dans le tableau et où un élément de la barre 2 est stocké).
Comment travailler avec mon exemple :
J'ai créé et enregistré un modèle de graphique spécifiquement pour les paramètres de l'exemple avec le même nom que l'exemple - "Two iMA Shift minus shift plus.tpl". Enregistrez ce modèle dans le dossier \MQL5\Profiles\Templates de votre terminal. Maintenant, lorsque vous exécutez le testeur, le testeur prendra ce modèle et vous aurez une belle image dans le testeur :
Lorsqu'il détecte une intersection, le testeur s'arrête à la directive
if(ma_one_1<ma_two_1 && ma_one_2>ma_two_2)
{
string text="ma_one_1 = "+DoubleToString(ma_one_1,Digits()+1)+"\n"+
"ma_two_1 = "+DoubleToString(ma_two_1,Digits()+1)+"\n"+
"ma_one_2 = "+DoubleToString(ma_one_2,Digits()+1)+"\n"+
"ma_two_2 = "+DoubleToString(ma_two_2,Digits()+1);
Comment(text);
DebugBreak();
}
et vous pourrez dans le testeur, en utilisant "Crosshair", vous déplacer sur les barres et voir les valeurs des indicateurs sur la barre 1 et la barre 2 (pré-inclure la "fenêtre de données").
Bonjour !
J'ai une question sur le spread du FOREX.
Lorsque l'écart se creuse, est-ce que le ASK augmente et le BID diminue ou est-ce que les deux bougent symétriquement dans des directions différentes ?
Bonjour !
J'ai une question sur le spread du FOREX.
Lorsque l'écart se creuse, est-ce que ASK augmente, BID diminue ou est-ce que les deux bougent symétriquement dans des directions différentes ?
Cela peut être tout ce que vous voulez. Une chose demeure inchangée : le spread est la différence entre le cours vendeur et le cours acheteur.
Ai-je bien compris que lorsque l'écart commence à se réduire, ils peuvent se rapprocher l'un de l'autre en même temps ?
"Une chose reste la même : le spread est la différence entre le prix Ask et le prix Bid".
Il n'y a pas d'autres lois.
"Une chose reste la même : le spread est la différence entre le prix Ask et le prix Bid".
Il n'y a pas d'autres lois.
Que pensez-vous, si j'ai un achat et que le spread commence à s'élargir, Ask monte et Bid descend, dois-je fermer la position ou attendre que Ask descende ?
Un achat (position BUY) est fermé au prix de l'offre.
Une autre question que vous vous posez probablement est "que faire en période de très forte volatilité ?". La réponse est que chacun décide différemment.
Un achat (position BUY) est fermé au prix de l'offre.
Une autre question que vous vous posez probablement est "que faire en période de très forte volatilité ?". La réponse est que chacun décide différemment.
Un achat (position BUY) est fermé au prix de l'offre.
Une autre question que vous vous posez probablement est "que faire en période de très forte volatilité ?". La réponse est que chacun décide différemment.