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

 
Arkadaşlar sinyal ayarları ile ilgili bir sorum daha var.
Sorun şudur: tedarikçinin siparişleri kapatıldığında, abonenin siparişleri beklemeye devam eder. Görünüşe göre yayılmadaki farktan dolayı. Abonenin anlaşmaları tedarikçide kapandığında anında kapandığından nasıl emin olabilirim? Hangi ayar değiştirilmelidir?
 
Leo59 :
Teşekkürler Alexey!!!! 4-ki için))))

Yani... Eski hindimi buldum ve kestim. Senin için yazmayacağım)) ama bir itme için gidecek. Oraya yorumlar ekledim, değişkenlerin isimleri isimlerden belli.

 datetime date[]; // тут будем хранить данные времени баров, которые видны на экране
// если нужны другие данные баров, заводим соотв. массивы 

void DoWork( bool redrawAll = false )
{
     int visibleBars = 1 , firstVisibleBars = 0 ;
    visibleBars = ( int ) ChartGetInteger ( 0 , CHART_VISIBLE_BARS );
    firstVisibleBars = ( int ) ChartGetInteger ( 0 , CHART_FIRST_VISIBLE_BAR );
    
     ArrayResize (date, visibleBars + 10 ); // выделяем память с запасом

     // так можно узнать масштаб графика, может пригодится
     int scale = ( int ) ChartGetInteger ( 0 , CHART_SCALE );
     // копируем данные времен баров 
     if ( CopyTime ( Symbol (), Period (), startpos, visibleBars, date) == - 1 )
    {
         Print ( "Не удалось скопировать значения времени! Код ошибки = " , GetLastError ());
         return ;
    }

     //--- определим шаг, если надо работать с масштабом
     int step = 1 ;
     switch (scale)
    {
     case 0 :
        step = 12 ;
         break ;
     case 1 :
        step = 6 ;
         break ;
     case 2 :
        step = 4 ;
         break ;
     case 3 :
        step = 2 ;
         break ;
    }
     double priceMin = ChartGetDouble ( 0 , CHART_PRICE_MIN , 0 );
     double priceMax = ChartGetDouble ( 0 , CHART_PRICE_MAX , 0 );

     for ( int i = visibleBars - 1 ; i >= 0 ; i--)
    {
         /*
        проходимся по всем видимым барам и ищем стрелки, искать можно путями:
        1. Изначально при создании стрелок надо формировать имена стрелок с привязкой ко времени, например
        string name = "UpArrow"  + IntegerToString(TimeCurrent());
        тогда тупо ищем стрелку с таким именем и далее двигаем, куда надо
        2. Заносить стрелки в структуры и класть их в хештаблицу, первый проще
        */
    }
    
}
 
Artem Prischepa :
Arkadaşlar sinyal ayarları ile ilgili bir sorum daha var.
Sorun şudur: tedarikçinin siparişleri kapatıldığında, abonenin siparişleri beklemeye devam eder. Görünüşe göre yayılmadaki farktan dolayı. Abonenin anlaşmaları tedarikçide kapandığında anında kapandığından nasıl emin olabilirim? Hangi ayar değiştirilmelidir?

Ticaret de neredeyse anında kapanmalıdır. Sorular:

  1. Abonenin terminali şu anda açık mı?
  2. Lütfen sorunlu gün için terminal günlük dosyasını ekleyin.
 
Alexey Volchanskiy :

Yani... Eski hindimi buldum ve kestim. Senin için yazmayacağım)) ama bir itme için gidecek. Oraya yorumlar ekledim, değişkenlerin isimleri isimlerden belli.

Ek olarak, bu satıra gösterge alt penceresinin numarasını koymak gerekir? Sadece tam olarak neye ihtiyaç olduğunu bilmiyorum.

 ChartGetDouble ( 0 , CHART_PRICE_MIN , 0 );
 
Alexey Volchanskiy :

Ek olarak, bu satıra gösterge alt penceresinin numarasını koymak gerekiyor mu? Sadece tam olarak neye ihtiyaç olduğunu bilmiyorum.

Ooooops, sabah dağılmış, koddaki grafik olayının işlenmesini kopyala-yapıştır yapmadı

 void OnChartEvent ( const int id,
                   const long &lparam,
                   const double &dparam,
                   const string &sparam)
{
     if (id == CHARTEVENT_CHART_CHANGE )
    {
        DoWork( true );
         ChartRedraw ();
    }    
}
 
Alexey Volchanskiy :

Yani... Eski hindimi buldum ve kestim. Senin için yazmayacağım)) ama bir itme için gidecek. Oraya yorumlar ekledim, değişkenlerin isimleri isimlerden belli.

Alex'e yardımın için teşekkürler!

Ve adımı ve genel olarak işlevselliğini nereye sabitlersiniz?

     //--- определим шаг, если надо работать с масштабом
     int step = 1 ;

Ve işte burada:

         2 . Заносить стрелки в структуры и класть их в хештаблицу, первый проще

Asla yapmadım. Mümkünse, anlayabilmeniz, anlayabilmeniz ve uygulayabilmeniz için lütfen bir kod örneği veriniz.

 
Alexey Volchanskiy :

Ooooops, sabah dağılmış, koddaki grafik olayının işlenmesini kopyala-yapıştır yapmadı

Bilgi ile birlikte dikkatinizin dağılmasını istiyorum))
Bunu öğrendikten sonra oldukça kolay. Tuşlara bas, keşke bir arzu ve izin verilmiş olsaydı
Ve bilmediğiniz ve kazdığınız zaman ... bu dolu olan ... Ve ayrıca genel olarak krantlar da ipuçları varsa, yeterli sinir olmayacaktır.
Bu yüzden ipuçları için teşekkürler!
 
Leo59 :
Alex'e yardımın için teşekkürler!

Ve adımı ve genel olarak işlevselliğini nereye sabitlersiniz?

Ve işte burada:

Asla yapmadım. Mümkünse, anlayabilmeniz, anlayabilmeniz ve uygulayabilmeniz için lütfen bir kod örneği veriniz.

Bir grafiği yatay olarak sıkıştırdığımızda (+/- tuşları), ölçeği değişir ve bazen grafik nesneleri üst üste gelebilir. Ölçek nasıl belirlenir diye bu kodu getirdim.

Karma kodu vermeyeceğim - mevcut değil, sadece bir fikir ortaya çıktı. 1. seçeneği yapmak daha iyi, daha kolay.

Bilgiye gelince, okuyan herkese boş zamanlarında yardımı okumalarını tavsiye ederim, sadece her şeyin olduğu bölümleri atlayın. Yani, onu tıkamanıza gerek yok, öyle bir tıkınma yaşadım, iyi bir şeye yol açmadı. Sadece en azından kabaca böyle ve böyle olduğunu bilmeniz gerekir ... en azından bölümler / alt bölümler. Ardından, sorular ortaya çıkarsa, dişliler kafada ilerleyecek ve aramanın yönü görünecektir. Prensip olarak, referans ideal değil, oldukça normal, birçok örnek var.

Dilin kendisi basit olduğu için öğrenmesi zor değildir. Zorluklar tam olarak API ile ortaya çıkıyor, nereye bakılacağı ve nasıl uygulanacağı

 
Merhaba!

İlk bakışta, görev üç kuruş kadar basit. ANCAK!....
Gösterge penceresinde, farklı genliklerle "0"a göre sallanan herhangi bir osilatör çizgisi vardır.
Aslında görev şudur:
- "0"ı aşağıdan yukarıya geçerken, gösterge penceresinin alt kenarına bir ok çizin,
- "0"ı yukarıdan aşağıya geçerken, gösterge penceresinin üst sınırına bir ok çizin,
- gösterge penceresindeki osilatör tablosunu kendi kendine ölçeklerken, oklar otomatik olarak gösterge penceresinin sınırlarında kalmalıdır.
Onlar. geçmiş grafiğinde ileri geri kaydırma veya yatay ölçeğini değiştirme, oklar otomatik olarak gösterge penceresinin sınırlarında her zaman kalmalıdır.

Büyük bir istek, tavsiye vermeyin , "maddi olarak yardım edin")). Lütfen böyle bir işlevi uygulayan bir çalışma kodu veya bir bağlantı ekleyin.

Şimdiden teşekkürler!
 

Lütfen çözmeme yardım et!

Her (bırakın) günde (dosya günde bir kez yazılır)maksimum düşüşü bulmam gerekiyor - MT4 terminali.

Maksimum düşüş, grafikteki zirveden mevcut fon çekilmesine kadar olan mesafedir ve fonların çekilmesi cari zarardır.

bu kodu yazdım

   if(Analiz_Prosadki==true)
     {
      if(ContolSavaTXT==1)
        {
         ProfitNew=0;
         ProfitMin=0;
         ContolSavaTXT=0;
        }

      if(ContolSavaTXT==0)
        {
         ProfitNew=AccountInfoDouble(ACCOUNT_PROFIT);
         BalansNew==AccountInfoDouble(ACCOUNT_BALANCE);  //Текузее значение баланса
         if (BalansNew>BalansMax) BalansMax=BalansNew;
         if (ProfitNew<ProfitMin && BalansNew>=BalansMax) ProfitMin=ProfitNew;
         if (ProfitNew<ProfitMin && BalansNew<BalansMax) ProfitMin=ProfitNew-(BalansMax-BalansNew);
        }

      ContolSavaTXT=Printer.Write((string)TimeCurrent(),ProfitMin);   // Пишем информацию в файл - функция возвращает 1
     }

Ancak bazı çizelgelerde doğru görünüyor, bazılarında göstermiyor - görsel olarak çizelgeler aynı tipte.

Görünüşe göre kodda veya mantıkta bir hata yapmışım ama hangisi olduğunu çözemedim.