Bonne journée à tous. Il est nécessaire d'analyser les informations à partir d'une période plus longue.
Le système a une condition pour construire un canal. Il s'agit de trouver les prix maximum et minimum pour un certain nombre de bars. Je l'ai mis en œuvre en utilisant la méthode suivante :
externENUM_TIMEFRAMES TimeFrameRZ = PERIOD_M15; //Период разворотной зоныexternENUM_TIMEFRAMES TimeFrameIn = PERIOD_M5; //Период точки входаexternint ATR_period = 14;
externint UpLineSell = 7;
externint DownLineSell = 7;
externint UpLineBuy = 7;
externint DownLineBuy = 7;
// Параметры разворотных свечейexternstring Comment2 = "---------------------------------Параметры разворотных свечей------------------------------------------";
externint Volotilnost = 20; // Диапазон цен для трех разворотных свечей (в пунктах)externint MaxLineSell = 3;
externint MaxLineBuy = 3;
bool SellPattern = false;
bool BuyPattern = false;
bool New_Bar = false;
double UpLine_Sell = 0;
double DownLine_Sell = 0;
double UpLine_Buy = 0;
double DownLine_Buy = 0;
int i = 0, j = 0;
int ULs = 0;
int DLs = 0;
int ULb = 0;
int DLb = 0;
double MassZone[2][10];
//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+intOnInit()
{
if(Digits == 3 || Digits ==5 )
{
Volotilnost *=10;
UpLineSell *= 10;
DownLineSell *= 10;
UpLineBuy*= 10;
DownLineBuy*= 10;
}
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+voidOnDeinit(constint reason)
{
}
//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+voidOnTick()
{
RazvorotZona();
if(SellPattern == true)
{
if(ObjectCreate(ChartID(),"UpLine_Sell"+IntegerToString(ULs),OBJ_HLINE,0,TimeCurrent(),UpLine_Sell))
{
ObjectSetInteger(ChartID(),"UpLine_Sell"+IntegerToString(ULs),OBJPROP_COLOR,clrOrange);//--- установим цвет прямоугольника ObjectSetInteger(ChartID(),"UpLine_Sell"+IntegerToString(ULs),OBJPROP_STYLE,STYLE_SOLID);//--- установим стиль линий прямоугольника ObjectSetInteger(ChartID(),"UpLine_Sell"+IntegerToString(ULs),OBJPROP_WIDTH,1);//--- установим толщину линий прямоугольника ObjectSetInteger(ChartID(),"UpLine_Sell"+IntegerToString(ULs),OBJPROP_BACK,false);//--- отобразим на переднем (false) или заднем (true) плане
}
if(ObjectCreate(ChartID(),"DownLine_Sell"+IntegerToString(DLs),OBJ_HLINE,0,TimeCurrent(),DownLine_Sell))
{
ObjectSetInteger(ChartID(),"DownLine_Sell"+IntegerToString(DLs),OBJPROP_COLOR,clrMagenta);//--- установим цвет прямоугольника ObjectSetInteger(ChartID(),"DownLine_Sell"+IntegerToString(DLs),OBJPROP_STYLE,STYLE_SOLID);//--- установим стиль линий прямоугольника ObjectSetInteger(ChartID(),"DownLine_Sell"+IntegerToString(DLs),OBJPROP_WIDTH,1);//--- установим толщину линий прямоугольника ObjectSetInteger(ChartID(),"DownLine_Sell"+IntegerToString(DLs),OBJPROP_BACK,false);//--- отобразим на переднем (false) или заднем (true) плане
}
ULs++;
DLs++;
if(DLs >= MaxLineSell && ULs >= MaxLineSell)
{
ObjectDelete(ChartID(),"UpLine_Sell"+IntegerToString(ULs - MaxLineSell));
ObjectDelete(ChartID(),"DownLine_Sell"+IntegerToString(DLs - MaxLineSell));
}
}
if(BuyPattern == true)
{
if(ObjectCreate(ChartID(),"UpLine_Buy"+IntegerToString(ULb),OBJ_HLINE,0,TimeCurrent(),UpLine_Buy))
{
ObjectSetInteger(ChartID(),"UpLine_Buy"+IntegerToString(ULb),OBJPROP_COLOR,clrDeepSkyBlue);//--- установим цвет прямоугольника ObjectSetInteger(ChartID(),"UpLine_Buy"+IntegerToString(ULb),OBJPROP_STYLE,STYLE_SOLID);//--- установим стиль линий прямоугольника ObjectSetInteger(ChartID(),"UpLine_Buy"+IntegerToString(ULb),OBJPROP_WIDTH,1);//--- установим толщину линий прямоугольника ObjectSetInteger(ChartID(),"UpLine_Buy"+IntegerToString(ULb),OBJPROP_BACK,false);//--- отобразим на переднем (false) или заднем (true) плане
}
if(ObjectCreate(ChartID(),"DownLine_Buy"+IntegerToString(DLb),OBJ_HLINE,0,TimeCurrent(),DownLine_Buy))
{
ObjectSetInteger(ChartID(),"DownLine_Buy"+IntegerToString(DLb),OBJPROP_COLOR,clrBrown);//--- установим цвет прямоугольника ObjectSetInteger(ChartID(),"DownLine_Buy"+IntegerToString(DLb),OBJPROP_STYLE,STYLE_SOLID);//--- установим стиль линий прямоугольника ObjectSetInteger(ChartID(),"DownLine_Buy"+IntegerToString(DLb),OBJPROP_WIDTH,1);//--- установим толщину линий прямоугольника ObjectSetInteger(ChartID(),"DownLine_Buy"+IntegerToString(DLb),OBJPROP_BACK,false);//--- отобразим на переднем (false) или заднем (true) плане
}
ULb++;
DLb++;
if(ULb >= MaxLineBuy && DLb >= MaxLineBuy)
{
ObjectDelete(ChartID(),"UpLine_Buy"+IntegerToString(ULb - MaxLineBuy));
ObjectDelete(ChartID(),"DownLine_Buy"+IntegerToString(DLb - MaxLineBuy));
}
}
}
//+------------------------------------------------------------------+// Функция определения нового бара |//+------------------------------------------------------------------+void Find_New_Bar()
{
datetime TimeBar0 = iTime(Symbol(),TimeFrameRZ,0);
staticdatetime New_Time=0; // Время текущего бара
New_Bar=false; // Нового бара нет if(New_Time != TimeBar0) // Сравниваем время
{
New_Time = TimeBar0; // Теперь время такое
New_Bar = true; // Поймался новый бар
}
}
//+------------------------------------------------------------------+// Функция определения разворотной зоны |//+------------------------------------------------------------------+void RazvorotZona()
{
Find_New_Bar();
double Open3= NormalizeDouble (iOpen(Symbol(), TimeFrameRZ,4),Digits);
double Close3 = NormalizeDouble (iClose(Symbol(), TimeFrameRZ,4),Digits);
double High3 = NormalizeDouble (iHigh(Symbol(), TimeFrameRZ,4),Digits);
double Low3 = NormalizeDouble (iLow(Symbol(), TimeFrameRZ,4),Digits);
//Параметры индикатора волотильности ATR для нахожденя относительно большой свечи перед перевернутым Молотомdouble ATR = iATR(Symbol(),TimeFrameRZ,ATR_period,1);
SellPattern = false;
BuyPattern = false;
int bar1 = 1;
int bar2 = 3;
double Max, Min;
Max = High[iHighest(NULL, TimeFrameRZ, MODE_HIGH, bar2, bar1)]; //1. Ищем High и Low на отрезке [bar1, bar2].
Min = Low[iLowest(NULL, TimeFrameRZ, MODE_LOW, bar2, bar1)];
if(NormalizeDouble((Max - Min) / Point, Digits) < Volotilnost &&
MathAbs(Close3-Open3) > 1.5*ATR)
{
if((Close3 > Open3) && New_Bar == true)
{
UpLine_Sell = Max;
DownLine_Sell = Min;
SellPattern = true;
Print ("Идентифицирован паттерн");
Print ("Максимальная цена "+DoubleToStr(Max));
Print ("Минимальная цена "+DoubleToStr(Min));
}
else {SellPattern = false;}
if((Close3 < Open3) && New_Bar == true)
{
UpLine_Buy = Max;
DownLine_Buy = Min;
BuyPattern = true;
Print ("Идентифицирован паттерн");
}
else {BuyPattern = false;}
}
}
Mais cette approche conduit à l'analyse des barres de l'horizon de travail actuel M5. J'ai besoin que les paramètres de la barre 1 et de la barre 2 soient extraits de la M15.
J'ai le sentiment que le problème est quelque part ici.
Max = High[iHighest(NULL, TimeFrameRZ, MODE_HIGH, bar2, bar1)]; //1. Ищем High и Low на отрезке [bar1, bar2].
Min = Low[iLowest(NULL, TimeFrameRZ, MODE_LOW, bar2, bar1)];
Pouvez-vous me dire comment sortir les valeurs de l'indicateur ZigZag dans un EA ? Les autres sont produites en écrivant iMA, iStochastic, iWPR ... Comment calculer manuellement le ZigZag ?
ZZuretc: Veuillez me conseiller sur la façon de sortir les valeurs de l'indicateur ZigZag dans l'EA. Les autres sont imprimés par iMA, iStochastic, iWPR ... Comment calculer manuellement le ZigZag ?
Vous avez décidé de l'utiliser ? Les valeurs de l'indicateur ZigZag sont nulles partout. Ce n'est que dans les sommets que la valeur du zigzag est égale au prix du sommet.
Tu dois passer par les barres en boucle. Voir exemple
Si vous n'avez pas de compte, veuillez vous inscrire
Autorisez l'utilisation de cookies pour vous connecter au site Web MQL5.com.
Veuillez activer les paramètres nécessaires dans votre navigateur, sinon vous ne pourrez pas vous connecter.
Vous êtes connecté. L'authentification à deux facteurs a été désactivée. Configurez-la à nouveau et scannez un nouveau code QR, ou continuez avec l'authentification à deux facteurs désactivée.
cela fonctionne pour moi - il suit le mouvement de la souris
Je veux dire surolling).Bonne journée à tous. Il est nécessaire d'analyser les informations à partir d'une période plus longue.
Le système a une condition pour construire un canal. Il s'agit de trouver les prix maximum et minimum pour un certain nombre de bars. Je l'ai mis en œuvre en utilisant la méthode suivante :
Mais cette approche conduit à l'analyse des barres de l'horizon de travail actuel M5. J'ai besoin que les paramètres de la barre 1 et de la barre 2 soient extraits de la M15.
Comment mettre cela en œuvre ?
J'ai le sentiment que le problème est quelque part ici.
Qui doit dire quoi ?
J'ai le sentiment que le problème est quelque part ici.
Qui doit dire quoi ?
Eh bien, oui, spécifiez le bon délai.
Oui, précisez le délai correct
Alors j'ai dit...
TimeFrameRZ = PERIOD_M15C'est une variable externe.Je déclare un tableau et je remplis les éléments.
Pourquoi ai-je une erreur de déclaration sans type sur la deuxième ligne ?
Je déclare un tableau et je remplis les éléments.
Pourquoi ai-je une erreur de déclaration sans type sur la deuxième ligne ?
Ecrivez le code dans void OnTick() et tout fonctionnera.
Ou écrirearray[0]=0.1; in void OnTick()
Je déclare un tableau et je remplis les éléments.
Pourquoi ai-je une erreur de déclaration sans type sur la deuxième ligne ?
Déclarez-vous le tableau dans la zone des variables globales ?
Puis déclarez-la en une fois avec des valeurs (puisque vous les remplissez vous-même dans le code, elles sont donc prédéfinies), par exemple :
... Ou remplissez le tableau avec des valeurs dans OnInit() ou dans la fonction, où il sera rempli.
Veuillez me conseiller sur la façon de sortir les valeurs de l'indicateur ZigZag dans l'EA. Les autres sont imprimés par iMA, iStochastic, iWPR ... Comment calculer manuellement le ZigZag ?
Vous avez décidé de l'utiliser ? Les valeurs de l'indicateur ZigZag sont nulles partout. Ce n'est que dans les sommets que la valeur du zigzag est égale au prix du sommet.
Tu dois passer par les barres en boucle. Voir exemple