MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 34
Alım-satım fırsatlarını kaçırıyorsunuz:
- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Kayıt
Giriş yap
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Hesabınız yoksa, lütfen kaydolun
Tüm göstergenizi gösterin - orada neyin yanlış olduğunu görelim.
Teşekkür ederim.
İşte burada
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 LawnGreen
#property indicator_color2 DeepPink
#property indicator_width1 1
#property indicator_width2 1
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
extern string Stochastic = "Configure Stochastic Settings" ;
extern int TimeFrame1= 1 ;
extern int KPeriod = 5 ;
extern int DPeriod = 3 ;
extern int Slowing = 3 ;
extern int OverBought = 80 ;
extern int OverSold = 20 ;
extern int TimeFrame2= 5 ;
extern int KPeriod1 = 5 ;
extern int DPeriod1 = 3 ;
extern int Slowing1 = 3 ;
extern int OverBought1 = 55 ;
extern int OverSold1 = 45 ;
extern string Alerts = "Configure Alerts" ;
extern bool PopUpAlert = true ; //Popup Alert
extern bool EmailAlert = true ; //Email Alert
extern bool PushAlert = true ; //Push Notifications Alert
// UP and DOWN Buffers
double UP[];
double DOWN[];
// Distance of arrows from the high or low of a bar
int distance = 3 ;
double MyPoint;
datetime CTime;
int OnInit ()
{
//--- indicator buffers mapping
//UP Arrow Buffer
SetIndexEmptyValue ( 0 , 0.0 );
SetIndexStyle ( 0 , DRAW_ARROW , 0 , EMPTY );
SetIndexArrow ( 0 , 233 );
SetIndexBuffer ( 0 ,UP);
//DOWN Arrow Buffer
SetIndexEmptyValue ( 1 , 0.0 );
SetIndexStyle ( 1 , DRAW_ARROW , 0 , EMPTY );
SetIndexArrow ( 1 , 234 );
SetIndexBuffer ( 1 ,DOWN);
//Auto Adjustment for broker digits
if ( Digits ()== 5 || Digits ()== 3 ){MyPoint= Point * 10 ;} else {MyPoint= Point ;}
CTime= Time [ 0 ];
//---
return ( INIT_SUCCEEDED );
}
void OnDeinit ( const int reason)
{
//--- delete an object from a chart
Comment ( "" );
}
//+------------------------------------------------------------------+
//| 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[])
{
//---
Comment ( "" );
int limit = rates_total;
int count=prev_calculated;
for ( int i=limit-count; i>= 1 ;i--)
{
//Getting Stochastic buffer values using the iCustom function
double Stoch1 = iStochastic ( NULL ,TimeFrame1,KPeriod,DPeriod,Slowing, MODE_SMA , 0 , MODE_MAIN ,i);
double Stoch2 = iStochastic ( NULL ,TimeFrame1,KPeriod,DPeriod,Slowing, MODE_SMA , 0 , MODE_MAIN ,i+ 1 );
double Stoch50_1 = iStochastic ( NULL ,TimeFrame2,KPeriod1,DPeriod1,Slowing1, MODE_SMA , 0 , MODE_MAIN ,i);
double Stoch50_2 = iStochastic ( NULL ,TimeFrame2,KPeriod1,DPeriod1,Slowing1, MODE_SMA , 0 , MODE_MAIN ,i+ 1 );
if (Stoch1> 20 && Stoch2< 20 &&Stoch50_1> 50 &&Stoch50_1>Stoch50_2)
{
UP[i]= Low [i]-distance*MyPoint;
}
if (Stoch1< 80 && Stoch2> 80 &&Stoch50_1< 50 &&Stoch50_1<Stoch50_2)
{
DOWN[i]= High [i]+distance*MyPoint;
}
}
//--- return value of prev_calculated for next call
return (rates_total);
}
//+------------------------------------------------------------------+
Teşekkür ederim.
İşte burada
...
açıklığa kavuşturacağım.
M1 periyodunda gösterge çizgisi 20. seviyeyi geçtiyse ve M5 periyodunda gösterge çizgisi yukarı doğru, 50. seviyenin üzerindeyse yukarı ok koymak istiyorum.
Daha düşük olanda olmak üzere daha yüksek zaman diliminden değerleri nasıl alacağımızı görelim:
//| iTwoStoch.mq4 |
//| Copyright 2016, Artem A. Trishkin, Skype artmedia70 |
//| https://login.mql5.com/ru/users/artmedia70 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, Artem A. Trishkin, Skype artmedia70"
#property link "https://login.mql5.com/ru/users/artmedia70"
#property version "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots 2
//--- plot UP
#property indicator_label1 "UP"
#property indicator_type1 DRAW_ARROW
#property indicator_color1 clrLawnGreen
#property indicator_style1 STYLE_SOLID
#property indicator_width1 1
//--- plot DN
#property indicator_label2 "DN"
#property indicator_type2 DRAW_ARROW
#property indicator_color2 clrDeepPink
#property indicator_style2 STYLE_SOLID
#property indicator_width2 1
//--- enums
enum enumYN
{
enYes= 1 , // Да
enNo= 0 , // Нет
};
//--- input parameters
extern string Stochastic1 = "Параметры стохастика 1" ;
input ENUM_TIMEFRAMES TimeFrame1 = PERIOD_M1 ; // Таймфрейм
input int KPeriod1 = 5 ; // Период %K
input int DPeriod1 = 3 ; // Период %D
input int Slowing1 = 3 ; // Замедление
input double OverBought1 = 80 ; // Уровень перекупленности
input double OverSold1 = 20 ; // Уровень перепроданности
extern string Stochastic2 = "Параметры стохастика 2" ;
input ENUM_TIMEFRAMES TimeFrame2 = PERIOD_M5 ; // Таймфрейм
input int KPeriod2 = 5 ; // Период %K
input int DPeriod2 = 3 ; // Период %D
input int Slowing2 = 3 ; // Замедление
input double OverBought2 = 55 ; // Уровень перекупленности
input double OverSold2 = 45 ; // Уровень перепроданности
extern string Alerts = "Configure Alerts" ;
input enumYN UsePopUpAlert = enYes; // Popup Alert
input enumYN UseEmailAlert = enYes; // Email Alert
input enumYN UsePushAlert = enYes; // Push Notifications Alert
//--- indicator buffers
double BufferUP[];
double BufferDN[];
//--- global variables
int kperiod1; // Период %K стох.1
int dperiod1; // Период %D стох.1
int slowing1; // Замедление стох.1
double overBought1; // Уровень перекупленности стох.1
double overSold1; // Уровень перепроданности стох.1
//---
int kperiod2; // Период %K стох.2
int dperiod2; // Период %D стох.2
int slowing2; // Замедление стох.2
double overBought2; // Уровень перекупленности стох.2
double overSold2; // Уровень перепроданности стох.2
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit ()
{
//--- indicator buffers mapping
SetIndexBuffer ( 0 ,BufferUP);
SetIndexBuffer ( 1 ,BufferDN);
//--- setting a code from the Wingdings charset as the property of PLOT_ARROW
SetIndexArrow ( 0 , 233 );
SetIndexArrow ( 1 , 234 );
//---
kperiod1=(KPeriod1< 1 ? 1 :KPeriod1);
kperiod2=(KPeriod2< 1 ? 1 :KPeriod2);
dperiod1=(DPeriod1< 1 ? 1 :DPeriod1);
dperiod2=(DPeriod2< 1 ? 1 :DPeriod2);
slowing1=(Slowing1< 1 ? 1 :Slowing1);
slowing2=(Slowing2< 1 ? 1 :Slowing2);
//---
overBought1=(OverBought1> 100.0 ? 100.0 :OverBought1< 0.1 ? 0.1 :OverBought1);
overSold1=(OverSold1< 0 ? 0 :OverSold1> 99.9 ? 99.9 :OverSold1);
if (overBought1<=overSold1) overBought1=overSold1+ 0.1 ;
if (overSold1>=overBought1) overSold1=overBought1- 0.1 ;
//---
overBought2=(OverBought2> 100.0 ? 100.0 :OverBought2< 0.1 ? 0.1 :OverBought2);
overSold2=(OverSold2< 0 ? 0 :OverSold2> 99.9 ? 99.9 :OverSold2);
if (overBought2<=overSold2) overBought2=overSold2+ 0.1 ;
if (overSold2>=overBought2) overSold2=overBought2- 0.1 ;
//---
return ( INIT_SUCCEEDED );
}
//+------------------------------------------------------------------+
//| 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[])
{
//---
if (rates_total< 2 ) return ( 0 );
int limit=rates_total-prev_calculated;
if (limit> 1 ) {
limit=rates_total- 2 ;
ArrayInitialize (BufferUP, EMPTY_VALUE );
ArrayInitialize (BufferDN, EMPTY_VALUE );
}
for ( int i=limit; i>= 0 ; i--) {
int bar_sto2_0= iBarShift ( Symbol (),TimeFrame2, iTime ( Symbol (),TimeFrame2,i));
int bar_sto2_1= iBarShift ( Symbol (),TimeFrame2, iTime ( Symbol (),TimeFrame2,i+ 1 ));
double sto1_0= iStochastic ( Symbol (),TimeFrame1,kperiod1,dperiod1,slowing1, MODE_SMA , STO_LOWHIGH , MODE_MAIN ,i);
double sto1_1= iStochastic ( Symbol (),TimeFrame1,kperiod1,dperiod1,slowing1, MODE_SMA , STO_LOWHIGH , MODE_MAIN ,i+ 1 );
double sto2_0= iStochastic ( Symbol (),TimeFrame2,kperiod2,dperiod2,slowing2, MODE_SMA , STO_LOWHIGH , MODE_MAIN ,bar_sto2_0);
double sto2_1= iStochastic ( Symbol (),TimeFrame2,kperiod2,dperiod2,slowing2, MODE_SMA , STO_LOWHIGH , MODE_MAIN ,bar_sto2_1);
Comment (
"\n" ,
"Stoch " , EnumToString (TimeFrame1),
", бар " ,(i+ 1 ), " > время: " , TimeToString (time[i+ 1 ], TIME_MINUTES ), ", значение: " , DoubleToString (sto1_1, Digits ()),
"; бар " ,i, " > время: " , TimeToString (time[i], TIME_MINUTES ), ", значение: " , DoubleToString (sto1_0, Digits ()), "\n" ,
//---
"Stoch " , EnumToString (TimeFrame2),
", бар " ,bar_sto2_1, " > время: " , TimeToString ( iTime ( Symbol (),TimeFrame2,bar_sto2_1), TIME_MINUTES ), ", значение: " , DoubleToString (sto2_1, Digits ()),
"; бар " ,bar_sto2_0, " > время: " , TimeToString ( iTime ( Symbol (),TimeFrame2,bar_sto2_0), TIME_MINUTES ), ", значение: " , DoubleToString (sto2_0, Digits ())
);
}
//--- return value of prev_calculated for next call
return (rates_total);
}
//+------------------------------------------------------------------+
Ardından istediğiniz mantığı oluşturmak için Comment() yerine deneyin.
Bakalım...
Daha düşük olanda olmak üzere daha yüksek zaman diliminden değerleri nasıl alacağımızı görelim:
Ardından istediğiniz mantığı oluşturmak için Comment() yerine deneyin.
Bakalım...
Teşekkürler, hepsi iyi çalıştı)
Uzman Danışmanda, göstergeyi çağırırken, sadece istenen zaman diliminin sayısını belirtmek ve göstergede bir vardiya ile “dans etmek” yeterlidir. Bununla ilgili daha fazla bilgiyi nerede okuyabilirim?
Teşekkürler, hepsi iyi çalıştı)
Uzman Danışmanda, göstergeyi çağırırken, sadece istenen zaman diliminin sayısını belirtmek ve göstergede bir vardiya ile “dans etmek” yeterlidir. Bununla ilgili daha fazla bilgiyi nerede okuyabilirim?
Hiçbir yerde okumadım - size söylemeyeceğim bile.
Kendiniz için hayal edin: M1'deki çubuklar arasında bir döngüye giriyorsunuz. Döngü indeksi i tarafından referans verilen çubuk numarasından gösterge değerlerini alın.
Üstteki başlıktaki tabloda M1 döngü indeksi, aşağıda M1 indeksi tarafından referans verilen çubuk zamanının değeri yer almaktadır.
En altta M5 döngü indeksi bulunur, yukarıda M5 indeksi tarafından referans verilen çubuk zamanının değeri bulunur.
İşte o zaman döngünün geçtiği mevcut TF'den indeks değerini iCustom() işlevine ilettiğinizde, ardından indekse göre en yüksek TF'den gösterge değerlerini alırsınız. Ve indeks, tablodan da görülebileceği gibi, ihtiyacınız olan çubuğa atıfta bulunmaz.
Ve Expert Advisors'da yapmanız gereken de bu, aksi halde değerleri beklenen çubuktan değil, doğru aldığınızı zannediyorsunuz. Doğru anladılar, ama yanlış bardan. Bunun bilinmesi ve dikkate alınması gerekir.
Yani, çok zamanlı veri alırken, zamana güvenmeniz ve istenen TF'deki çubuk numarasına yeniden hesaplamanız gerekir.
Artyom, lütfen bana da yardım et, göstergelerle ilgili sorunlarım var.
Bu tür yapıları bulmanız ve üzerlerine oklar koymanız gerekir, danışmandaki işlevler çalışır ve basitçe bağlanır, peki, bu anlaşılabilir - orada sadece mevcut değerlere ihtiyaç var, ancak bunları göstergeye nasıl aktaracağınızı tarihe maçlar çiziyor...?
Koşullar eşleştiğinde hemen mum üzerine oklar çizin: Yüksek[1] ve Düşük[1]
//| iTwo.mq4 |
//| Copyright 2016, Artem A. Trishkin, Skype artmedia70 |
//| https://login.mql5.com/ru/users/artmedia70 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, Artem A. Trishkin, Skype artmedia70"
#property link "https://login.mql5.com/ru/users/artmedia70"
#property version "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots 2
//--- plot UP
#property indicator_label1 "UP"
#property indicator_type1 DRAW_ARROW
#property indicator_color1 clrLawnGreen
#property indicator_style1 STYLE_SOLID
#property indicator_width1 1
//--- plot DN
#property indicator_label2 "DN"
#property indicator_type2 DRAW_ARROW
#property indicator_color2 clrDeepPink
#property indicator_style2 STYLE_SOLID
#property indicator_width2 1
//--- input parameters
input ENUM_TIMEFRAMES TimeFrame = PERIOD_H1 ;
input string dSymbol = "AUDUSD" ;
//--- indicator buffers
double BufferUP[];
double BufferDN[];
//--- global variables
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit ()
{
//--- indicator buffers mapping
SetIndexBuffer ( 0 ,BufferUP);
SetIndexBuffer ( 1 ,BufferDN);
//--- setting a code from the Wingdings charset as the property of PLOT_ARROW
SetIndexArrow ( 0 , 233 );
SetIndexArrow ( 1 , 234 );
//---
return ( INIT_SUCCEEDED );
}
//+------------------------------------------------------------------+
//| 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[])
{
//---
if (rates_total< 2 ) return ( 0 );
int limit=rates_total-prev_calculated;
if (limit> 1 ) {
limit=rates_total- 2 ;
ArrayInitialize (BufferUP, EMPTY_VALUE );
ArrayInitialize (BufferDN, EMPTY_VALUE );
}
int NumFrUp = GetFractalBar(dSymbol, PERIOD_CURRENT , 0 , MODE_UPPER ); // номер бара Up
int NumFrDn = GetFractalBar(dSymbol, PERIOD_CURRENT , 0 , MODE_LOWER ); // номер бара Dn
Comment ( "Bear: " , GetBearBull(dSymbol, TimeFrame, 3 ) == 1 , // Подряд 3 бара вверх
"\nBull: " , GetBearBull(dSymbol, TimeFrame, 3 ) == 2 , // Подряд 3 бара вниз
"\nNumFrUp: " , NumFrUp, // номер бара Up
"\nNumFrDn: " , NumFrDn, // номер бара Dn
"\nPriceFrUp: " , iHigh (dSymbol, PERIOD_CURRENT ,NumFrUp), // Цена верхнего фрактала
"\nPriceDn: " , iLow (dSymbol, PERIOD_CURRENT ,NumFrDn) // Цена нижнего фрактала
);
for ( int i=limit; i>= 0 ; i--) {
//--
if ( /* что сюда */ 0 )
{
BufferUP[i]= Low [i]- 50 * _Point ;
}
//--
if ( /* что сюда */ 0 )
{
BufferDN[i]= High [i]+ 50 * _Point ;
}
} // end for
//--- return value of prev_calculated for next call
return (rates_total);
}
//===============================================================================================
//---------------------- Возвращает номер бара фрактала по его номеру --------------------------+
//===============================================================================================
int GetFractalBar( string symb= "0" , int tf= 0 , int nf= 0 , int mode= MODE_UPPER ) {
if (symb== "0" ) { symb= Symbol ();}
double f= 0 ;
int kf= 0 ;
for ( int i= 3 ; i< iBars (symb, tf)- 1 ; i++) {
if (mode== MODE_LOWER ){
f= iFractals (symb, tf, MODE_LOWER , i);
if (f!= 0 ) {
kf++;
if (kf>nf) { return (i);}
}}
if (mode== MODE_UPPER ){
f= iFractals (symb, tf, MODE_UPPER , i);
if (f!= 0 ) {
kf++;
if (kf>nf) { return (i);}
}}}
return (- 1 );
}
//===============================================================================================
//------------------------ Функция возвращает направление баров подряд -------------------------+
//===============================================================================================
int GetBearBull( string symb= "0" , int tf= 0 , int ne= 5 ) {
if (symb== "0" ) { symb= Symbol ();}
double open1= 0 ,close1= 0 ,open2= 0 ,close2= 0 ;
int b= 1 ,s= 1 ;
for ( int i= 1 ; i<ne; i++) {
open1= iOpen (symb,tf,i);
close1= iClose (symb,tf,i);
open2= iOpen (symb,tf,i+ 1 );
close2= iClose (symb,tf,i+ 1 );
if (open2<close2 && open1<close1 && open2<open1) { // бычьи
b++;
if (b==ne) { return ( 1 );}
}
if (open2>close2 && open1>close1 && open2>open1) { // медвежьи
s++;
if (s==ne) { return ( 2 );}
}
}
return ( 0 );
}
//===============================================================================================
Ardından, benzetme yoluyla, danışmanları yönlendirmemek için diğer kalıpları girmeye çalışacağım.
Teşekkür ederim!
Artyom, lütfen bana da yardım et, göstergelerle ilgili sorunlarım var.
Bu tür yapıları bulmanız ve üzerlerine oklar koymanız gerekir, danışmandaki işlevler çalışır ve basitçe bağlanır, peki, bu anlaşılabilir - orada sadece mevcut değerlere ihtiyaç var, ancak bunları göstergeye nasıl aktaracağınızı tarihe maçlar çiziyor...?
Koşullar eşleştiğinde hemen mum üzerine oklar çizin: Yüksek[1] ve Düşük[1]
...
Ardından, benzetme yoluyla, danışmanları yönlendirmemek için diğer kalıpları girmeye çalışacağım.
Teşekkür ederim!
Farklı desenler için - kendi mantıkları olmalıdır, çünkü hepsi aynı değildir. Ve aynı model için farklı programcılar farklı mantık yazacaktır.
Ve tam olarak ne, hangi kalıbı tanımlamak istiyorsunuz?
Bununla başlayalım.
Farklı desenler için - kendi mantıkları olmalıdır, çünkü hepsi aynı değildir. Ve aynı model için farklı programcılar farklı mantık yazacaktır.
Ve tam olarak ne, hangi kalıbı tanımlamak istiyorsunuz?
Bununla başlayalım.
Resmi ekledim.
Koşul gereklidir: fraktal "3" fraktal "2" den daha yüksektir ve fraktal "1" "2" den yüksektir - FrDn 3 > Fr Dn 2 && Fr Dn 2 < Fr Dn 1 modelleri ,
ve arka arkaya büyüyen " 3 " varsa - satın al (ok) - GetBearBull(dSymbol,0, 3 )== 1 (1 - satın al)
Satışlarda ise tam tersi geçerlidir.
Bunu bir EA'ya koymak kolaydır, ancak bir göstergeye...
Resmi ekledim.
Koşul gereklidir: fraktal "3" fraktal "2" den daha yüksektir ve fraktal "1" "2" den yüksektir - FrDn 3 > Fr Dn 2 && Fr Dn 2 < Fr Dn 1 modelleri,
ve arka arkaya büyüyen " 3 " varsa - satın al (ok) - GetBearBull(dSymbol,0, 3 )== 1 (1 - satın al)
Satışlarda ise tam tersi geçerlidir.
Bunu bir EA'ya koymak kolaydır, ancak bir göstergeye...
Göstergede, mantık tam tersidir - Uzman Danışmanda tarihin derinliklerini aramaya başlarsanız, ardından göstergede - başlangıcından. Önce sol fraktal, sonra orta, sonra sağ fraktal arayın.
Bayrakları yönetmek.
Göstergede, mantık tam tersidir - Uzman Danışmanda tarihin derinliklerini aramaya başlarsanız, ardından göstergede - başlangıcından. Önce sol fraktal, sonra orta, sonra sağ fraktal arayın.
Bayrakları yönetmek.
Yapabilsem soru sorulmadı mantığı anladım ama kodda uygulayamıyorum o yüzden hazır hali ile göstermenizi rica ediyorum bir kere göreceğim sorular yok olacak gelecekte, ama şimdilik bin tane var ve bunu kendim çözemiyorum.
Göstergedeki tüm bunlarla ne yapacağım hakkında hiçbir fikrim yok (
//---------------------- Возвращает номер бара фрактала по его номеру --------------------------+
//===============================================================================================
int GetFractalBar( string symb= "0" , int tf= 0 , int nf= 0 , int mode= MODE_UPPER ) {
if (symb== "0" ) { symb= Symbol ();}
double f= 0 ;
int kf= 0 ;
for ( int i= 3 ; i< iBars (symb, tf)- 1 ; i++) {
if (mode== MODE_LOWER ){
f= iFractals (symb, tf, MODE_LOWER , i);
if (f!= 0 ) {
kf++;
if (kf>nf) { return (i);}
}}
if (mode== MODE_UPPER ){
f= iFractals (symb, tf, MODE_UPPER , i);
if (f!= 0 ) {
kf++;
if (kf>nf) { return (i);}
}}}
return (- 1 );
}
//===============================================================================================
//------------------------ Функция возвращает направление баров подряд -------------------------+
//===============================================================================================
int GetBearBull( string symb= "0" , int tf= 0 , int ne= 5 ) {
if (symb== "0" ) { symb= Symbol ();}
double open1= 0 ,close1= 0 ,open2= 0 ,close2= 0 ;
int b= 1 ,s= 1 ;
for ( int i= 1 ; i<ne; i++) {
open1= iOpen (symb,tf,i);
close1= iClose (symb,tf,i);
open2= iOpen (symb,tf,i+ 1 );
close2= iClose (symb,tf,i+ 1 );
if (open2<close2 && open1<close1 && open2<open1) { // бычьи
b++;
if (b==ne) { return ( 1 );}
}
if (open2>close2 && open1>close1 && open2>open1) { // медвежьи
s++;
if (s==ne) { return ( 2 );}
}
}
return ( 0 );
}
//===============================================================================================
Yapabilsem soru sorulmadı mantığı anladım ama kodda uygulayamıyorum o yüzden hazır hali ile göstermenizi rica ediyorum bir kere göreceğim sorular yok olacak gelecekte, ama şimdilik bin tane var ve bunu kendim çözemiyorum.
Göstergedeki tüm bunlarla ne yapacağım hakkında hiçbir fikrim yok (
//---------------------- Возвращает номер бара фрактала по его номеру --------------------------+
//===============================================================================================
int GetFractalBar( string symb= "0" , int tf= 0 , int nf= 0 , int mode= MODE_UPPER ) {
if (symb== "0" ) { symb= Symbol ();}
double f= 0 ;
int kf= 0 ;
for ( int i= 3 ; i< iBars (symb, tf)- 1 ; i++) {
if (mode== MODE_LOWER ){
f= iFractals (symb, tf, MODE_LOWER , i);
if (f!= 0 ) {
kf++;
if (kf>nf) { return (i);}
}}
if (mode== MODE_UPPER ){
f= iFractals (symb, tf, MODE_UPPER , i);
if (f!= 0 ) {
kf++;
if (kf>nf) { return (i);}
}}}
return (- 1 );
}
//===============================================================================================
//------------------------ Функция возвращает направление баров подряд -------------------------+
//===============================================================================================
int GetBearBull( string symb= "0" , int tf= 0 , int ne= 5 ) {
if (symb== "0" ) { symb= Symbol ();}
double open1= 0 ,close1= 0 ,open2= 0 ,close2= 0 ;
int b= 1 ,s= 1 ;
for ( int i= 1 ; i<ne; i++) {
open1= iOpen (symb,tf,i);
close1= iClose (symb,tf,i);
open2= iOpen (symb,tf,i+ 1 );
close2= iClose (symb,tf,i+ 1 );
if (open2<close2 && open1<close1 && open2<open1) { // бычьи
b++;
if (b==ne) { return ( 1 );}
}
if (open2>close2 && open1>close1 && open2>open1) { // медвежьи
s++;
if (s==ne) { return ( 2 );}
}
}
return ( 0 );
}
//===============================================================================================
Fraktal çubuk numarasını numarasına göre döndüren bir işleve gerçekten ihtiyacınız var mı?
İstediğiniz çubukta bir fraktalın varlığını döndüren bir işleve ihtiyacınız var (döngü indeksi+3)