MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 434

 
WinProject :

Lütfen bana grafik nesnesini nasıl kaldıracağımı söyleyin. Değişkenin değerlerinden isimleri oluşturulmuş dikey çizgiler vardır.

stringname=="test1"; string Vertline="line_"+name; ObjectCreate(0,VertLine,OBJ_VLINE,0,zaman,cena); Test1 adında yalnızca dikey çizgiler nasıl kaldırılır?


belki bu fonksiyon işinize yarar:

Grafik alt penceresinde ad önekine göre belirtilen türdeki tüm nesneleri siler.

int NesnelerDeleteAll (
    uzun chart_id , // grafik kimliği
    const dize öneki , // nesne adı öneki
    int      sub_window=BOŞ , // pencere dizini
    int object_type=BOŞ // silinecek nesne türü
);

 
Vladislav Andruschenko :


belki bu fonksiyon işinize yarar:

Grafik alt penceresinde ad önekine göre belirtilen türdeki tüm nesneleri siler.

int NesnelerDeleteAll (
    uzun chart_id , // grafik kimliği
    const dize öneki , // nesne adı öneki
    int      sub_window=BOŞ , // pencere dizini
    int object_type=BOŞ // silinecek nesne türü
);


Teşekkür ederim anladığım kadarıyla bu fonksiyon nesne adındaki ilk alt diziyi önek olarak anlıyor ama nesne adındaki ikinci alt dizi nasıl silinir? Bu amaçla nesne adına StringSubstr ve StringFind kullanmanın bir yolu var mı?

 
WinProject :

Teşekkür ederim anladığım kadarıyla bu fonksiyon nesne adındaki ilk alt diziyi önek olarak anlıyor ama nesne adındaki ikinci alt dizi nasıl silinir? Bu amaçla nesne adına StringSubstr ve StringFind kullanmanın bir yolu var mı?


Beklemek,

Kodu sağladınız:

 string Vertline= "линия_" +name; 


ön ekiniz nerede.

herkes yapar.

bu yüzden size önekle nesneleri silme işlevini teklif ettim.


 "линия_"

Bir satırı son eke göre silmeniz gerekiyorsa, StringFind'i tüm nesnelerin olağan numaralandırmasıyla kullanabilirsiniz .

Örneğin:

 void ObjectsDelete()
  {
string NameEA= "суффикс" ;
   for ( int i= ObjectsTotal ();i>= 0 ;i--)
     {
       if ( StringFind ( ObjectName (i),NameEA)!=- 1 ) ObjectDelete ( ObjectName (i));
     }
  }
 

Teşekkürler Vladislav, her şey çalışıyor, forum üyelerinden bu tür yardımlarla MQL çok daha ilginç. İlginç bir site, teşekkürler!

 

Merhaba. Lütfen pozisyonlar göründükten sonra neden takip etmeyi bıraktığını bulmama yardım et.

Anlamı şudur: iki pozisyon 1, 2 aynı fiyattan açıktır, birincisi takip edilerek kapatılır,   ikinci takip, pozisyon açılış fiyatında sadece bir pozisyon olması şartıyla açılır.

Her şey düzgün çalışıyor, konum 1 kapalı, konum 2 takip ediyor,   ancak farklı bir fiyattan iki konum 3, 4 daha açıldığında, iz daha fazla takip etmez, konum 2.

Neden trollemeyi bırakıyor?

 void Tral_SL_one( int _TrailingStop= 0 , int _TrailingStep= 0 )
  {
   if (_TrailingStop<= 0 )
       return ;
   for ( int i= 0 ; i< OrdersTotal (); i++)
     {
       if (!( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )))
         continue ;
       if ( OrderSymbol ()!= Symbol ())
         continue ;
       if ( OrderMagicNumber ()!=_MagicNumber)
         continue ;
       if ( OrderType ()== OP_BUY )
        {
         if (NumPosByPrice( Symbol (), OP_BUY , OrderOpenPrice (),_MagicNumber)== 1 )
           {
             if ( NormalizeDouble ( Bid - OrderOpenPrice (), Digits )> NormalizeDouble (_TrailingStop * Point , Digits ))
              {
               if ( NormalizeDouble ( OrderStopLoss (), Digits )< NormalizeDouble ( Bid -(_TrailingStop+_TrailingStep- 1 )* Point , Digits ) || OrderStopLoss ()== 0 )
                 {
                   if ( OrderModify ( OrderTicket (), OrderOpenPrice (), NormalizeDouble ( Bid -_TrailingStop* Point , Digits ), OrderTakeProfit (), OrderExpiration ()));
                   
                 }
              }
           }
        }

       if ( OrderType ()== OP_SELL )
        {

         if (NumPosByPrice( Symbol (), OP_SELL , OrderOpenPrice (),_MagicNumber)== 1 )
           {
             if ( NormalizeDouble ( OrderOpenPrice ()- Ask , Digits )> NormalizeDouble (_TrailingStop * Point , Digits ))
              {
               if ( NormalizeDouble ( OrderStopLoss (), Digits )> NormalizeDouble ( Ask +(_TrailingStop+_TrailingStep- 1 )* Point , Digits ) || OrderStopLoss ()== 0 )
                 {
                   if ( OrderModify ( OrderTicket (), OrderOpenPrice (), NormalizeDouble ( Ask +_TrailingStop* Point , Digits ), OrderTakeProfit (), OrderExpiration ()));
                    
                 }
              }
           }
        }
     }
  }
//===
int NumPosByPrice( string sy= "" , int op=- 1 , double pp= 0 , int mn=- 1 ) 
  {
   double px,py;
   int     d,i,k= OrdersTotal (),num= 0 ;

   if (sy== "0" ) sy= Symbol ();
   for (i= 0 ; i<k; i++) 
     {
       if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )) 
        {
         if (( OrderSymbol ()==sy || sy== "" ) && (op< 0 || OrderType ()==op)) 
           {
             if ( OrderType ()== OP_BUY || OrderType ()== OP_SELL ) 
              {
               if (mn< 0 || OrderMagicNumber ()==mn) 
                 {
                  d= MarketInfo ( OrderSymbol (), MODE_DIGITS );
                  px= NormalizeDouble (pp, d);
                  py= NormalizeDouble ( OrderOpenPrice (), d);
                   if (pp<= 0 || px==py) num++;
                 }
              }
           }
        }
     }
   return (num);
  }
 
mila.com :

Merhaba. Lütfen pozisyonlar göründükten sonra neden takip etmeyi bıraktığını bulmama yardım et.

Anlamı şudur: iki pozisyon 1, 2 aynı fiyattan açıktır, birincisi takip edilerek kapatılır,   ikinci takip, pozisyon açılış fiyatında sadece bir pozisyon olması şartıyla açılır.

Her şey düzgün çalışıyor, konum 1 kapalı, konum 2 takip ediyor,   ancak farklı bir fiyattan iki konum 3, 4 daha açıldığında, iz daha fazla takip etmez, konum 2.

Neden trollemeyi bırakıyor?


Sadece büyük bir hatayı işaret edeceğim.

   for ( int i= 0 ; i< OrdersTotal (); i++)
     {
       if (!( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )))
         continue ;
       if ( OrderSymbol ()!= Symbol ())
         continue ;
       if ( OrderMagicNumber ()!=_MagicNumber)
         continue ;
       if ( OrderType ()== OP_BUY )
        {
         if (NumPosByPrice( Symbol (), OP_BUY , OrderOpenPrice (),_MagicNumber)== 1 )


Siparişleri sıralarsınız ve ardından pozisyon sayısını sayma işlevini çalıştırırsınız. böylece NumPosByPrice işlevinde başka bir konum seçme

yani daha fazla inşaat:

 if ( NormalizeDouble ( Bid - OrderOpenPrice (), Digits )> NormalizeDouble (_TrailingStop * Point , Digits ))


parvily çalışmayacak.


bunu birçok şekilde çözebilirsiniz.

Örneğin:

 void Tral_SL_one( int _TrailingStop= 0 , int _TrailingStep= 0 )
  {
   if (_TrailingStop<= 0 )
       return ;
   for ( int i= 0 ; i< OrdersTotal (); i++)
     {
       if (!( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )))
         continue ;
       if ( OrderSymbol ()!= Symbol ())
         continue ;
       if ( OrderMagicNumber ()!=_MagicNumber)
         continue ;
       if ( OrderType ()== OP_BUY )
        {
         if (NumPosByPrice( Symbol (), OP_BUY , OrderOpenPrice (),_MagicNumber)== 1 )
           {
OrderSelect (i, SELECT_BY_POS , MODE_TRADES );
             if ( NormalizeDouble ( Bid - OrderOpenPrice (), Digits )> NormalizeDouble (_TrailingStop * Point , Digits ))


Bu temelde yanlış olsa da, hızlı bir anlayış için yapacaktır.

sonrasında:


 if (NumPosByPrice( Symbol (), OP_BUY , OrderOpenPrice (),_MagicNumber)== 1 )

Ekle :

 OrderSelect (i, SELECT_BY_POS , MODE_TRADES );
 
Vladislav Andruschenko :


Sadece büyük bir hatayı işaret edeceğim.

bunu birçok şekilde çözebilirsiniz.

Teşekkür ederim anladım tralit)

 

Lütfen bana MT4'te uyarı penceresini nasıl açacağımı söyler misiniz? Eskiden sahte bir sinyal oluşturan ve bir uyarı penceresi açan bir komut dosyam vardı, şimdi sistemi yeniden yükledikten sonra internette bulamıyorum. Belki birisi vardır?

 
amenrazp :

Lütfen bana MT4'te uyarı penceresini nasıl açacağımı söyler misiniz? Eskiden sahte bir sinyal oluşturan ve bir uyarı penceresi açan bir komut dosyam vardı, şimdi sistemi yeniden yükledikten sonra internette bulamıyorum. Belki birisi vardır?

uyarı (""); böyle bir senaryo?
 
Vladislav Andruschenko :
uyarmak(""); böyle bir senaryo?

Öyle görünüyor. Buraya ekleme imkanınız var mı?

Neden: