Yeni bir göstergeyle yapılan tüm denemeler askıda kalmaya yol açar.
Ve değişmeyen gösterge ile kısa süreli frenleme.
Çözüm ne olabilir?
Göstergenizde - özellikle içindeki diğer özel göstergelerin verilerini kullanmak yerine - herhangi bir boyuttaki fraktalları aramak yerine, sadece bu tür fraktalları aramak için işlevler oluşturun ve onlarla çalışın.
Bu göstergeden benimkine bir fonksiyon nasıl implante edilir?
bool isDnFractal( int bar, int max, constdouble &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 ); }
Pekala, gerekli çubuktaki fraktalın fiyatını döndürmek için buna ihtiyacınız var. Burada basit bir gösterge attım. İçinden çekip çıkarabileceğiniz ve kendi içinizde kullanabileceğiniz iki işlevi vardır - bunları işlevler olarak özel olarak düzenlenmiş - geçersiz değerleri kontrol ederek.
//+------------------------------------------------------------------+ //| iFreeNumFractals.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_buffers2 #property indicator_plots2 //--- plot UpperFractal #property indicator_label1 "UpperFractal" #property indicator_type1 DRAW_ARROW #property indicator_color1 clrRed #property indicator_style1 STYLE_SOLID #property indicator_width1 1 //--- plot LowerFractal #property indicator_label2 "LowerFractal" #property indicator_type2 DRAW_ARROW #property indicator_color2 clrSteelBlue #property indicator_style2 STYLE_SOLID #property indicator_width2 1 //--- input parameters inputint LeftNum= 2 ; // Количество баров слева int leftNum; // Количество баров слева inputint RightNum= 2 ; // Количество баров справа int rightNum; // Количество баров справа //--- indicator buffers double BufferUpperFractal[]; double BufferLowerFractal[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ intOnInit () { //--- indicator buffers mapping SetIndexBuffer ( 0 ,BufferUpperFractal); SetIndexBuffer ( 1 ,BufferLowerFractal); //--- setting a code from the Wingdings charset as the property of PLOT_ARROW PlotIndexSetInteger ( 0 , PLOT_ARROW , 159 ); PlotIndexSetInteger ( 1 , PLOT_ARROW , 159 ); SetIndexArrow ( 0 , 217 ); SetIndexArrow ( 1 , 218 ); //--- leftNum=(LeftNum< 1 ? 1 :LeftNum); rightNum=(RightNum< 1 ? 1 :RightNum); //--- return ( INIT_SUCCEEDED ); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ intOnCalculate ( constint rates_total, constint prev_calculated, constdatetime &time[], constdouble &open[], constdouble &high[], constdouble &low[], constdouble &close[], constlong &tick_volume[], constlong &volume[], constint &spread[]) { //--- if (rates_total<leftNum+rightNum) return ( 0 ); int limit=rates_total-prev_calculated; if (limit> 0 ) { ArrayInitialize (BufferUpperFractal, 0.0 ); ArrayInitialize (BufferUpperFractal, 0.0 ); limit=rates_total-leftNum- 1 ; } //--- for ( int i=limit; i>rightNum; i--) { if (GetFreeUpperFractal(i,limit,high,leftNum,rightNum)> 0 ) BufferUpperFractal[i]=high[i]; if (GetFreeLowerFractal(i,limit,low ,leftNum,rightNum)> 0 ) BufferLowerFractal[i]=low[i]; } //--- return value of prev_calculated for next call return (rates_total); } //+----------------------------------------------------------------------------+ double GetFreeLowerFractal( int shift, constint limit, constdouble &low[], int left_dimension= 2 , int right_dimension= 2 ) { if (left_dimension< 1 ) left_dimension= 1 ; if (right_dimension< 1 ) right_dimension= 1 ; if (shift-right_dimension< 1 || shift+left_dimension>limit-1) return (- 1 ); for ( int i=shift; i>shift-right_dimension; i--) if (low[i]>low[i- 1 ]) return (- 1 ); for ( int i=shift; i<shift+left_dimension; i++) if (low[i]>low[i+ 1 ]) return (- 1 ); return (low[shift]); } //+----------------------------------------------------------------------------+ double GetFreeUpperFractal( int shift, constint limit, constdouble &high[], int left_dimension= 2 , int right_dimension= 2 ) { if (left_dimension< 1 ) left_dimension= 1 ; if (right_dimension< 1 ) right_dimension= 1 ; if (shift-right_dimension< 1 || shift+left_dimension>limit-1) return (- 1 ); for ( int i=shift; i>=shift-right_dimension; i--) if (high[i]<high[i- 1 ]) return (- 1 ); for ( int i=shift; i<=shift+left_dimension; i++) if (high[i]<high[i+ 1 ]) return (- 1 ); return (high[shift]); } //+----------------------------------------------------------------------------+
Göstergeden rasgele fraktallar elde etme işlevlerini tamamen ayırmak için, yüksek[] ve düşük[] dizilerini ve sınır değerini bunlara referans olarak iletmemelisiniz, ancak gerekli değerleri fonksiyonlarla da almalısınız.
Kodu MQL5'e mümkün olduğunca yakın yaptığımız için, High[], Low[], iHigh() , iLow() fonksiyonlarını terk etmemiz ve kendi fonksiyonlarımızı kullanarak gerekli fiyatları almamız gerekecek. Aynı göstergede şöyle görünecek:
//+------------------------------------------------------------------+ //| iFreeNumFractals.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_buffers2 #property indicator_plots2 //--- plot UpperFractal #property indicator_label1 "UpperFractal" #property indicator_type1 DRAW_ARROW #property indicator_color1 clrRed #property indicator_style1 STYLE_SOLID #property indicator_width1 1 //--- plot LowerFractal #property indicator_label2 "LowerFractal" #property indicator_type2 DRAW_ARROW #property indicator_color2 clrSteelBlue #property indicator_style2 STYLE_SOLID #property indicator_width2 1 //--- input parameters inputint LeftNum= 2 ; // Количество баров слева int leftNum; // Количество баров слева inputint RightNum= 2 ; // Количество баров справа int rightNum; // Количество баров справа //--- indicator buffers double BufferUpperFractal[]; double BufferLowerFractal[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ intOnInit () { //--- indicator buffers mapping SetIndexBuffer ( 0 ,BufferUpperFractal); SetIndexBuffer ( 1 ,BufferLowerFractal); //--- setting a code from the Wingdings charset as the property of PLOT_ARROW // PlotIndexSetInteger ( 0 , PLOT_ARROW , 217 ); // PlotIndexSetInteger ( 1 , PLOT_ARROW , 218 ); SetIndexArrow ( 0 , 217 ); SetIndexArrow ( 1 , 218 ); //--- leftNum=(LeftNum< 1 ? 1 :LeftNum); rightNum=(RightNum< 1 ? 1 :RightNum); //--- return ( INIT_SUCCEEDED ); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ intOnCalculate ( constint rates_total, constint prev_calculated, constdatetime &time[], constdouble &open[], constdouble &high[], constdouble &low[], constdouble &close[], constlong &tick_volume[], constlong &volume[], constint &spread[]) { //--- if (rates_total<leftNum+rightNum) return ( 0 ); int limit=rates_total-prev_calculated; if (limit> 0 ) { ArrayInitialize (BufferUpperFractal, 0.0 ); ArrayInitialize (BufferUpperFractal, 0.0 ); limit=rates_total-leftNum- 1 ; } //--- for ( int i=limit; i>rightNum; i--) { if (GetFreeUpperFractal( Symbol (), PERIOD_CURRENT ,i,leftNum,rightNum)> 0 ) BufferUpperFractal[i]=high[i]; if (GetFreeLowerFractal( Symbol (), PERIOD_CURRENT ,i,leftNum,rightNum)> 0 ) BufferLowerFractal[i]=low[i]; } //--- return value of prev_calculated for next call return (rates_total); } //+----------------------------------------------------------------------------+ double GetFreeLowerFractal( conststring symbol_name, ENUM_TIMEFRAMES timeframe, int shift, int left_dimension= 2 , int right_dimension= 2 ) { int bars= Bars (symbol_name,timeframe); if (left_dimension< 1 ) left_dimension= 1 ; if (right_dimension< 1 ) right_dimension= 1 ; if (shift-right_dimension< 1 || shift+left_dimension>bars- 1 ) return (- 1 ); for ( int i=shift; i>shift-right_dimension; i--) if (GetPriceLow(symbol_name,timeframe,i)>GetPriceLow(symbol_name,timeframe,i- 1 )) return (- 1 ); for ( int i=shift; i<shift+left_dimension; i++) if (GetPriceLow(symbol_name,timeframe,i)>GetPriceLow(symbol_name,timeframe,i+ 1 )) return (- 1 ); return (GetPriceLow(symbol_name,timeframe,shift)); } //+----------------------------------------------------------------------------+ double GetFreeUpperFractal( conststring symbol_name, ENUM_TIMEFRAMES timeframe, int shift, int left_dimension= 2 , int right_dimension= 2 ) { int bars= Bars (symbol_name,timeframe); if (left_dimension< 1 ) left_dimension= 1 ; if (right_dimension< 1 ) right_dimension= 1 ; if (shift-right_dimension< 1 || shift+left_dimension>bars- 1 ) return (- 1 ); for ( int i=shift; i>=shift-right_dimension; i--) if (GetPriceHigh(symbol_name,timeframe,i)<GetPriceHigh(symbol_name,timeframe,i- 1 )) return (- 1 ); for ( int i=shift; i<=shift+left_dimension; i++) if (GetPriceHigh(symbol_name,timeframe,i)<GetPriceHigh(symbol_name,timeframe,i+ 1 )) return (- 1 ); return (GetPriceHigh(symbol_name,timeframe,shift)); } //+----------------------------------------------------------------------------+ double GetPriceHigh( conststring symbol_name, ENUM_TIMEFRAMES timeframe, int shift){ double array[ 1 ]; if ( CopyHigh (symbol_name,timeframe,shift, 1 ,array)== 1 ) return (array[ 0 ]); return (- 1 ); } //+----------------------------------------------------------------------------+ double GetPriceLow( conststring symbol_name, ENUM_TIMEFRAMES timeframe, int shift){ double array[ 1 ]; if ( CopyLow (symbol_name,timeframe,shift, 1 ,array)== 1 ) return (array[ 0 ]); return (- 1 ); } //+----------------------------------------------------------------------------+
Doğru, yine de GetPriceHigh() ve GetPriceLow() işlevlerinden -1 almak için kontroller yapmanız gerekiyor.
İyi günler, bana her 20 dakikada bir değerleri kontrol etmek için 15 dakikalık bir zaman çerçevesi kullanarak danışmanı nasıl yapacağımı söyleyin, diyelim ki 9-20, 9-40, RSI geçişini izleyin ve seviye ise geçti, yirmi dakika içinde fiyat değişikliğini kontrol edin. İşte düzeltmem gerekenler:
Yani, diyelim ki RSI 9-20'de geçti. Danışmanın 9-20'deki fiyatı hatırlaması ve 9-40'ta son 20 dakikanın 9-20'deki fiyata göre nasıl kapatıldığını kontrol etmesi gerekir. Aşağı ise, kısa açılır. Şimdiden teşekkür ederim
İyi günler, bana her 20 dakikada bir değerleri kontrol etmek için 15 dakikalık bir zaman çerçevesi kullanarak danışmanı nasıl yapacağımı söyleyin, diyelim ki 9-20, 9-40, RSI geçişini izleyin ve seviye ise geçti, yirmi dakika içinde fiyat değişikliğini kontrol edin. İşte düzeltmem gerekenler:
Yani, diyelim ki RSI 9-20'de geçti. Danışmanın 9-20'deki fiyatı hatırlaması ve 9-40'ta son 20 dakikanın 9-20'deki fiyata göre nasıl kapandığını kontrol etmesi gerekir. Aşağı ise, kısa açılır. Şimdiden teşekkür ederim
:)
Ve 9.22'de bir danışman başlatırsanız?
Ya bir sistem veya terminal hatası varsa? Fiyat unutulacak.
Yani, bu çek zamanı geldiğinde 20 dakika önce ne olduğuna bakmanız gerekiyor. Dakikaların yirminin katına eşit veya daha büyük olduğu zaman geldi - çubuktaki RSI'nin 20 dakika önceki durumunu kontrol edin. Eğer gerekli bir kavşak varsa o zaman plana göre ilerliyoruz...
Doğru, tf M15'te tam kesişme zamanını ve tam fiyatı belirleyemezsiniz, ancak M1'deki fiyata bakabilirsiniz - en az 15 kat daha doğru.
Ya bir sistem veya terminal hatası varsa? Fiyat unutulacak.
Yani, bu çek zamanı geldiğinde 20 dakika önce ne olduğuna bakmanız gerekiyor. Dakikaların yirminin katına eşit veya daha büyük olduğu zaman geldi - çubuktaki RSI'nin 20 dakika önceki durumunu kontrol edin. Eğer gerekli bir kavşak varsa o zaman plana göre ilerliyoruz...
Doğru, tf M15'te tam kesişme zamanını ve tam fiyatı belirleyemezsiniz, ancak M1'deki fiyata bakabilirsiniz - en az 15 kat daha doğru.
Pekala, anladığım kadarıyla ustalaşamıyorum))) arkadaşlar, kodun bu kısmını kim yazabilir? 1000 ruble ödeyeceğim
RSI'ın 15 dakikaya ihtiyacı var. Danışmanın piyasanın açılışından itibaren her 20 dakikada bir kontrol etmesi gerekiyor (9-00, 9-20, 9-40 vb.) diyelim ki 10-20'de 70. seviyede yukarı doğru bir geçiş oldu, hatırlıyor. fiyat ve 10-40'ta fiyatın 10-20'den düşük olup olmadığını kontrol edecekler ve kısa açılıyor.
Daha derine bakmak lazım...
Derin, nerede ?
Yeni bir göstergeyle yapılan tüm denemeler askıda kalmaya yol açar.
Ve değişmeyen gösterge ile kısa süreli frenleme.
Çözüm ne olabilir?
Derin, nerede ?
Yeni bir göstergeyle yapılan tüm denemeler askıda kalmaya yol açar.
Ve değişmeyen gösterge ile kısa süreli frenleme.
Çözüm ne olabilir?
sadece bu tür fraktallar için arama işlevleri yapın ve onlarla çalışın.
Bu senin için, sadece yap)
Ama benim için bu göz korkutucu bir görev.
İşte böyle bir işlev?
{
//---
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 );
}
Bu bir aşağı fraktaldır .
Bu nasıl kullanılır?
Bu senin için, yapması daha kolay)
Ama benim için bu göz korkutucu bir görev.
Bu göstergeden benimkine bir fonksiyon nasıl implante edilir?
{
//---
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 );
}
Pekala, gerekli çubuktaki fraktalın fiyatını döndürmek için buna ihtiyacınız var. Burada basit bir gösterge attım. İçinden çekip çıkarabileceğiniz ve kendi içinizde kullanabileceğiniz iki işlevi vardır - bunları işlevler olarak özel olarak düzenlenmiş - geçersiz değerleri kontrol ederek.
//| iFreeNumFractals.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 UpperFractal
#property indicator_label1 "UpperFractal"
#property indicator_type1 DRAW_ARROW
#property indicator_color1 clrRed
#property indicator_style1 STYLE_SOLID
#property indicator_width1 1
//--- plot LowerFractal
#property indicator_label2 "LowerFractal"
#property indicator_type2 DRAW_ARROW
#property indicator_color2 clrSteelBlue
#property indicator_style2 STYLE_SOLID
#property indicator_width2 1
//--- input parameters
input int LeftNum= 2 ; // Количество баров слева
int leftNum; // Количество баров слева
input int RightNum= 2 ; // Количество баров справа
int rightNum; // Количество баров справа
//--- indicator buffers
double BufferUpperFractal[];
double BufferLowerFractal[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit ()
{
//--- indicator buffers mapping
SetIndexBuffer ( 0 ,BufferUpperFractal);
SetIndexBuffer ( 1 ,BufferLowerFractal);
//--- setting a code from the Wingdings charset as the property of PLOT_ARROW
PlotIndexSetInteger ( 0 , PLOT_ARROW , 159 );
PlotIndexSetInteger ( 1 , PLOT_ARROW , 159 );
SetIndexArrow ( 0 , 217 );
SetIndexArrow ( 1 , 218 );
//---
leftNum=(LeftNum< 1 ? 1 :LeftNum);
rightNum=(RightNum< 1 ? 1 :RightNum);
//---
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<leftNum+rightNum) return ( 0 );
int limit=rates_total-prev_calculated;
if (limit> 0 ) {
ArrayInitialize (BufferUpperFractal, 0.0 );
ArrayInitialize (BufferUpperFractal, 0.0 );
limit=rates_total-leftNum- 1 ;
}
//---
for ( int i=limit; i>rightNum; i--) {
if (GetFreeUpperFractal(i,limit,high,leftNum,rightNum)> 0 ) BufferUpperFractal[i]=high[i];
if (GetFreeLowerFractal(i,limit,low ,leftNum,rightNum)> 0 ) BufferLowerFractal[i]=low[i];
}
//--- return value of prev_calculated for next call
return (rates_total);
}
//+----------------------------------------------------------------------------+
double GetFreeLowerFractal( int shift, const int limit, const double &low[], int left_dimension= 2 , int right_dimension= 2 ) {
if (left_dimension< 1 ) left_dimension= 1 ;
if (right_dimension< 1 ) right_dimension= 1 ;
if (shift-right_dimension< 1 || shift+left_dimension>limit-1) return (- 1 );
for ( int i=shift; i>shift-right_dimension; i--) if (low[i]>low[i- 1 ]) return (- 1 );
for ( int i=shift; i<shift+left_dimension; i++) if (low[i]>low[i+ 1 ]) return (- 1 );
return (low[shift]);
}
//+----------------------------------------------------------------------------+
double GetFreeUpperFractal( int shift, const int limit, const double &high[], int left_dimension= 2 , int right_dimension= 2 ) {
if (left_dimension< 1 ) left_dimension= 1 ;
if (right_dimension< 1 ) right_dimension= 1 ;
if (shift-right_dimension< 1 || shift+left_dimension>limit-1) return (- 1 );
for ( int i=shift; i>=shift-right_dimension; i--) if (high[i]<high[i- 1 ]) return (- 1 );
for ( int i=shift; i<=shift+left_dimension; i++) if (high[i]<high[i+ 1 ]) return (- 1 );
return (high[shift]);
}
//+----------------------------------------------------------------------------+
Göstergeden rasgele fraktallar elde etme işlevlerini tamamen ayırmak için, yüksek[] ve düşük[] dizilerini ve sınır değerini bunlara referans olarak iletmemelisiniz, ancak gerekli değerleri fonksiyonlarla da almalısınız.
Kodu MQL5'e mümkün olduğunca yakın yaptığımız için, High[], Low[], iHigh() , iLow() fonksiyonlarını terk etmemiz ve kendi fonksiyonlarımızı kullanarak gerekli fiyatları almamız gerekecek. Aynı göstergede şöyle görünecek:
//| iFreeNumFractals.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 UpperFractal
#property indicator_label1 "UpperFractal"
#property indicator_type1 DRAW_ARROW
#property indicator_color1 clrRed
#property indicator_style1 STYLE_SOLID
#property indicator_width1 1
//--- plot LowerFractal
#property indicator_label2 "LowerFractal"
#property indicator_type2 DRAW_ARROW
#property indicator_color2 clrSteelBlue
#property indicator_style2 STYLE_SOLID
#property indicator_width2 1
//--- input parameters
input int LeftNum= 2 ; // Количество баров слева
int leftNum; // Количество баров слева
input int RightNum= 2 ; // Количество баров справа
int rightNum; // Количество баров справа
//--- indicator buffers
double BufferUpperFractal[];
double BufferLowerFractal[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit ()
{
//--- indicator buffers mapping
SetIndexBuffer ( 0 ,BufferUpperFractal);
SetIndexBuffer ( 1 ,BufferLowerFractal);
//--- setting a code from the Wingdings charset as the property of PLOT_ARROW
// PlotIndexSetInteger ( 0 , PLOT_ARROW , 217 );
// PlotIndexSetInteger ( 1 , PLOT_ARROW , 218 );
SetIndexArrow ( 0 , 217 );
SetIndexArrow ( 1 , 218 );
//---
leftNum=(LeftNum< 1 ? 1 :LeftNum);
rightNum=(RightNum< 1 ? 1 :RightNum);
//---
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<leftNum+rightNum) return ( 0 );
int limit=rates_total-prev_calculated;
if (limit> 0 ) {
ArrayInitialize (BufferUpperFractal, 0.0 );
ArrayInitialize (BufferUpperFractal, 0.0 );
limit=rates_total-leftNum- 1 ;
}
//---
for ( int i=limit; i>rightNum; i--) {
if (GetFreeUpperFractal( Symbol (), PERIOD_CURRENT ,i,leftNum,rightNum)> 0 ) BufferUpperFractal[i]=high[i];
if (GetFreeLowerFractal( Symbol (), PERIOD_CURRENT ,i,leftNum,rightNum)> 0 ) BufferLowerFractal[i]=low[i];
}
//--- return value of prev_calculated for next call
return (rates_total);
}
//+----------------------------------------------------------------------------+
double GetFreeLowerFractal( const string symbol_name, ENUM_TIMEFRAMES timeframe, int shift, int left_dimension= 2 , int right_dimension= 2 ) {
int bars= Bars (symbol_name,timeframe);
if (left_dimension< 1 ) left_dimension= 1 ;
if (right_dimension< 1 ) right_dimension= 1 ;
if (shift-right_dimension< 1 || shift+left_dimension>bars- 1 ) return (- 1 );
for ( int i=shift; i>shift-right_dimension; i--) if (GetPriceLow(symbol_name,timeframe,i)>GetPriceLow(symbol_name,timeframe,i- 1 )) return (- 1 );
for ( int i=shift; i<shift+left_dimension; i++) if (GetPriceLow(symbol_name,timeframe,i)>GetPriceLow(symbol_name,timeframe,i+ 1 )) return (- 1 );
return (GetPriceLow(symbol_name,timeframe,shift));
}
//+----------------------------------------------------------------------------+
double GetFreeUpperFractal( const string symbol_name, ENUM_TIMEFRAMES timeframe, int shift, int left_dimension= 2 , int right_dimension= 2 ) {
int bars= Bars (symbol_name,timeframe);
if (left_dimension< 1 ) left_dimension= 1 ;
if (right_dimension< 1 ) right_dimension= 1 ;
if (shift-right_dimension< 1 || shift+left_dimension>bars- 1 ) return (- 1 );
for ( int i=shift; i>=shift-right_dimension; i--) if (GetPriceHigh(symbol_name,timeframe,i)<GetPriceHigh(symbol_name,timeframe,i- 1 )) return (- 1 );
for ( int i=shift; i<=shift+left_dimension; i++) if (GetPriceHigh(symbol_name,timeframe,i)<GetPriceHigh(symbol_name,timeframe,i+ 1 )) return (- 1 );
return (GetPriceHigh(symbol_name,timeframe,shift));
}
//+----------------------------------------------------------------------------+
double GetPriceHigh( const string symbol_name, ENUM_TIMEFRAMES timeframe, int shift){
double array[ 1 ];
if ( CopyHigh (symbol_name,timeframe,shift, 1 ,array)== 1 ) return (array[ 0 ]);
return (- 1 );
}
//+----------------------------------------------------------------------------+
double GetPriceLow( const string symbol_name, ENUM_TIMEFRAMES timeframe, int shift){
double array[ 1 ];
if ( CopyLow (symbol_name,timeframe,shift, 1 ,array)== 1 ) return (array[ 0 ]);
return (- 1 );
}
//+----------------------------------------------------------------------------+
Price2== Bid ;
{
if ( Hour ()== 9 && ( Minute () == 40 ) && ( Bid <Price2))
{
ticket= OrderSend ( Symbol (), OP_SELL , Lts, Bid , SP, 0 , 0 , NULL , Magic, 0 , Blue);
return ( 0 );
}
}
Price2== Bid ;
{
if ( Hour ()== 9 && ( Minute () == 40 ) && ( Bid <Price2))
{
ticket= OrderSend ( Symbol (), OP_SELL , Lts, Bid , SP, 0 , 0 , NULL , Magic, 0 , Blue);
return ( 0 );
}
}
:)
Ve 9.22'de bir danışman başlatırsanız?
Ya bir sistem veya terminal hatası varsa? Fiyat unutulacak.
Yani, bu çek zamanı geldiğinde 20 dakika önce ne olduğuna bakmanız gerekiyor. Dakikaların yirminin katına eşit veya daha büyük olduğu zaman geldi - çubuktaki RSI'nin 20 dakika önceki durumunu kontrol edin. Eğer gerekli bir kavşak varsa o zaman plana göre ilerliyoruz...
Doğru, tf M15'te tam kesişme zamanını ve tam fiyatı belirleyemezsiniz, ancak M1'deki fiyata bakabilirsiniz - en az 15 kat daha doğru.
:)
Ve 9.22'de bir danışman başlatırsanız?
Ya bir sistem veya terminal hatası varsa? Fiyat unutulacak.
Yani, bu çek zamanı geldiğinde 20 dakika önce ne olduğuna bakmanız gerekiyor. Dakikaların yirminin katına eşit veya daha büyük olduğu zaman geldi - çubuktaki RSI'nin 20 dakika önceki durumunu kontrol edin. Eğer gerekli bir kavşak varsa o zaman plana göre ilerliyoruz...
Doğru, tf M15'te tam kesişme zamanını ve tam fiyatı belirleyemezsiniz, ancak M1'deki fiyata bakabilirsiniz - en az 15 kat daha doğru.
Pekala, anladığım kadarıyla ustalaşamıyorum))) arkadaşlar, kodun bu kısmını kim yazabilir? 1000 ruble ödeyeceğim
Comment ( "RSI = " ,rci20);
Ve bin nerede?
(şaka)
Comment ( "RSI = " ,rci20);
Ve bin nerede?
(şaka)