Yeni başlayanlardan sorular MQL5 MT5 MetaTrader 5 - sayfa 1206

 
Artyom Trishkin :

nnc_arr_in dizisinin boyutunu yapı dizisinin 0 hücresindeki boyutundan 1 fazla değiştirin:

Teşekkür ederim.

 

Soru   mql5

İki açık pozisyon var ve bir sinyal var ( Flag == true )

sadece bir pozisyonun kapatılması gereken, daha fazla kârlı olan.

nasıl   sadece daha fazla kârı olanı mı kapatıyorsun?

bu olayla en iyi nasıl başa çıkılır.

Bunu şöyle yapmaya çalışıyorum:

if (invertStart == true ) // получил событие, о том что есть две позиции и одну можно закрыть.
   {     
   int npos_L1= 0 ;   NPos_L1(npos_L1);
   if (npos_L1== 1 )
   {
   int positions= PositionsTotal ();
   for ( int i= 0 ;i<=positions;i++)
   {
   ulong ticket= PositionGetTicket (i);
   if (ticket!= 0 && PositionGetInteger ( POSITION_TYPE )== POSITION_TYPE_SELL && POSITION_PROFIT >= 50 ) //  50  допустим...
   {
   m_trade.PositionClose(ticket); 
   i--;
   invertStart = false ;
   return ;  
   }
   }
   }
   }  

Sonuç olarak, son açık pozisyon kapatılır.

Lütfen bana nasıl doğru bir şekilde uygulanacağını söyle. bir örnek isterim. Referansları ve primerleri okudum, ancak incelikleri her zaman anlamıyorum.

 
Vladpedro :

Soru   mql5

İki açık pozisyon var ve bir sinyal var ( Flag == true )

sadece bir pozisyonun kapatılması gereken, daha fazla kârlı olan.

nasıl   sadece daha fazla kârı olanı mı kapatıyorsun?

Bu olayla en iyi nasıl başa çıkılır.

Bunu şöyle yapmaya çalışıyorum:

Sonuç olarak, son açık pozisyon kapatılır.

Lütfen bana nasıl doğru şekilde uygulayacağımı söyle. bir örnek isterim. Referansları ve primerleri okudum, ancak incelikleri her zaman anlamıyorum.

kod:

   ulong ticket= ULONG_MAX ;
   double profit= DBL_MIN ;
   if (invertStart == true )   // получил событие, о том что есть две позиции и одну можно закрыть.
     {
       int positions= PositionsTotal ();
       for ( int i= PositionsTotal ()- 1 ; i>= 0 ; i--)
        {
         ulong tmp_ticket= PositionGetTicket (i);
         if (ticket!= 0 )
           {
             double tmp_profit= PositionGetDouble ( POSITION_PROFIT );
             if (tmp_profit>profit)
              {
               ticket=tmp_ticket;
               profit=tmp_profit;
              }
           }
        }
       //---
       if (ticket!= ULONG_MAX )
         m_trade.PositionClose(ticket);
     }
 
Vladimir Karputov :

kod:

Çok teşekkürler, işe yarıyor gibi görünüyor. Böyle bir yerel değişken zaten mevcut olduğundan, yalnızca biletten şikayet eder.

'bilet' beyanı yerel değişkeni gizler Lim_Stop_03_Sell_pos_06.mq5 299 on

Görünüşe göre bu biletlerin bazılarının içeride saklanması gerekiyor.

 
Vladpedro :

Çok teşekkür ederim, işe yarıyor gibi görünüyor. Böyle bir yerel değişken zaten mevcut olduğundan, yalnızca biletten şikayet eder.

'bilet' beyanı yerel değişkeni gizler Lim_Stop_03_Sell_pos_06.mq5 299 on

Görünüşe göre bu biletlerin bazılarının içeride saklanması gerekiyor.

Değişkeni yeniden adlandır

 ulong ticket= ULONG_MAX ;

içinde

 ulong close_ticket= ULONG_MAX ;

ve elbette kodda yeniden adlandırmayı unutmayın.

 
Vladimir Karputov :

Değişkeni yeniden adlandır

içinde

Ve elbette, kodda da yeniden adlandırmayı unutmayın.

Evet teşekkürler, zaten anladım... yeniden adlandırıldı.

 

Tünaydın!

Fiyat üst satırın üstünde veya alt satırın altındaysa (çizgi yatay veya eğimliyse ve grafik üzerinde hareket ettirilebilir) bir e-posta veya push mektubu gönderen bir danışmanı nerede bulabileceğimi lütfen söyleyin.

Elinde olan varsa lütfen paylaşsın.

Yalnızca MT5'te

Teşekkür ederim!

 

EA'da göstergeyi bağlarsam

 int OnInit ()
{
   ind_handle = iCustom ( _Symbol , indperiod, "MyInd" , indParam);
   return ( INIT_SUCCEEDED );
}

ve sonra CopyBuffer(ind_handle, 0, 1, 3, buffer1) kullanarak gösterge arabelleğini alıyorum


her tikte gösterge arabelleklerini okumak gerekli mi?

Bir cevaba ve tercihen kaynağa ihtiyacımız var - rıhtımlar, makaleler:

1. gösterge her zaman paralel olarak hesaplanır

2. gösterge yalnızca CopyBuffer() çağrısı sırasında hesaplanacaktır.

 
Igor Makanu :

EA'da göstergeyi bağlarsam

ve sonra CopyBuffer(ind_handle, 0, 1, 3, buffer1) kullanarak gösterge arabelleklerini alıyorum


her tikte gösterge arabelleklerini okumak gerekli mi?

Bir cevaba ve tercihen kaynağa ihtiyacımız var - rıhtımlar, makaleler:

1. gösterge her zaman paralel olarak hesaplanır

2. gösterge yalnızca CopyBuffer() çağrısı sırasında hesaplanacaktır.

Igor, tamamen mantıklı, gösterge doğru yazılırsa, yalnızca mevcut çubuğun değerleri değişebilir. Bu nedenle, mevcut değerlere ihtiyaç duyulursa, bu taze değerleri kullanmadan hemen önce CopyBuffer'a ihtiyaç vardır. Ve eğer tarihsel değerlere ihtiyaç duyulursa, değişmezler ve onları tekrar okumak için hiçbir sebep yoktur.

Bir yerde, her kene üzerindeki göstergenin hesaplanması hakkında bilgi var. Hatırladığım kadarıyla, varsayılan olarak gösterge yalnızca erişildiğinde yeniden hesaplanır, ancak her tikte yeniden hesaplanmasını zorlamak mümkündür. Bunun nasıl yapılacağı belgelerde bulunmalıdır.

 
Alexey Viktorov :
Igor, tamamen mantıklı, gösterge doğru yazılırsa, yalnızca mevcut çubuğun değerleri değişebilir. Bu nedenle, mevcut değerlere ihtiyaç duyulursa, bu taze değerleri kullanmadan hemen önce CopyBuffer'a ihtiyaç vardır. Ve eğer tarihsel değerlere ihtiyaç duyulursa, değişmezler ve onları tekrar okumak için hiçbir sebep yoktur.

Bir yerde, her kene üzerindeki göstergenin hesaplanması hakkında bilgi var. Hatırladığım kadarıyla, varsayılan olarak gösterge yalnızca erişildiğinde yeniden hesaplanır, ancak her tikte yeniden hesaplanmasını zorlamak mümkündür. Bunun nasıl yapılacağı belgelerde bulunmalıdır.

Tamam, hala test etmek zorundasın

sorun göstergeyi yeniden çizmekte , henüz göstergeyi yeniden yazmak istemiyorum