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

 
Belki birinin RSI'dan hazır bir iMAOnArray hindisi vardır?
 
berezhnuy :
Belki birinin RSI'dan hazır bir iMAOnArray hindisi vardır?

Şimdi neden kimsenin sana gerçekten "yardım" yanıt vermediğini anlıyorum ...
 
berezhnuy :
Belki birinin RSI'dan hazır bir iMAOnArray hindisi vardır?

Kod tabanında var, sadece aramanız gerekiyor.
 
Yoldaşlar. Pratik olsun diye, kazanımların en basit gösterimini kodlamaya karar verdim. Ama sonunda, grafikteki zaman çerçevesini değiştirirken ve kaba bir şekilde zaman çerçevesine dönerken, uyarının tekrar çalışması gibi bir sorun vardı. Çubuk başına yalnızca bir kez uyarma seçeneği buldum, ancak yine TF'yi değiştirirken her şey sıfırlanıyor.
 if ( Bars != ThisBarTrade ) {
   ThisBarTrade = Bars ;   // ensure only one trade opportunity per bar
   // Trade logic goes here
}
İşte kodun kendisi, grafik çekmeceleri olmadan, sadece mantık. Nasıl düzeltilir?
   if (engulfAlerter && Open[ 2 ]>Close[ 2 ] && Open[ 1 ]<Close[ 1 ] && Close[ 1 ]>Open[ 2 ])
      {
         Alert ( "Bullish Engulf" );
      }
   if (engulfAlerter && Open[ 2 ]<Close[ 2 ] && Open[ 1 ]>Close[ 1 ] && Close[ 1 ]<Open[ 2 ])
      {
         Alert ( "Bearish Engulf" );
      }
PS, türkiye, diğer TF'lere geçiş sırasında başlatmadan arındırma sırasında koşullu "ThisBarTrade"i sıfırlar.
 

Lütfen bana biletleri ayrı ayrı almak ve satmak için nasıl ayıracağımı söyler misiniz?

bilet=OrderSend("EURUSD",OP_SELL,SellLot,Bid,3,0,0,"",MAGICMA,0,Kırmızı);


başka

{

OrderSelect (bilet-3,SELECT_BY_POS,MODE_TRADES);

SiparişKapat(bilet-3,SellLot,Sor,3,Kırmızı);


}

bilet-3 özellikle, TC ticareti, sanki birkaç sipariş için ortalama bir fiyatla yapılıyormuş gibi gerçekleştirilir), ancak Bilet Satın Al'ı Biletleri Sat'tan nasıl ayırabilirim? 3 bai önce açılmış bir siparişi alabileyim diye) ayrıca satmak için

 

Merhaba arkadaşlar!) Böyle bir sorunum var:

Başlangıçta bir şablon (ihtiyacım olan göstergeler ve bir grafik nesne ile) açan bir program yazdı, ardından verileri ve işlemleri analiz etti. grafikte çalıştırdığımda her şey yolunda gidiyor. test cihazında çalıştırdığımda sadece render alırken çalışıyor. Anladığım kadarıyla, şablon yalnızca görsel olarak açık bir çizelgeye yüklenebilir ... bu nedenle, normal test modunda program çalışmıyor, çünkü şablonu yüklemeden çizelgeye göre basitçe çalıştırılıyor ... ve peki ya optimizasyon? Çok fazla parametrem var ve her seçeneği görselleştirme ile manuel olarak çalıştırmak nedense pek mantıklı değil.

yardım pliz)) optimizasyon ve şablonla ilgili sorunu nasıl çözebilirim?

 
evillive :

Zachot)))


Sadece MQL'de yazmadım, ama resmi olarak bu bir aksaklık (:

Bu nasıl belirlenebilir?

Değerlerin sayısı çok sınırlı olduğu için doğrudan kaba kuvvetle kontrol edebilirsiniz:

 #property strict

/******************************************************************************/
void fun1( int const A) {
   Print ( "fun1()" );

   if (A == 0 || A == 1 ) {
     Print ( "fun1 do!" );
  }
}

/******************************************************************************/
void fun2( int const A) {
   Print ( "fun2()" );

   if (A != 2 ) {
     Print ( "fun2 do!" );
  }
}

/******************************************************************************/
void Гарантия_0_1_2( int const A) {
   switch (A) {
   case 0 :
   case 1 :
   case 2 :
    fun1(A);
    fun2(A);
     break ;
   default :
     Print ( "Не соблюдены условия (теоремы)" );
  }
}

/******************************************************************************/
void OnStart () {
   for ( int A = 0 , limit = 4 ; A < limit; A++) {
     Print ( "Проверяем для A = " , A);
    Гарантия_0_1_2(A);
  }
}

Alırız:

 22 : 52 : 38 Script 3 EURUSDm,H1: loaded successfully
22 : 52 : 38 3 EURUSDm,H1: initialized
22 : 52 : 38 3 EURUSDm,H1: Проверяем для A = 0
22 : 52 : 38 3 EURUSDm,H1: fun1()
22 : 52 : 38 3 EURUSDm,H1: fun1 do !
22 : 52 : 38 3 EURUSDm,H1: fun2()
22 : 52 : 38 3 EURUSDm,H1: fun2 do !
22 : 52 : 38 3 EURUSDm,H1: Проверяем для A = 1
22 : 52 : 38 3 EURUSDm,H1: fun1()
22 : 52 : 38 3 EURUSDm,H1: fun1 do !
22 : 52 : 38 3 EURUSDm,H1: fun2()
22 : 52 : 38 3 EURUSDm,H1: fun2 do !
22 : 52 : 38 3 EURUSDm,H1: Проверяем для A = 2
22 : 52 : 38 3 EURUSDm,H1: fun1()
22 : 52 : 38 3 EURUSDm,H1: fun2()
22 : 52 : 38 3 EURUSDm,H1: Проверяем для A = 3
22 : 52 : 38 3 EURUSDm,H1: Не соблюдены условия (теоремы)
22 : 52 : 38 3 EURUSDm,H1: uninit reason 0
22 : 52 : 38 Script 3 EURUSDm,H1: removed

Bunların eşdeğer olduğu ortaya çıkıyor. 3 değil, diyelim 3 milyon değer olsaydı, makineye kontrol etmesini - işlevlerden sonuçları döndürmesini ve bunları karşılaştırmasını söylemesi hala mümkün olurdu. Tüm aralık için herhangi bir tutarsızlık yoksa, bunlar eşdeğerdir.

İşlev çağrısı gibi bir değişken yerine bir ifade kullanılırsa, kısa mantık ifadesi değerlendirme şeması nedeniyle eşdeğerlik "nitelikli eşdeğerlik" olur.

 

Merhaba!

Başka bir göstergeye dayalı bir gösterge yaptı.

İlk arabellek olması gerektiği gibi sayılır.

İkincisi değil: “satır1> 0”dan sonra her çubukta geri sayımın başlaması gerekir.

Prensip olarak, danışmanda şöyle yaptım:

 if (line1 > 0 && time == 0 ){time=Time[i+ 0 ];} //сработало предварительное условие входа, записываем время
if (time > 0 )shift=iBarShift( Symbol (), Period (),i+time); //находим индекс бара

ve zaten "shift >= shet" sonrasında çizim koşulu tetiklenir.

"Shet" değişkeninin harici parametrelerini değiştiriyorum, göstergede değişiklik yok.

Sorun ne olabilir?

Gösterge kodu:

 #property indicator_buffers 2
#property indicator_color1 Lime 
#property indicator_color2 Red
//--- input parameters
extern int        Period_MA_r= 14 ;
extern int        r2          = 7 ;
extern int        Period_MA_1= 46 ;
extern int        p2          = 19 ;
extern int        shet= 7 ;
extern int        s        = 0 ;
//--- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexBuffer ( 0 ,ExtMapBuffer1);
   SetIndexStyle( 0 , DRAW_ARROW );
   SetIndexArrow( 0 , 119 );
   SetIndexEmptyValue( 0 , 0.0 );
   SetIndexBuffer ( 1 ,ExtMapBuffer2);
   SetIndexStyle( 1 , DRAW_ARROW );
   SetIndexArrow( 1 , 119 );
   SetIndexEmptyValue( 1 , 0.0 );
   IndicatorDigits( Digits + 1 );
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int counted_bars=IndicatorCounted(),
   i,limit1,shift;
   limit1= Bars -counted_bars- 1 ;
   double line1,signal_line;
   static datetime time;
   for (i=limit1;i>= 0 ;i--) 
   {
   line1= 0 ;
   signal_line= 0 ;
   line1= iCustom ( NULL , 0 , "indikator1" ,Period_MA_r,r2, 1 ,i+ 0 );
   signal_line= iCustom ( NULL , 0 , "indikator2" ,Period_MA_1,p2, 0 ,i+ 0 );
   
   if (line1 > 0 && time == 0 ){time=Time[i+ 0 ];} //сработало предварительное условие входа, записываем время
   if (time > 0 )shift=iBarShift( Symbol (), Period (),i+time); //находим индекс бара
   if (line1 == 0 ){time= 0 ;} //если индикатор равен нолю, то время сбрасывается на ноль
   if (line1 > 0 && signal_line < s){ExtMapBuffer1[i]=Low[i]- 95 * Point ;}
   if (line1 > 0 && shift >= shet && signal_line < s){ExtMapBuffer2[i]=High[i]+ 95 * Point ;}
   }
   return ( 0 );
  }
//+------------------------------------------------------------------+
 
Forexman77 :

Merhaba!

Başka bir göstergeye dayalı bir gösterge yaptı.

İlk arabellek olması gerektiği gibi sayılır.

İkincisi değil: “satır1> 0”dan sonra her çubukta geri sayımın başlaması gerekir.

Prensip olarak, danışmanda şöyle yaptım:

ve "shift >= shet" işleminden sonra çizim koşulu tetiklenir.

"Shet" değişkeninin harici parametrelerini değiştiriyorum, göstergede değişiklik yok.

Sorun ne olabilir?

Gösterge kodu:


0'ın eklenmesiyle ilgili yanlış anlaşılmalar var ama şunu deneyin:

 //+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
{
   int counted_bars=IndicatorCounted(),
   i,limit1,shift = 0 ;
   limit1= Bars -counted_bars- 1 ;
   double line1,signal_line;
   static datetime time;
   for (i=limit1;i>= 0 ;i--) 
   {
       line1= 0 .;
       signal_line= 0 .;
       line1 = iCustom ( _Symbol , _Period , "indikator1" ,Period_MA_r,r2, 1 , i+ 0 );       // Не понятно - зачем прибавлять 0 ???
       signal_line = iCustom ( _Symbol , _Period , "indikator2" ,Period_MA_1,p2, 0 ,i+ 0 );   // Не понятно - зачем прибавлять 0 ???
   
       if (line1 > 0 . && time == 0 ) {time = Time[i+ 0 ];}                   //сработало предварительное условие входа, записываем время [тоже + 0]
       if (time > 0 .) shift= i + iBarShift ( _Symbol , _Period , time);       //находим индекс бара
       if (line1 == 0 .) {time = 0 ;}                                       //если индикатор равен нолю, то время сбрасывается на ноль
       if (line1 > 0 .)
       {
           if (signal_line < s)
           {
               ExtMapBuffer1[i] = Low[i] - 95 .* Point ;
               if (shift >= shet) {ExtMapBuffer2[i] = High[i]+ 95 .* Point ;}
           }
       }
   }
   return ( 0 );
}
//+------------------------------------------------------------------+
 

Güzel gün.

Terminalde sipariş satırına çift tıklarsam değişiklik penceresi açılıyor.

Ancak bir emrin açılış fiyatı ve diğerinin kârını al satırındaysa, son değiştirilen emir açılır.

Sayın Profesyoneller, söyleyin bana, göstergede gerekli sıraya tıklayarak sipariş değiştirme penceresini çağırmak için mql4'te bir işlev var mı?

Neden: