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

 

Ve öyle görünüyor ki, piyasada başka siparişler varsa ancak farklı bir hacimdeyse böyle bir aksaklık meydana geliyor.

Diyelim ki 1 lot için 4 satış ve 1 lot için 4 alışımız var. Ve 1 adet 0,5 lot satın alın.

Nasıl atlanır? Bu işlevde bir tür döngüye mi ihtiyacınız var?

 
EgorKim :

Ve öyle görünüyor ki, piyasada başka siparişler varsa ancak farklı bir hacimdeyse böyle bir aksaklık meydana geliyor.

Diyelim ki 1 lot için 4 satış ve 1 lot için 4 alışımız var. Ve 1 adet 0,5 lot satın alın.

Nasıl atlanır? Bu işlevde bir tür döngüye mi ihtiyacınız var?

Davulcu bir yerlerde kayboldu. Bu, standart kitaplık aracılığıyla çalışmak için en büyük yeteneğidir. ne seçeceğimi bilmiyorum

       if (m_position.SelectByIndex(i))

Evet ve anlamak tembel.

Çözüme biraz farklı yaklaşırdım. Al ve Sat pozisyonlarının biletleri ile ayrı ayrı iki dizi oluşturur ve ikinci döngüde pozisyonları çiftler halinde kapatırdım.

Veya bir iki boyutlu dizi mümkündür. Ancak dizinleri dikkatlice dağıtmanız gerekir. Kaybolmamak için...

 
Alexey Viktorov :

Davulcu bir yerlerde kayboldu. Bu, standart kitaplık aracılığıyla çalışmak için en büyük yeteneğidir. ne seçeceğimi bilmiyorum

Evet ve anlamak tembel.

Çözüme biraz farklı yaklaşırdım. Al ve Sat pozisyonlarının biletleri ile ayrı ayrı iki dizi oluşturur ve ikinci döngüde pozisyonları çiftler halinde kapatırdım.

Veya bir iki boyutlu dizi mümkündür. Ancak indeksleri dikkatli bir şekilde dağıtmak gerekiyor. Kaybolmamak için...

Ben kendim düşündüm. İki dizinin kodunu paylaşabilir misiniz? Kendim uygulayamıyorum.

Geçici bir çözüm olarak sınırlı bir döngü yaptı. Bu kodun nasıl doğru olduğunu bilmiyorum, ama en azından bir şey. Gerçek, kuraların ezilmesiyle garip bir şekilde kapanır.

Görünüşe göre, yaklaşanların hacimlerinin de ezilme olmaması için karşılaştırılması gerekiyor. Herkes, vazgeçiyorum

 void CloseBy()
  {
   int s= 10 ;
   do // цикл
     {
      s--;
       ulong ticket_buy= ULONG_MAX ;
       ulong ticket_sell= ULONG_MAX ;
       for ( int i= 0 ;i< PositionsTotal ();i++) // ATTENTION! Here, specially began a detour with "0"
         if (m_position.SelectByIndex(i)) // selects the position by index for further access to its properties
           {
             if (m_position.PositionType()== POSITION_TYPE_BUY && ticket_buy== ULONG_MAX )
               ticket_buy=m_position.Ticket();

             if (m_position.PositionType()== POSITION_TYPE_SELL && ticket_sell== ULONG_MAX )
               ticket_sell=m_position.Ticket();
           }
       if (ticket_buy!= ULONG_MAX && ticket_sell!= ULONG_MAX )
         m_trade.PositionCloseBy(ticket_buy,ticket_sell);
     }
   while (s> 1 );// цикл
   return ;
  }
 
EgorKim :

Ben kendim düşündüm. İki dizinin kodunu paylaşabilir misiniz ?

Hayır, birkaç nedenden dolayı.

1. Ben kendim sayaç kapama kullanmıyorum.

2. Hazır kod yoktur ve özel olarak yazma isteği yoktur.

3. Dün böyle bir düşüncem vardı. Hatta iki. Ve bugün başka, yarın, Allah korusun, bir tane daha olacak. Buna göre, sadece şu anda kafamda olanı yazıyorum.

Ve asıl sebep - Bence yardım etmek ve başkasının işini yapmak iki büyük fark.

Ben sadece yardım edebilirim. Ama size yardımcı olamayacağım , standart kütüphaneyi pek kullanmıyorum ve kodunuzu anlamak için SB'yi anlamam gerekiyor.

 

Merhaba

Lütfen bana grafikteki sonucu yalnızca grafikte belirli bir aralıkta veya alanda gösterecek bir gösterge oluşturmanıza izin veren bir gösterge veya işlev örneği söyleyin!

örneğin, 1:00'den 2:35'e kadar terminal zamanı ve bu seçim fare ile doğrudan grafik üzerinde yapılmalıdır.


Seçilen aralıktaki alım veya satım mumlarının sayısını özellikle saymam gerekiyor.

 
Milhail Novgorodcev :

Merhaba

Lütfen bana grafikteki sonucu yalnızca grafikte belirli bir aralıkta veya alanda gösterecek bir gösterge oluşturmanıza izin veren bir gösterge veya işlev örneği söyleyin!

örneğin, 1:00'den 2:35'e kadar terminal zamanı ve bu seçim fare ile doğrudan grafik üzerinde yapılmalıdır.


Seçilen aralıktaki alım veya satım mumlarının sayısını özellikle saymam gerekiyor.

Aklıma gelen ilk şey:

  • komut dosyası, iki giriş parametresi - zaman ve zaman
  • bir şekil elle çizilir - bir dikdörtgen, giriş parametrelerinde dikdörtgenin adıyla bir komut dosyası başlatılır
  • belirli bir adla bir dikdörtgenin oluşturulmasını izleyen uzman veya gösterge ...

 
Milhail Novgorodcev :

Merhaba

Lütfen bana grafikteki sonucu yalnızca grafikte belirli bir aralıkta veya alanda gösterecek bir gösterge oluşturmanıza izin veren bir gösterge veya işlev örneği söyleyin!

örneğin, 1:00'den 2:35'e kadar terminal zamanı ve bu seçim fare ile doğrudan grafik üzerinde yapılmalıdır.


Seçilen aralıktaki alım veya satım mumlarının sayısını özellikle saymam gerekiyor.

Sorun nedir?

OnChartEvent() 'de, iki noktada fare tıklama zamanı sırayla iki değişken atanır (şimdiki saat değil, tıklanan çubuğun saati) ve her iki değişkenin de sıfır olmaması koşuluyla bir hesaplama yapılır. bu aralıkta. Alınan değerlerin çıktısından sonra bu değişkenler sıfırlanır ve bir sonraki fare tıklamasını bekler.

Tek bir sorun var, ilk tıklama yanlışlıkla yapılırsa nasıl iptal edilir. Ancak, belgeleri dikkatlice okuyarak bir şeyler bulabileceğinizi düşünüyorum. Örneğin, bir tuşa basmak veya fare tekerleğini kaydırmak...

 

Bana yardım et lütfen!

Tarihte ekran görüntüsü almak için senaryoyu düzenlemekten zaten bıktım. Komut dosyası her gün sabah 8'e kaydırılmalı ve ekran görüntüsü almalıdır.

Komut dosyası düzgün çalışmıyor.

 //+------------------------------------------------------------------+
//|                                                      ProjectName |
//|                                      Copyright 2012, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
  {
   ChartSetInteger ( 0 , CHART_SHIFT , false );
   ChartSetInteger ( 0 , CHART_AUTOSCROLL , false );
   int _bars= Bars ( Symbol (), 0 );
 
   for ( int i= 0 ; i<_bars; i++)
     {
       MqlDateTime time_now;
       //datetime candle_time=iTime(NULL,_period,0);
       TimeToStruct ( iTime ( NULL , _Period ,i),time_now);   // change time to struct

       if (time_now.hour== 8 && time_now.min== 0 )
        {
         //--- прокрутим на 10 баров вправо от начала истории 
         ChartNavigate ( 0 , CHART_BEGIN ,i);
         Sleep ( 5000 );
         //--- получим номер самого первого видимого на графике бара (нумерация как в таймсерии) 
         long first_bar= ChartGetInteger ( 0 , CHART_FIRST_VISIBLE_BAR , 0 );
         Print (first_bar);
         string name=_Sumbol_N( string ( Symbol ()))+ "_" + Symbol ()+ "_" +TFMigrate( Period ())+ " " + string (time_now.year)+ "." + string (time_now.mon)+ "." + string (time_now.day)+ " " + string (time_now.hour)+ "." + string (time_now.min);

         ChartScreenShot ( 0 ,name+ " 2560_1600.PNG" , 2560 , 1600 , ALIGN_LEFT );
         //i=5;
        };
     };

//Print(iTime(NULL,_Period,0));

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
string _Sumbol_N( string ft)
  {
   if (ft ==   "EURUSD" ) return ( "01" );
   if (ft ==   "GBPUSD" ) return ( "02" );

   return "" ;
  }
//+------------------------------------------------------------------+
string TFMigrate( int tf)
  {
   switch (tf)
     {
       case 0 : return ( "CURRENT" );
       case 1 : return ( "M1" );
       case 5 : return ( "M5" );
       case 15 : return ( "M15" );
       case 30 : return ( "M30" );
       case 60 : return ( "H1" );
       case 240 : return ( "H4" );
       case 1440 : return ( "D1" );
       case 10080 : return ( "W1" );
       case 43200 : return ( "MN1" );

     }
  }
//+------------------------------------------------------------------+
 
oleg360 :

Bana yardım et lütfen!

Tarihte ekran görüntüsü almak için senaryoyu düzenlemekten zaten bıktım. Komut dosyası her gün sabah 8'e kaydırılmalı ve ekran görüntüsü almalıdır.

Komut dosyası düzgün çalışmıyor.

Şimdiye kadar, kaydırma işlevi arızalı (daha doğrusu, tahmin edilemez şekilde çalışıyor). Yönetici anlar.

 
Vladimir Karputov :

Şimdiye kadar, kaydırma işlevi arızalı (daha doğrusu, tahmin edilemez şekilde çalışıyor). Yönetici anlar.

Teşekkür ederim!