MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma
Merhaba.
Standart göstergede mümkün mü Fraktallar yapı çubuklarının sayısını yapılandırılabilir yap, yani 5'ten farklı mı?
Evet ise, nasıl yapılır.
Standart göstergede mümkün mü Fraktallar yapı çubuklarının sayısını yapılandırılabilir yap, yani 5'ten farklı mı?
Evet ise, nasıl yapılır.
Merhaba.
Standart göstergede mümkün mü Fraktallar yapı çubuklarının sayısını yapılandırılabilir yap, yani 5'ten farklı mı?
Evet ise, nasıl yapılır.
kod tabanında şu var https://www.mql5.com/en/search#!keyword=fractals&module=mql5_module_codebase
Teşekkür ederim. Buna sadece mq 4 https :// www üzerinde ihtiyacımız var. mql 5. com / ru / kod /1381
Şaşırtıcı bir şekilde MT4 editöründe derledim, çalışıyor, sadece işlemciyi yüklüyor, yüklenmemesi için neyi değiştirmeliyim?
#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);
}
//+------------------------------------------------------------------+
Teşekkür ederim. Buna sadece mq 4 https :// www üzerinde ihtiyacımız var. mql 5. com / ru / kod /1381
Düzeltmeler minimum düzeydedir:
//| 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);
}
//+------------------------------------------------------------------+
Doğru, biraz daha farklı yapardım, ama bu bir alışkanlık gücü ...
Hatta şöyle olabilir:
rightSide=(InpRightSide< 1 ? 1 :InpRightSide);
O zaman görüntülemek için oldukça komik fraktallar olacak ...
Düzeltmeler minimum düzeydedir:
Doğru, biraz daha farklı yapardım, ama bu bir alışkanlık gücü ...
Hatta şöyle olabilir:
rightSide=(InpRightSide< 1 ? 1 :InpRightSide);
O zaman görüntülemek için oldukça komik fraktallar olacak ...
Teşekkürler, bu
Ayrıca MT4 yardımı da yok, onun yerine ne koyabilirim?
Teşekkürler, bu
Ayrıca MT4 yardımı da yok, onun yerine ne koyabilirim?
Bu, " DRAW_ARROW Stili için Dikey Ok Ofseti"
Sıradışı bir şey yok.
Ofseti ayarlarda sabit olarak veya ATR değerine göre kolayca ayarlayabilirsiniz.
Ve bu satırları şöyle yapın:
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);
}
//---
Bu, " DRAW_ARROW Stili için Dikey Ok Ofseti"
Burada yorum yapılanları silin ve girilenleri girin.Hala yükleniyor.
Başka bir göstergeden arıyorum, terminal bir an için bile donuyor.
Başka ne yapılabilir?
Hala yükleniyor.
Başka bir göstergeden arıyorum, terminal bir an için bile donuyor.
Başka ne yapılabilir?
Başka bir göstergeden aramayın :)
Ya da nasıl yaptığını göster.

- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Bu başlıkta, yeni MQL4'te programlamayı gerçekten anlamak ve öğrenmek isteyenlere ve MQL5'e kolayca geçmek isteyenlere yardım etmeye başlamak istiyorum - diller çok benzer.
Burada görevleri, bunları çözmek için algoritmaları ve bu arada, MT için programlama ile ilgili soruları bir şekilde tartışmak mümkün olacak.
Umarım forumumuzun diğer deneyimli üyeleri sorunların çözümüne gelir ve konu herkesin ilgisini çeker.