표준 지표 프랙탈 에서 가능합니까? 구성 막대의 수를 5와 다르게 구성할 수 있습니까?
그렇다면 방법.
안녕하세요.
표준 지표 프랙탈 에서 가능합니까? 구성 막대의 수를 5와 다르게 구성할 수 있습니까?
그렇다면 방법.
코드베이스에는 https://www.mql5.com/en/search#!keyword=fractals&module=mql5_module_codebase 가 있습니다.
고맙습니다. 이것은 mq 4 https :// www 에서만 필요합니다. mql 5. com / ru / 코드 /1381
놀랍게도 MT4 편집기에서 컴파일했는데 작동하고 프로세서만 로드합니다. 로드되지 않도록 무엇을 변경해야 합니까?
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots 2
//--- plot UpFractals
#property indicator_label1 "Up Fractals"
#property indicator_type1 DRAW_ARROW
#property indicator_color1 clrDodgerBlue
#property indicator_style1 STYLE_SOLID
#property indicator_width1 1
//--- plot DnFractals
#property indicator_label2 "Down Fractals"
#property indicator_type2 DRAW_ARROW
#property indicator_color2 clrTomato
#property indicator_style2 STYLE_SOLID
#property indicator_width2 1
//--- input parameters
input int InpLeftSide = 3 ; // Кол-во баров слева от фрактала
input int InpRightSide = 3 ; // Кол-во баров справа от фрактала
//--- indicator buffers
double UpFractalsBuffer[];
double DnFractalsBuffer[];
//--- global variables
int minRequiredBars;
int leftSide, rightSide;
int maxSide;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit () {
//---
if ( InpLeftSide < 1 ) {
leftSide = 2 ;
printf ( "Неккоретно указан параметр \"Кол-во баров слева от фрактала\": %d. Будет использовано значение: %d." ,
InpLeftSide, leftSide);
} else {
leftSide = InpLeftSide;
}
if ( InpRightSide < 1 ) {
rightSide = 2 ;
printf ( "Неккоретно указан параметр \"Кол-во баров справа от фрактала\": %d. Будет использовано значение: %d." ,
InpRightSide, rightSide);
} else {
rightSide = InpRightSide;
}
//---
minRequiredBars = leftSide + rightSide + 1 ;
maxSide = int ( MathMax (leftSide, rightSide));
//---
SetIndexBuffer ( 0 , UpFractalsBuffer, INDICATOR_DATA );
SetIndexBuffer ( 1 , DnFractalsBuffer, INDICATOR_DATA );
//---
PlotIndexSetInteger ( 0 , PLOT_ARROW , 217 );
PlotIndexSetInteger ( 1 , PLOT_ARROW , 218 );
//---
PlotIndexSetInteger ( 0 , PLOT_ARROW_SHIFT , - 10 );
PlotIndexSetInteger ( 1 , PLOT_ARROW_SHIFT , 10 );
//---
for ( int i = 0 ; i < 2 ; i++ ) {
PlotIndexSetInteger (i, PLOT_DRAW_BEGIN , minRequiredBars);
PlotIndexSetDouble (i, PLOT_EMPTY_VALUE , 0.0 );
}
//---
IndicatorSetInteger ( INDICATOR_DIGITS , _Digits );
//---
IndicatorSetString ( INDICATOR_SHORTNAME , "ffra (" +( string )leftSide+ ", " +( string )rightSide+ ")" );
//---
return ( 0 );
}
//+------------------------------------------------------------------+
//| Check if is Up Fractal function |
//+------------------------------------------------------------------+
bool isUpFractal( int bar, int max, const double & High []) {
//---
for ( int i = 1 ; i <= max; i++ ) {
if ( i <= leftSide && High [bar] < High [bar-i] ) {
return ( false );
}
if ( i <= rightSide && High [bar] <= High [bar+i] ) {
return ( false );
}
}
//---
return ( true );
}
//+------------------------------------------------------------------+
//| Check if is Down Fractal function |
//+------------------------------------------------------------------+
bool isDnFractal( int bar, int max, const double & Low []) {
//---
for ( int i = 1 ; i <= max; i++ ) {
if ( i <= leftSide && Low [bar] > Low [bar-i] ) {
return ( false );
}
if ( i <= rightSide && Low [bar] >= Low [bar+i] ) {
return ( false );
}
}
//---
return ( true );
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int OnCalculate ( const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
//---
int startBar, lastBar;
//---
if ( rates_total < minRequiredBars ) {
Print ( "Недостаточно данных для расчёта" );
return ( 0 );
}
//---
if (prev_calculated < minRequiredBars) {
startBar = leftSide;
ArrayInitialize (UpFractalsBuffer, 0.0 );
ArrayInitialize (DnFractalsBuffer, 0.0 );
}
else {
startBar = rates_total - minRequiredBars;
}
//---
lastBar = rates_total - rightSide;
for ( int bar = startBar; bar < lastBar && ! IsStopped (); bar++ ) {
//---
if ( isUpFractal(bar, maxSide, high) ) {
UpFractalsBuffer[bar] = high[bar];
} else {
UpFractalsBuffer[bar] = 0.0 ;
}
//---
if ( isDnFractal(bar, maxSide, low) ) {
DnFractalsBuffer[bar] = low[bar];
} else {
DnFractalsBuffer[bar] = 0.0 ;
}
}
//--- return value of prev_calculated for next call
return (rates_total);
}
//+------------------------------------------------------------------+
고맙습니다. 이것은 mq 4 https :// www 에서만 필요합니다. mql 5. com / ru / 코드 /1381
수정 사항은 최소화됩니다.
//| iXBarsFractals.mq4 |
//| Copyright 2011, Rone. redaction 2016 by artmedia70 |
//| rone.sergey@gmail.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2011, Rone."
#property link "rone.sergey@gmail.com"
#property version "1.00"
#property description "Индикатор позволяет отдельно указывать кол-во баров слева и справа от фрактала. Хорошо подходит "
#property description "для определения как локальных, так и глобальных экстремумов."
#property strict
//--- indicator buffers
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots 2
//--- plot UpFractals
#property indicator_label1 "Up Fractals"
#property indicator_type1 DRAW_ARROW
#property indicator_color1 clrDodgerBlue
#property indicator_style1 STYLE_SOLID
#property indicator_width1 1
//--- plot DnFractals
#property indicator_label2 "Down Fractals"
#property indicator_type2 DRAW_ARROW
#property indicator_color2 clrTomato
#property indicator_style2 STYLE_SOLID
#property indicator_width2 1
//--- input parameters
input int InpLeftSide = 3 ; // Кол-во баров слева от фрактала
input int InpRightSide = 3 ; // Кол-во баров справа от фрактала
//--- indicator buffers
double UpFractalsBuffer[];
double DnFractalsBuffer[];
//--- global variables
int minRequiredBars;
int leftSide,rightSide;
int maxSide;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit ()
{
//---
leftSide=(InpLeftSide< 2 ? 2 :InpLeftSide);
rightSide=(InpRightSide< 2 ? 2 :InpRightSide);
//---
minRequiredBars=leftSide+rightSide+ 1 ;
maxSide= int ( fmax (leftSide,rightSide));
//---
SetIndexBuffer ( 0 ,UpFractalsBuffer, INDICATOR_DATA );
SetIndexBuffer ( 1 ,DnFractalsBuffer, INDICATOR_DATA );
//---
SetIndexArrow ( 0 , 217 );
SetIndexArrow ( 1 , 218 );
//PlotIndexSetInteger(0,PLOT_ARROW,217);
//PlotIndexSetInteger(1,PLOT_ARROW,218);
//---
PlotIndexSetInteger ( 0 , PLOT_ARROW_SHIFT ,- 10 );
PlotIndexSetInteger ( 1 , PLOT_ARROW_SHIFT , 10 );
//---
for ( int i= 0 ; i< 2 ; i++) {
PlotIndexSetInteger (i, PLOT_DRAW_BEGIN ,minRequiredBars);
PlotIndexSetDouble (i, PLOT_EMPTY_VALUE , 0.0 );
}
//---
IndicatorSetInteger ( INDICATOR_DIGITS , _Digits );
//---
IndicatorSetString ( INDICATOR_SHORTNAME , "XBarsFractals(" +( string )leftSide+ ", " +( string )rightSide+ ")" );
//---
return ( 0 );
}
//+------------------------------------------------------------------+
//| Check if is Up Fractal function |
//+------------------------------------------------------------------+
bool isUpFractal( int bar, int max, const double &high[])
{
//---
for ( int i= 1 ; i<=max; i++) {
if (i<=leftSide && high[bar]<high[bar-i]) return ( false );
if (i<=rightSide && high[bar]<=high[bar+i]) return ( false );
}
//---
return ( true );
}
//+------------------------------------------------------------------+
//| Check if is Down Fractal function |
//+------------------------------------------------------------------+
bool isDnFractal( int bar, int max, const double &low[])
{
//---
for ( int i= 1 ; i<=max; i++) {
if (i<=leftSide && low[bar]>low[bar-i]) return ( false );
if (i<=rightSide && low[bar]>=low[bar+i]) return ( false );
}
//---
return ( true );
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int OnCalculate ( const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
//---
int startBar,lastBar;
//---
if (rates_total<minRequiredBars) return ( 0 );
//---
if (prev_calculated<minRequiredBars) {
startBar=leftSide;
ArrayInitialize (UpFractalsBuffer, 0.0 );
ArrayInitialize (DnFractalsBuffer, 0.0 );
}
else startBar=rates_total-minRequiredBars;
//---
lastBar=rates_total-rightSide;
for ( int bar=startBar; bar<lastBar && ! IsStopped (); bar++) {
//---
if (isUpFractal(bar,maxSide,high)) UpFractalsBuffer[bar]=high[bar];
else UpFractalsBuffer[bar]= 0.0 ;
//---
if (isDnFractal(bar,maxSide,low)) DnFractalsBuffer[bar]=low[bar];
else DnFractalsBuffer[bar]= 0.0 ;
}
//--- return value of prev_calculated for next call
return (rates_total);
}
//+------------------------------------------------------------------+
사실 좀 다르게 했으면 좋았을텐데 습관의 힘...
다음과 같이 가능합니다.
rightSide=(InpRightSide< 1 ? 1 :InpRightSide);
그러면 표시하는 매우 재미있는 도형이 될 것입니다 ...
수정 사항이 최소화됩니다.
사실 좀 다르게 했으면 좋았을텐데 습관의 힘...
다음과 같이 가능합니다.
rightSide=(InpRightSide< 1 ? 1 :InpRightSide);
그러면 표시하는 매우 재미있는 도형이 될 것입니다 ...
고마워, 이것이다
MT4 도움말도 없습니다. 무엇으로 대체할 수 있나요?
고마워, 이것이다
MT4 도움말도 없습니다. 무엇으로 대체할 수 있나요?
" DRAW_ARROW 스타일 에 대한 수직 화살표 오프셋"입니다.
평범한 것은 없습니다.
설정에서 하드 또는 ATR 값으로 오프셋을 간단히 설정할 수 있습니다.
그리고 다음과 같이 행하십시오.
for ( int i= 0 ; i< 2 ; i++) {
SetIndexDrawBegin (i,minRequiredBars);
SetIndexEmptyValue (i, 0 );
//PlotIndexSetInteger(i,PLOT_DRAW_BEGIN,minRequiredBars);
//PlotIndexSetDouble(i,PLOT_EMPTY_VALUE,0.0);
}
//---
여전히 로드됩니다.
다른 표시기에서 전화를 걸어도 단말기가 잠시 멈춥니다.
다른 무엇을 할 수 있습니까?
여전히 로드됩니다.
다른 표시기에서 전화를 걸어도 단말기가 잠시 멈춥니다.
다른 무엇을 할 수 있습니까?
다른 표시기에서 전화하지 마세요 :)
또는 당신이 그것을하는 방법을 보여줍니다.
이 스레드에서 저는 새로운 MQL4에서 프로그래밍을 정말로 이해하고 배우고 싶어하고 MQL5로 쉽게 전환하고자 하는 사람들을 돕기 시작하고 싶습니다. 언어는 매우 유사합니다.
여기에서 작업, 이를 해결하기 위한 알고리즘, 그리고 어떤 방식으로든 MT용 프로그래밍과 관련된 모든 질문에 대해 논의할 수 있습니다.
포럼의 다른 경험 많은 회원이 문제 해결에 참여하고 스레드가 모든 사람의 관심을 끌 수 있기를 바랍니다.