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

 
MakarFX :

mql4 burada da mümkündür

Bana öyle geliyor ki, bu değil. Expert Advisor, trend çizgisi şeklinde bir grafik nesne oluşturur:

   if (PriceDemUp2() != 0 && PriceDemUp1() != 0 )
      CreateLine(trendUp, TimeDemUp2(), PriceDemUp2(), TimeDemUp1(), PriceDemUp1(), TrendUpColor);
   if (PriceDemDw2() != 0 && PriceDemDw1() != 0 )
      CreateLine(trendDw, TimeDemDw2(), PriceDemDw2(), TimeDemDw1(), PriceDemDw1(), TrendDwColor);

Ancak terminali yeniden başlattıktan sonra sadece ilk nokta için parametreler var. Bir öncekinin parametreleri ancak yeni bir nokta oluşturulduktan sonra görünecektir. Görünüşe göre anlamaya başlıyorum - yalnızca gösterge tarafından hesaplanan son noktayı değil, öncekini de bulmanız gerekiyor. Son (ilk) nasıl atlanır ve bir sonraki nasıl hesaplanır? İlk noktayı şöyle buluyorum:

 int BarPointDemUp()
{
   int i;
   
   for (i = 0 ; i < 70 ; i++)
   {   
       if ( iCustom ( NULL , 0 , "DeMark Point" , LevelDP, 0 , i) != 0 )
         return (i);
   }
   return (- 1 );   
}
//////////////////////////////////////
int BarPointDemDw()
{
   int i;
   
   for (i = 0 ; i < 70 ; i++)
   {   
       if ( iCustom ( NULL , 0 , "DeMark Point" , LevelDP, 1 , i) != 0 )
         return (i);
   }
   return (- 1 );
 
Youri Lazurenko :

Bana öyle geliyor ki, bu değil. Expert Advisor, trend çizgisi şeklinde bir grafik nesne oluşturur:

Ancak terminali yeniden başlattıktan sonra sadece ilk nokta için parametreler var. Bir öncekinin parametreleri ancak yeni bir nokta oluşturulduktan sonra görünecektir. Görünüşe göre anlamaya başlıyorum - yalnızca gösterge tarafından hesaplanan son noktayı değil, öncekini de bulmanız gerekiyor. Son (ilk) nasıl atlanır ve bir sonraki nasıl hesaplanır? İlk noktayı şöyle buluyorum:

bir sayaç koy

 int BarPointDemUp()
{
   int i;
   int c=0;
   for (i = 0 ; i < 70 ; i++)
   {   
       if ( iCustom ( NULL , 0 , "DeMark Point" , LevelDP, 0 , i) != 0 )
        c++;
        if(c==2)  return (i);
   }
   return (- 1 );   
}

Genel olarak, bir dizi yapın ve doldurun, ardından diziden istediğiniz noktayı alın.

 
Vitaly Muzichenko :

bir sayaç koy

Genel olarak, bir dizi yapın ve doldurun, ardından diziden istediğiniz noktayı alın.

Teşekkür ederim. Bana öyle geliyor ki verdiğiniz sayaç ihtiyacınız olan şey ve en önemlisi basit.

Site güncellenirken önerdiğiniz seçeneği denedim. Her şey çalışıyor. Çok teşekkürler. Çok basit ve vahşi doğaya tırmanmaya başladım. Ayrıca yukarıda verilen fiyat ve süre belirleme fonksiyonları basitleştirilmiştir.

 
MakarFX :

neyin yanlış olduğunu vurguladım

sarı vurgulanmış gereksiz, silebilirsiniz

yeşille vurgulanan işlev OnStart()'ın dışında olmalıdır,

yeni bir çubuk tanımlamanız gerektiğinde vurgulanan kahverengiyi kullanın

Teşekkürler!)

 

Herkese iyi günler J Lütfen parabolik ile takip eden durdurma fonksiyonunun çalışma kodunu bulmama yardım edin. Ve lütfen bana bu işlevi danışmana, fiyat artı belirtilen puan sayısı geçtiğinde takip etmeye başlayacak şekilde nasıl bağlayacağımı söyle? Şimdiden teşekkür ederim, bilgili ve deneyimli kişilerden geçmemenizi rica ediyorum - Kase'nin bir şekilde bana eklenmesi gerekiyor ;-)

 
DanilaMactep :

Herkese iyi günler J Lütfen parabolik ile takip eden durdurma fonksiyonunun çalışma kodunu bulmama yardım edin. Ve lütfen bana bu işlevi danışmana, fiyat artı belirtilen puan sayısı geçtiğinde takip etmeye başlayacak şekilde nasıl bağlayacağımı söyle? Şimdiden teşekkür ederim, bilgili ve deneyimli kişilerden geçmemenizi rica ediyorum - Kase'nin bir şekilde bana eklenmesi gerekiyor ;-)

aşağı yukarı böyle

 //+------------------------------------------------------------------+
   int     Tral = 50 ;
   double Sar  = iCustom ( _Symbol , Period (), "Parabolic" , 0.02 , 0.2 , 0 );
//+------------------------------------------------------------------+
   for ( int pos= 0 ;pos< OrdersTotal ();pos++)
       if ( OrderSelect (pos,SELECT_BY_POS,MODE_TRADES))
       if (OrderSymbol()== _Symbol )
        {
         if (OrderType()==OP_SELL)
           {
             if (OrderOpenPrice()>Ask+Tral* Point &&OrderStopLoss()!= Sar)
             if (OrderModify(OrderTicket(),OrderOpenPrice(), NormalizeDouble (Sar, Digits ),OrderTakeProfit(), 0 , clrNONE ))
            { Print ( "Order SELL Modify" )}
           }
         if (OrderType()==OP_BUY)
           {
             if (OrderOpenPrice()<Bid-Tral* Point &&OrderStopLoss()!= Sar)
             if (OrderModify(OrderTicket(),OrderOpenPrice(), NormalizeDouble (Sar, Digits ),OrderTakeProfit(), 0 , clrNONE ))
            { Print ( "Order BUY Modify" )}
           }
        }
 

Lütfen bana ayın gününü yılın yeni günüyle nasıl güncelleyeceğimi söyle.


   datetime time_current= TimeCurrent ();
   MqlDateTime time_structure;
   TimeToStruct (time_current,time_structure);
   int curr_day_year=time_structure.day_of_year;
   int start_day=(curr_day_year-m_days_back)> 0 ?curr_day_year-m_days_back: 0 ;
   time_structure.day_of_year=start_day;
   time_structure.hour= 0 ;
   time_structure.min= 0 ;
   time_structure.sec= 0 ;
   datetime start_time= StructToTime (time_structure);

Ve böylece, start_time'ın yılın değişen gününü hesaba katacağını düşündüm. Ama eski bir randevu...

Hmm ... muhtemelen bir saniye ayırmak daha kolay ..

 
leonerd :

Şimdi düşünemiyorum örnek vereyim belki aklına gelir

 //получаем номер недели в году
int GetWeekNumber( datetime eTime)
   {
   MqlDateTime eDate;
   //получаем дату начала года
   TimeToStruct (eTime,eDate);
   eDate.mon= 1 ;
   eDate.day= 1 ;
   eDate.hour= 0 ;
   eDate.min= 0 ;
   eDate.sec= 0 ;
   datetime StartTime= StructToTime (eDate);
   //возвращаем дату назад в структуру, чтобы определить день недели начала года
   TimeToStruct (StartTime,eDate);
   return ( int ((eTime-StartTime+ 86400 *eDate.day_of_week)/ 604800 ));
   }

fikir https://www.mql5.com/en/users/integer

Dmitry Fedoseev
Dmitry Fedoseev
  • www.mql5.com
Профиль трейдера
 
MakarFX :

aşağı yukarı böyle

Makar, kod için çok teşekkür ederim - Bunu, icast'e katı sabit değerlerin değil, harici değişkenlerin aktarımını yeniden yaparak biraz berbat ettim. Lütfen kodda belirtin int Tral = 50 ; Trolü tutacağımız mesafe bu mu yoksa trolün açılacağı nokta cinsinden kâr mesafesi mi?

 
DanilaMactep :

Makar, kod için çok teşekkür ederim - Bunu, icast'e katı sabit değerlerin değil, harici değişkenlerin aktarımını yeniden yaparak biraz berbat ettim. Lütfen kodda belirtin int Tral = 50 ; Trolü tutacağımız mesafe bu mu yoksa trolün açılacağı nokta cinsinden kâr mesafesi mi?

bu, trolün başlayacağı puan cinsinden kâr mesafesidir.