Bom dia para todos. Há uma necessidade de analisar informações de um período de tempo sênior.
O sistema tem uma condição para construir um canal. É encontrar os preços máximo e mínimo para um certo número de barras. Eu a implementei usando o seguinte método:
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;}
}
}
Mas esta abordagem leva à análise das barras a partir do atual cronograma de trabalho M5. Preciso que os parâmetros bar1 e bar2 sejam tirados da M15
Tenho a sensação de que o problema está em algum lugar aqui dentro.
Max = High[iHighest(NULL, TimeFrameRZ, MODE_HIGH, bar2, bar1)]; //1. Ищем High и Low на отрезке [bar1, bar2].
Min = Low[iLowest(NULL, TimeFrameRZ, MODE_LOW, bar2, bar1)];
Você pode me dizer como emitir valores do indicador ZigZag em um EA? Os outros são produzidos escrevendo iMA, iStochastic, iWPR ... Como faço para calcular manualmente o ZigZag?
ZZuretc: Por favor, informe como emitir os valores do indicador ZigZag para o EA? Os outros são impressos pela iMA, iStochastic, iWPR ... Como faço para calcular manualmente o ZigZag?
Decidido a usar? Os valores do indicador ZigZag são zero em todos os lugares. Somente no topo o valor em ziguezague é igual ao preço no topo.
Você tem que atravessar as barras em loop. Veja o exemplo
funciona para mim - ele rastreia o movimento do mouse
Quero dizer, surolling).Bom dia para todos. Há uma necessidade de analisar informações de um período de tempo sênior.
O sistema tem uma condição para construir um canal. É encontrar os preços máximo e mínimo para um certo número de barras. Eu a implementei usando o seguinte método:
Mas esta abordagem leva à análise das barras a partir do atual cronograma de trabalho M5. Preciso que os parâmetros bar1 e bar2 sejam tirados da M15
Como implementar isto?
Tenho a sensação de que o problema está em algum lugar aqui dentro.
Quem deve dizer o quê?
Tenho a sensação de que o problema está em algum lugar aqui dentro.
Quem deve dizer o quê?
Pois bem, sim, especifique o prazo correto.
Sim, especifique o prazo correto
Então eu disse...
TimeFrameRZ = PERIOD_M15É uma variável externa.Eu declaro uma matriz e preencho os elementos.
Por que eu recebo uma declaração sem erro de tipo na segunda linha?
Eu declaro uma matriz e preencho os elementos.
Por que eu recebo uma declaração sem erro de tipo na segunda linha?
Escreva o código em OnTick() vazio e tudo funcionará.
Ou escrevaarray[0]=0,1; em vazio OnTick()
Eu declaro uma matriz e preencho os elementos.
Por que eu recebo uma declaração sem erro de tipo na segunda linha?
Você está declarando a matriz na área das variáveis globais?
Em seguida, declare-o imediatamente com valores (uma vez que você mesmo os preenche no código, de modo que eles são predefinidos), por exemplo:
... Ou preencha a matriz com valores no OnInit() ou na função, onde ela será preenchida.
Por favor, informe como emitir os valores do indicador ZigZag para o EA? Os outros são impressos pela iMA, iStochastic, iWPR ... Como faço para calcular manualmente o ZigZag?
Decidido a usar? Os valores do indicador ZigZag são zero em todos os lugares. Somente no topo o valor em ziguezague é igual ao preço no topo.
Você tem que atravessar as barras em loop. Veja o exemplo