[ARŞİV!] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde - 4. - sayfa 412

 

MQL Eğitiminde Standart Fonksiyonlar bölümünde, Grafik İşlemleri bölümünde, WindowHandle işlevi aşağıdaki açıklama ile verilmiştir: " ... belirtilen grafiği içeren sistem penceresi tutamağını döndürür ".

Soru : "pencere sistemi tutamacı" ne (nedir) ne anlama geliyor ve ne için?

s. _ S. _ forumu kirletmemek adına şimdiden teşekkürler

 
7777877 :

MQL Eğitiminde Standart Fonksiyonlar bölümünde, Grafik İşlemleri bölümünde, WindowHandle işlevi aşağıdaki açıklama ile verilmiştir: " ... belirtilen grafiği içeren sistem penceresi tutamağını döndürür ".

Soru : "pencere sistemi tutamacı" ne (nedir) ne anlama geliyor ve ne için?

s. _ S. _ forumu kirletmemek adına şimdiden teşekkürler


Cevap:

pencere kolu bir sayıdır

pencere ile sonraki çalışma için pencere tutamacı gereklidir

 
int start()
{
   for ( int i= OrdersHistoryTotal ()- 1 ;i>= 0 ; i--)
  {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_HISTORY))
    {
       if ( TimeDay ( OrderOpenTime ())==Day()
        && TimeMonth ( OrderOpenTime ())== Month ()
        && TimeYear ( OrderOpenTime ())== Year ())
         if ( OrderType ()==OP_SELL && OrdersTotal ()== 0 || OrdersHistoryTotal ()== 0 )
         {
             OrderSend ( Symbol (), OP_BUY, 0.1 , Ask, 5 ,Bid- 25 * Point ,Bid+ 25 * Point , "" , 0 , 0 , Blue );
         }
         if ( OrderType ()==OP_BUY && OrdersTotal ()== 0 || OrdersHistoryTotal ()== 0 )
         {
             OrderSend ( Symbol (), OP_SELL, 0.1 , Bid, 5 ,Ask- 25 * Point ,Ask+ 25 * Point , "" , 0 , 0 , Red );
         }
    }
  }
   return ( 0 );
}

merhaba! kod sorunu! Sırayla sat, koy, sat, vb. Açmak için emirlere ihtiyacım var. ancak hesaplama gün içinde, ertesi gün yeni bir şekilde, önceki günün açılış emirlerinin sırasını dikkate almadan gerçekleştirilir! bu yeni bir gün yeni bir döngü! yukarıdaki kodun böyle bir şeye benzemesi gerektiğini düşünüyorum! sadece şimdi danışman tek bir sipariş açmıyor! Ne olduğunu anlayamıyorum ... biliyorsan söyle!!

 
nasıl doğru yapacağımı söyle.
 Bekleyen emirlerin yeni bir gün geldiğinde kapatılmasını istiyorum, eğer yerine getirilmezse... Yazdım ama bir şeyler olmuyor. 4051 hatası 
   if ( iTime ( Symbol (), PERIOD_D1 , 0 ) != New_Day_DateTime)
   {
         New_Day_DateTime = iTime ( Symbol (), PERIOD_D1 , 0 ); 
         GlobalVariableSet ( "gNew_Day_DateTime" ,New_Day_DateTime); 
  
for ( i= 1 ;i<= OrdersTotal (); i++)         
     {
       if ( OrderSelect (i- 1 ,SELECT_BY_POS)==true) 
        {                                      

         if ( OrderSymbol ()!= Symb) continue ;    
          Tip= OrderType ();                   
         if (Tip== 0 ) continue ;           

            Limit_Stop=Tip;
             if ( OrderMagicNumber ()== 3 )                     
            {Ticket_B= OrderTicket ();}
        }                                    
     }                                       

   while (true)                                
     {
       if (Limit_Stop==- 1 )                      
        {
         break ;                                      
        }
       Ans_B= OrderDelete (Ticket_B);             

       if (Ans_B==true)                          
        {
         break ;                                 
     }   }
        
for ( i= 1 ; i<= OrdersTotal (); i++)         
     {        
     if ( OrderSelect (i- 1 ,SELECT_BY_POS)==true) 
        {                                      

         if ( OrderSymbol ()!= Symb) continue ;    
          Tip= OrderType ();                   
         if (Tip== 1 ) continue ;                 

       if ( OrderMagicNumber ()== 4 ) 
      {Ticket_S= OrderTicket ();}              
     }
     }
   while (true)                                
     {
       if (Limit_Stop==- 1 )                      
        {
         break ;                                      
        }
        Ans_S= OrderDelete (Ticket_S);            

       if (Ans_S==true) 
        {
         break ; 
        }
}
 
Egori4 :


Yani, bekleyen bir emir açarken, 23:59 deyin, bekleyen emrin sona erme süresini ayarlayın ve kendi kendine kapanacaktır.

nt OrderSend( dize sembolü, int cmd, çift hacim, çift fiyat, int kayma, çift stoploss, çift kâr alma, dize yorumu=NULL, int magic=0, datetime expiration=0 , color arrow_color=CLR_NONE)

 
lowech :

merhaba! kod sorunu! Sırayla sat, koy, sat, vb. Açmak için emirlere ihtiyacım var. ancak hesaplama gün içinde, ertesi gün yeni bir şekilde, önceki günün açılış emirlerinin sırasını dikkate almadan gerçekleştirilir! bu yeni bir gün yeni bir döngü! yukarıdaki kodun böyle bir şeye benzemesi gerektiğini düşünüyorum! sadece şimdi danışman tek bir sipariş açmıyor! Ne olduğunu anlayamıyorum ... biliyorsan söyle!!


Ve neden emirleri açsın ki, özellikle tarih boşsa. Ve kodu insanca nasıl ekleyeceğinizi öğrenin, başkalarının gönderilerini düzenlemeyi sevmiyorum.
 
Sepulca :
teşekkür ederim! Deneyeceğim...
 

Bu Uzman Danışmana nasıl eklenir

//+------------------------------------------- --------------------+

//| CCI.mq4 |

//| Telif hakkı 2012, MetaQuotes Software Corp. |

//| http://www.metaquotes.net |

//+------------------------------------------- --------------------+

#property telif hakkı "Telif hakkı 2012, MetaQuotes Software Corp."

#özellik bağlantısı "http://www.metaquotes.net"



harici çift LotTrend = 0.1;

harici int TP=100;

harici int SL=250;


//+------------------------------------------- --------------------+

//| uzman başlatma işlevi |

//+------------------------------------------- --------------------+

int init()

{

//----

//----

dönüş(0);

}

//+------------------------------------------- --------------------+

//| uzman sıfırlama işlevi |

//+------------------------------------------- --------------------+

int tanım()

{

//----

//----

dönüş(0);

}

//+------------------------------------------- --------------------+

//| uzman başlatma işlevi |

//+------------------------------------------- --------------------+

int başlangıç()

{

if (OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==Yanlış)

{

if (Teklif>iMA(Symbol(),PERIOD_M15,100,0,1,4,0)

)

{

OrderSend(Symbol(),OP_BUY,LotTrend,Ask,0,Ask-SL*Point,Ask+TP*Point,0,0,0,Yeşil);

}

if (Teklif<iMA(Symbol(),PERIOD_M15,100,0,1,4,0)

)

{

OrderSend(Symbol(),OP_SELL,LotTrend,Bid,0,Bid+SL*Point,Bid-TP*Point,0,0,0,Green);

}

}



//----

dönüş(0);

}

//+------------------------------------------- --------------------+

1. Anlaşmayı sadece mumun kapanışında açmak için (fiyat SMA'yı geçtiğinde)

 

Merhaba! MQL4'teki göstergelerle ilgili bir soru hakkında endişeliyim ve tam olarak anlayamıyorum... Örneğin, basit bir fraktal gösterge var:

 //+===========================================================================+ 
//|                                                                  FRAC.mq4 | 
//+===========================================================================+ 
// Параметры: 
// 
// По умолчанию frac_5 - оранжевый, frac_3 - темно-синий. 
//----- 
// History    - определяет на сколько глубоко в историю вам нужно отображение  
//              индикатора (в количестве свечей). Минимальное значение = 2. 
//-----  
// frac_3     - если значение "on", то frac_3 отображается, иначе нет. 
//-----  
// frac_5     - если значение "on", то frac_5 отображается, иначе нет. 
//+===========================================================================+ 
#property indicator_chart_window 
#property indicator_buffers             4      
#property indicator_color1  MidnightBlue 
#property indicator_color2  MidnightBlue  
#property indicator_color3        Orange 
#property indicator_color4        Orange 
//-----         
extern int          history     =     500 ; 
extern string        frac_3     =     "on" ;   
extern string        frac_5     =     "on" ;
extern int           metka      =       20 ;
//-----         
double FRAC_3_POS[]; 
double FRAC_3_NEG[]; 
double FRAC_5_POS[]; 
double FRAC_5_NEG[]; 

//+===========================================================================+ 

int init() 
   { 
     SetIndexBuffer ( 0 , FRAC_3_POS);  
              
     SetIndexStyle   ( 0 , DRAW_ARROW , 0 , 3 ); 
      
     SetIndexArrow   ( 0 , 217 ); 
   //-----         
     SetIndexBuffer ( 1 , FRAC_3_NEG);    
            
     SetIndexStyle   ( 1 , DRAW_ARROW , 0 , 3 ); 
      
     SetIndexArrow   ( 1 , 218 ); 
   //-----         
     SetIndexBuffer ( 2 , FRAC_5_POS);      
          
     SetIndexStyle   ( 2 , DRAW_ARROW , 0 , 3 ); 
      
     SetIndexArrow   ( 2 , 217 ); 
   //-----         
     SetIndexBuffer ( 3 , FRAC_5_NEG);        
        
     SetIndexStyle   ( 3 , DRAW_ARROW , 0 , 3 ); 
      
     SetIndexArrow   ( 3 , 218 ); 
      
     return ( 0 ); 
   } 

//+===========================================================================+ 

int start() 
   { 
     int i,Counted_bars; 
     
    Counted_bars = IndicatorCounted (); 
     
     i = Bars - Counted_bars - 1 ; 
     
     if (history < 2 ) 
      
         history = 2 ; 
                   
     if (i > history - 1 ) 
      
         i = history - 1 ;
         //i=Bars -  1;
     //----- 
     if ( Digits <= 3 ) 
       
         double K = 0.01 ; 
       
     else        K = 0.0001 ;     
              
     while (i >= 0 ) 
          { 
           double FR_3P= 0 , FR_3N= 0 , 
                  FR_5P= 0 , FR_5N= 0 ; 
           //-----         
           if (High[i+ 1 ] >= High[i+ 2 ] && High[i+ 1 ] >= High[i]) 
            
               FR_3P = High[i+ 1 ] + metka*K; 
           //-----         
           if (Low[i+ 1 ] <= Low[i+ 2 ] && Low[i+ 1 ] <= Low[i]) 
            
               FR_3N = Low[i+ 1 ] - metka*K; 
           //-----         
           if (High[i+ 2 ] >= High[i+ 4 ] && High[i+ 2 ] >= High[i+ 3 ] && High[i+ 2 ] >= High[i+ 1 ] && High[i+ 2 ] >= High[i]) 
            
               FR_5P = High[i+ 2 ] + metka*K; 
           //-----         
           if (Low[i+ 2 ] <= Low[i+ 4 ] && Low[i+ 2 ] <= Low[i+ 3 ] && Low[i+ 2 ] <= Low[i+ 1 ] && Low[i+ 2 ] <= Low[i]) 
            
               FR_5N = Low[i+ 2 ] - metka*K; 
           //-----  
           if (frac_3 != "on" ) 
              { 
               FR_3P = EMPTY; 
                 
               FR_3N = EMPTY; 
              }  
           //-----  
           if (frac_5 != "on" ) 
              { 
               FR_5P = EMPTY; 
                 
               FR_5N = EMPTY; 
              }       
           //-----  
            
               FRAC_3_POS[i+ 1 ] = FR_3P; 
                
               FRAC_3_NEG[i+ 1 ] = FR_3N; 
                
               FRAC_5_POS[i+ 2 ] = FR_5P; 
                
               FRAC_5_NEG[i+ 2 ] = FR_5N; 
               
               i--; 
          } 
       return ( 0 ); 
   } 
//+===========================================================================+ 

Bu formda derlenirse, grafiğin sol kenarını genişletirken ve geçmişi yüklerken, başarısız olmaya başlar ve olmaması gereken yerlerde işaretler gösterir (ekteki ekran görüntüsüne bakın). Kodun bir kısmını yorumlarsanız:

 if (history < 2 ) 
      
         history = 2 ; 
                   
     if (i > history - 1 ) 
      
         i = history - 1 ;

Sonra bu tür aksaklıklar ortadan kalkar... gösterge dizisinin yalnızca "boş olmayan" öğeleri doldurulursa ve etiketin olmadığı yerde gösterge değeri sıfıra ayarlanmadıysa, geçmiş yüklendiğinde aynı hatalar görünür...

Bu neden oluyor? Görünüşe göre, geçmişi yüklerken tüm göstergeyi yeniden hesaplamak gerekli mi? Ve neden "boş" öğelerin değerlerini geçersiz kılmak gerekli? sıralamak?

Çubuklar soldan sağa indekslenirse, geçmiş yüklenirken, çubuk indeksleri değişecek ve yeniden hesaplama yapılmadan gösterge yanlış görüntülenecekti, o zaman böyle bir aksaklık anlaşılabilirdi… Ama MT4'te çubuklar indekslenir. sağdan sola, yani geçmişi yüklerken, bu çubukların endeksleri , olan, aynı kalmalıydı (ve gösterge değerleri de), o zaman göstergeyi neden yeniden hesapla ve bu etiket kaymaları nereden geliyor?

 

Meslektaşlarım, bana aşağıdaki sorunun cevabını söyleyin.
Ellerimle 4 alış emri açıyorum, oluşturulan emirleri teklif fiyatından silen, kaymanın 100 puana ayarlı, bir döngüde silme, akışın meşgul olup olmadığını kontrol eden ve teklif güncelleme mevcut olan bir danışman başlatıyorum. Tüm döngüde siparişler neden silinmiyor? günlük, silme işleminin start() işlevinin birkaç başlatmasını aldığını gösterir.
danışman kodu

 int start()  
  {
   Print ( "Пришёл новый тик" );
   int total= OrdersTotal ();
   Print ( "Всего ордеров = " +total);
   for ( int i= 0 ;i<total;i++)
       if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES))
         {
         //Print("Всего ордеров = "+OrdersTotal());
         Print ( "удаляем ордер = " +i+ " тикет ордера = " + OrderTicket ());
         while ( IsTradeContextBusy ())
            {
             Print ( "Торговый поток занят" );
             Sleep ( 100 );
            }
         RefreshRates ();       
         OrderClose ( OrderTicket (), OrderLots (),Bid, 100 , 0 );
         Print ( "ошибка=" + GetLastError ());
         }  
   return ( 0 );
  }
       

işte danışman günlüğü:

17:16:59 geçici EURUSD,M1: başarıyla yüklendi
17:17:51 temp EURUSD,M1: Yeni onay geldi
17:17:51 geçici EURUSD,M1: Toplam siparişler = 4
17:17:51 geçici EURUSD,M1: siparişi sil = 0 sipariş bileti = 2808657
17:17:52 geçici EURUSD,M1: kapat #2808657 1.28969 fiyattan 1.00 EURUSD satın al 1.28973
17:17:52 geçici EURUSD,M1: error=0
17:17:52 geçici EURUSD,M1: siparişi sil = 1 sipariş bileti = 2808659
17:17:52 geçici EURUSD,M1: kapat #2808659 1.28974 fiyattan 1.00 EURUSD satın al 1.28975
17:17:52 geçici EURUSD,M1: error=0
17:17:54 geçici EURUSD,M1: Yeni onay geldi
17:17:54 geçici EURUSD,M1: Toplam siparişler = 2
17:17:54 geçici EURUSD,M1: siparişi sil = 0 sipariş bileti = 2808658
17:17:54 geçici EURUSD,M1: kapat #2808658 1.28969 fiyattan 1.00 EURUSD satın al 1.28976
17:17:54 geçici EURUSD,M1: error=0
17:17:56 geçici EURUSD,M1: Yeni onay geldi
17:17:56 geçici EURUSD,M1: Toplam siparişler = 1
17:17:56 geçici EURUSD,M1: siparişi sil = 0 sipariş bileti = 2808660
17:17:56 geçici EURUSD,M1: kapat #2808660 1.28976 fiyattan 1.00 EURUSD satın al 1.28977
17:17:56 geçici EURUSD,M1: error=0