Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz, hiçbir yerde - 6. - sayfa 44

 

Yani, umarım fonksiyonun son halidir.

 double ATR_Max() {
int i;
double m;
datetime tim;
iATR_H1_PER = 15 ; // период
if ( tim != Time[ 0 ] ) {  
while ( i < WindowBarsPerChart() ) {
double a = iATR ( NULL , 0, iATR_H1_PER, i );
   if ( m < a ) {
   m = a;
   }
   i++;
   tim = Time[ 0 ];
  }
}
Alert ( " Максимальное значение ATR для видимого количества баров равно - " , m );
return (m);
} 
 
dr.Vasgenich :

Yani, umarım fonksiyonun son halidir.

Dr.Vasgenich:

Yani, umarım fonksiyonun son halidir.

Bence döngüden sonra tim = Time[0] koymak daha iyi olur .. Aksi takdirde Time[0] isteği tüm görünür çubuklar üzerinde gerçekleştirilir - bu mantıklı değildir.
 
Boeing747 :
Bence döngüden sonra tim = Time[0] koymak daha iyi olur .. Aksi takdirde Time[0] isteği tüm görünür çubuklar üzerinde gerçekleştirilir - bu mantıklı değildir.
Düzeltme için teşekkürler. Geceleri hata sayısı katlanarak artıyor ))))
 
dr.Vasgenich :
Düzeltme için teşekkürler. Geceleri, hataların sayısı katlanarak artar))))
üstel olarak ). Ancak, benim de gevezelik etme zamanım geldi. yazarsanız))
 
Tünaydın. Söyle bana, mql4'te anında gösterge parametrelerini değiştirmek mümkün mü?
Fikir basit: ZigZag göstergesi tabloya kurulur. Grafikteki ZigZag parametrelerinin değişeceği bir komut dosyası yazın, ona bir kısayol tuşu ekleyin.
 

Yüksek volatilite filtresi bulma konusuna devam ediyoruz. WSR'den mevcut filtrenin kodunu vereceğim

 extern string ____ = "Фильтр волатильности" ;
extern bool VolatilityFilter              = FALSE;
extern int VolaFilter                     = 25 ; //--- (15 1 30)
double pp;
double pd;

int init()

   if ( Digits < 4 ) {
      pp = 0.01 ;
      pd = 2 ;
   } else {
      pp = 0.0001 ;
      pd = 4 ;
   }

İşte fonksiyonun kendisi:

 bool CheckVolatility() {
   double HeightFilter_a = NormalizeDouble (VolaFilter * pp, pd);
   bool restrict = false ;
   if ( NormalizeDouble (iHigh( NULL , PERIOD_M5 , 1 ) - iLow( NULL , PERIOD_M5 , 1 ), pd) > HeightFilter_a) restrict = true ;
   if ( NormalizeDouble (iHigh( NULL , PERIOD_M5 , 2 ) - iLow( NULL , PERIOD_M5 , 2 ), pd) > HeightFilter_a) restrict = true ;
   return (restrict);
}

Böylece fonksiyon önceki iki çubuğun değerlerini kontrol eder ve eğer çok büyüklerse fonksiyon TRUE değerini döndürür. Soru, işlevin daha fazla mum üzerinde büyük mumları araması için nasıl güzel bir şekilde rafine edileceğidir. Örneğin 24.

 
satorifx :
Tünaydın. Söyle bana, mql4'te anında gösterge parametrelerini değiştirmek mümkün mü?
Fikir basit: ZigZag göstergesi tabloya kurulur. Grafikteki ZigZag parametrelerinin değişeceği bir komut dosyası yazın, ona bir kısayol tuşu ekleyin.
Bir olasılık var.
 

Alım satımı test etmek için kendi kendime bir danışman yaptım ama bir şeyi çözemiyorum...

Bay/sat maksimum ve minimum MA ile açılır

// SATIN AL pozisyonu açma koşulu
if(MA_L1<MA_L0&&Sor<=MA_L0&&MA_0>MA_1&&HA_up>HA_dw)

// SATIŞ pozisyonu açma koşulu
if(MA_H1>MA_H0&&Bid>=MA_H0&&MA_0<MA_1&&HA_up<HA_dw)

 #include <b-Lots.mqh>
extern double TrailingStop = 30 ;
extern double Sploss = 15 ;
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int start() {
   double HA_up,HA_dw;
   double MA_H0,MA_H1,MA_L0,MA_L1,MA_0,MA_1;
   int i, cnt, ticket, total;
   bool flag= true ;

   if ( Bars < 100 ) {
       Print ( "bars less than 100" );
       return ( 0 ); 
   }
// Проверяем стоит ли открываться
   
   cnt=OrdersHistoryTotal()- 1 ;
   for (i=cnt;i>= 0 ;i--) {
       if (! OrderSelect (i, SELECT_BY_POS, MODE_HISTORY )) continue ;
       if (OrderOpenTime()>=Time[ 0 ]) { // Time[0] - если позиция открывается на нулевом баре текущего символа
         flag= false ;
         break ;
      }
   }
   cnt= OrdersTotal ()- 1 ;
   for (i=cnt;i>= 0 ;i--) {
       if (! OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) continue ;
       if (OrderOpenTime()>=Time[ 0 ]) { // Time[0] - если позиция открывается на нулевом баре текущего символа
         flag= false ;
         break ;
      }
   }
   if (!flag) return ( 0 ); 
//-----------------------------------------------
   MA_H0= iMA ( 0 , 0 , 3 , 0 , MODE_SMA , PRICE_HIGH , 0 );
   MA_H1= iMA ( 0 , 0 , 3 , 0 , MODE_SMA , PRICE_HIGH , 1 );
   MA_0= iMA ( 0 , 0 , 3 , 0 , MODE_EMA , PRICE_MEDIAN , 0 );
   MA_1= iMA ( 0 , 0 , 3 , 0 , MODE_EMA , PRICE_MEDIAN , 1 );
   MA_L0= iMA ( 0 , 0 , 3 , 0 , MODE_SMA , PRICE_LOW , 0 );
   MA_L1= iMA ( 0 , 0 , 3 , 0 , MODE_SMA , PRICE_LOW , 1 );
   HA_up= iCustom ( 0 , 0 , "Heiken Ashi" , 3 , 0 );
   HA_dw= iCustom ( 0 , 0 , "Heiken Ashi" , 2 , 0 );

//задали все данные 

   total= OrdersTotal ();
   if (total< 1 ) 
     {
       // Проверка свободной маржи
       if (AccountFreeMargin()<( 1000 *Lots))
        {
         Print ( "We have no money. Free Margin = " , AccountFreeMargin());
         return ( 0 );  
        }
       // Условие открытие позиции BUY
       if (MA_L1<MA_L0&&Ask<=MA_L0&&MA_0>MA_1&&HA_up>HA_dw)
        {
         Lots=GetSizeLot();
         ticket= OrderSend ( Symbol (),OP_BUY,Lots,Ask, 5 ,Bid-Sploss* Point , 0 , "" , 16384 , 0 ,Green);
         if (ticket> 0 )
           {
             if ( OrderSelect (ticket,SELECT_BY_TICKET,MODE_TRADES)) Print ( "BUY order opened : " ,OrderOpenPrice());
           }
         else Print ( "Error opening BUY order : " , GetLastError ()); 
         return ( 0 ); 
        }
       // Условие открытие позиции SELL
       if (MA_H1>MA_H0&&Bid>=MA_H0&&MA_0<MA_1&&HA_up<HA_dw)
        {
         Lots=GetSizeLot();
         ticket= OrderSend ( Symbol (),OP_SELL,Lots,Bid, 5 ,Ask+Sploss* Point , 0 , "" , 16384 , 0 ,Red);
         if (ticket> 0 )
           {
             if ( OrderSelect (ticket,SELECT_BY_TICKET,MODE_TRADES)) Print ( "SELL order opened : " ,OrderOpenPrice());
           }
         else Print ( "Error opening SELL order : " , GetLastError ()); 
         return ( 0 ); 
        }
       return ( 0 );
     }
    
   for (cnt= 0 ;cnt<total;cnt++)
     {
       OrderSelect (cnt, SELECT_BY_POS, MODE_TRADES);
       if (OrderType()<=OP_SELL &&   
         OrderSymbol()== Symbol ())  
        {
         if (OrderType()==OP_BUY)   // длинная позиция открыта
           {
           if ( NormalizeDouble ( MathAbs (MA_H0-Bid), Digits )< Point )
                {
                 OrderClose(OrderTicket(),OrderLots(),Bid, 3 ,Violet); 
                 return ( 0 ); 
                }
             // трейлинг-стоп для длинной позиции
             if (TrailingStop> 0 )  
              {                 
               if (Bid-OrderOpenPrice()> Point *TrailingStop)
                 {
                   if (OrderStopLoss()<Bid- Point *TrailingStop)
                    {
                     OrderModify(OrderTicket(),OrderOpenPrice(),Bid- Point *TrailingStop,OrderTakeProfit(), 0 ,Green);
                     return ( 0 );
                    }
                 }
              }
           }
         else 
           {
           if ( NormalizeDouble ( MathAbs (MA_L0-Ask), Digits )< Point )
              {
               OrderClose(OrderTicket(),OrderLots(),Ask, 3 ,Violet); 
               return ( 0 ); 
              }
             // трейлинг-стоп для короткой позиции
             if (TrailingStop> 0 )  
              {                 
               if ((OrderOpenPrice()-Ask)>( Point *TrailingStop))
                 {
                   if ((OrderStopLoss()>(Ask+ Point *TrailingStop)) || (OrderStopLoss()== 0 ))
                    {
                     OrderModify(OrderTicket(),OrderOpenPrice(),Ask+ Point *TrailingStop,OrderTakeProfit(), 0 ,Red);
                     return ( 0 );
                    }
                 }
              }
           }
        }
     }
   return ( 0 );
  }
Soru: Mevcut mumdaki pozisyon kapanmadı (koşullar gelmedi), MA_0= iMA ( 0, 0, 3, 0, MODE_EMA, PRICE_MEDIAN, 0 ) ile eşleştiğinde bir sonraki mumda hemen nasıl kapatılır ;

Bir kapanış koşulu vardır: mevcut mumda yüksek veya düşük noktayı geçmek, ancak bir pozisyon açtıktan sonra pozisyonun bir sonraki mumda kapatılabilmesi de gereklidir.

if ( NormalizeDouble ( MathAbs (MA_0-Ask), Digits )< Point ), ancak ikinci açık mumun koşulunun nasıl karşılanacağını yazabilirsiniz.


Kodla cevap verebilirseniz, bir örnekle daha açıktır.
 
Zhunko :
Bir olasılık var.

İnanılmaz ayrıntılı cevap için teşekkürler.

Foruma yeni bir kişinin bir soru ile gelip gelmediğini anlamak için gerçekten alnında yedi açıklık olması mı gerekiyor, o zaman belirli bir çözüme veya benzer bir şeye bir bağlantıya ihtiyacı var mı ve "her şey mümkün" gibi aptal bir bahaneye değil mi?

 
satorifx :

İnanılmaz ayrıntılı cevap için teşekkürler.

Foruma yeni bir kişinin bir soru ile gelip gelmediğini anlamak için gerçekten alnında yedi açıklık olması mı gerekiyor, o zaman belirli bir çözüme veya benzer bir şeye bir bağlantıya ihtiyacı var mı ve "her şey mümkün" gibi aptal bir bahaneye değil mi?

Kendileri bir şeyler yapmaya çalışanlara yardım ederler. Sizi doğru yöne yönlendirirler, açıklarlar vb. ...

Bir soru sordunuz - cevaplandınız. Kendiniz bir şeyler yazmayı denediniz mi?

Belli bir formatta soru sorarken öncelikle soru formatına ne cevap alacağınızı düşünün...

Neden: