[ARŞİV!] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde - 4. - sayfa 131

 
borilunad :


Çok basit olmalı! M5 açık ve üst kısmı hafif eğimli, altındaki M1 ise doğru yorumları gösteriyor.

Dedikleri gibi, sabah akşamdan daha akıllıdır! Günaydın!


Burada yazılım uygulaması hakkında sorular soruyorlar ve cevaplar alıyorlar.

Bir de yapraktan yorumları okuyabilirsiniz ;)

 
Bana hatanın nerede olduğunu söyle - bulamıyorum.
Sipariş değişiklik kodunu zaten yeniden yazdım ve hata devam ediyor.
Hatanın günlükten olmadığını vurguluyorum - günlükte tek bir hata yok.
Test sırasında Sonuçlarda hatayı buldum.
Misal:
1.4654 fiyatından bir satın alma pozisyonu (sipariş numarası 1) açtı
Sonuçlarda ayrıca 1.4654 fiyatını değiştir (sipariş numarası 1) ve TakeProfit 1.4752 yazıyor
Sonuçlarda ayrıca kapanış (sipariş numarası 1) fiyatı 1.4704 ve TakeProfit 1.4752 yazıyor
Kar = 50,00

StopLoss ayarlamadığım için sadece TakeProfit tarafından kapatılması gerekmesine rağmen, kaybetme pozisyonuna bir örnek.
1.4820 fiyattan bir satın alma pozisyonu açtı (sipariş numarası 271)
Sonuçlarda ayrıca (sipariş numarası 271) fiyatı 1.4820 ve TakeProfit 1.4918'i değiştir diyor
Sonuçlarda ayrıca kapanış (1 numaralı sipariş) fiyatı 1.4737 ve TakeProfit 1.4918 yazıyor
Kar = - 83.46

100 koyduğum her yerde TakeProfit

StopLoss ayarlanmadı.

Nasıl düzelteceğimi bilmiyorum.

Bu EA kodunu derlerken = 0 hata ve 0 uyarı.

Kullandığım Emirleri Değiştirme kodu şudur:

 //|  Описание : Модификация ордера. Версия функции для тестов на истории.      |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    pp - цена открытия позиции, установки ордера                            |
//|    sl - ценовой уровень стопа                                              |
//|    tp - ценовой уровень тейка                                              |
//|    ex - дата истечения                                                     |
//+----------------------------------------------------------------------------+
void ModifyOrder( double pp=- 1 , double sl= 0 , double tp= 0 , datetime ex= 0 ){
   int     dg= MarketInfo ( OrderSymbol (), MODE_DIGITS), er;
   double op= NormalizeDouble ( OrderOpenPrice () , dg);
   double os= NormalizeDouble ( OrderStopLoss ()  , dg);
   double ot= NormalizeDouble ( OrderTakeProfit (), dg);
   color   cl;

   if (pp<= 0 ) pp= OrderOpenPrice ();
   if (sl< 0 ) sl= OrderStopLoss ();
   if (tp< 0 ) tp= OrderTakeProfit ();
  
  pp= NormalizeDouble (pp, dg);
  sl= NormalizeDouble (sl, dg);
  tp= NormalizeDouble (tp, dg);

   if (pp!=op || sl!=os || tp!=ot) {
     if ( MathMod ( OrderType (), 2 )== 0 ) cl=clModifyBuy;
     if (! OrderModify ( OrderTicket (), pp, sl, tp, ex, cl)) {
      er= GetLastError ();
       Print ( "Error(" ,er, ") modifying order: " ,Error(error_code));
       Print ( "Ask=" ,Ask, " Bid=" ,Bid, " sy=" , OrderSymbol (),
             " op=" +GetNameOP( OrderType ()), " pp=" ,pp, " sl=" ,sl, " tp=" ,tp);
    }
  }
}
 
Bu Uzman Danışman'ın bir Excel elektronik tablosuyla çalıştığını belirtmeyi unuttum - \experts\file klasörüne kaydedilen Orders.csv dosyası
 
alex12 :
Bana hatanın nerede olduğunu söyle - bulamıyorum.
Sipariş değişiklik kodunu zaten yeniden yazdım ve hata devam ediyor.
Hatanın günlükten olmadığını vurguluyorum - günlükte tek bir hata yok.
Test sırasında Sonuçlarda hatayı buldum.
Misal:
1.4654 fiyatından bir satın alma pozisyonu (sipariş numarası 1) açtı
Sonuçlarda ayrıca 1.4654 fiyatını değiştir (sipariş numarası 1) ve TakeProfit 1.4752 yazıyor
Sonuçlarda ayrıca kapanış (sipariş numarası 1) fiyatı 1.4704 ve TakeProfit 1.4752 yazıyor
Kar = 50,00

StopLoss ayarlamadığım için sadece TakeProfit tarafından kapatılması gerekmesine rağmen, kaybetme pozisyonuna bir örnek.
1.4820 fiyattan bir satın alma pozisyonu açtı (sipariş numarası 271)
Sonuçlarda ayrıca (sipariş numarası 271) fiyatı 1.4820 ve TakeProfit 1.4918'i değiştir diyor
Sonuçlarda ayrıca kapanış (sipariş numarası 1) fiyatı 1.4737 ve TakeProfit 1.4918 yazıyor
Kar = - 83.46

100 koyduğum her yerde TakeProfit

StopLoss ayarlanmadı.

Nasıl düzelteceğimi bilmiyorum.

Bu EA kodunu derlerken = 0 hata ve 0 uyarı.

Kullandığım Emirleri Değiştirme kodu şudur:

Test cihazındaki anlaşmaların kapanışı sizin gösterdiğiniz şekilde yazıldığında, bu büyük olasılıkla orderclose işlevinin sonucudur (TP ve SL'nin bununla hiçbir ilgisi yoktur)
 

Değerleri bulmaya yardımcı olun

1 Son X = 5 gün için maksimum günlük oynaklık (günlük en yüksek eksi gecikme) .

2 Son X = 130 gün için ortalama günlük oynaklık

3 Ve bu değerler if durumunda nasıl yazılabilir ki maksimum günlük oynaklık A =75 ile B =150 aralığında olsun - Ortalama günlük oynaklık

 double Dmax= 0.0 ; 
double DAvg= 0.0 ;
int a = 0 ; 
int d =d+ 1 ;  
while (a < 5 ) 
  { 
    Dmax = iHigh ( Symbol (), PERIOD_D1 ,d)- iLow ( Symbol (), PERIOD_D1 ,d); 
    a++; 
  } 
//Comment( "T ("+Dmax+")");

while (a < 130 ) 
   {  
 
DAvg += ( iHigh ( Symbol (), PERIOD_D1 ,d- 1 )- iLow ( Symbol (), PERIOD_D1 ,d- 1 ))/ 130 ; 
    a++; 
}
Comment ( "T (" +DAvg+ ")" );
 
sergeev :

1. İlk önce pencereye kaç tane çubuğun sığdığını bulun https://docs.mql4.com/en/windows/WindowBarsPerChart

2. Ardından ilk çubuğun tarihini öğrenin https://docs.mql4.com/en/windows/WindowFirstVisibleBar

3. Bu ilk çubuğu ve çubuk sayısını bilerek, bu çubukları gözden geçirin ve aralarındaki maksimum ve minimumu belirleyin.

4. kar


Seçenek numarası 2

https://docs.mql4.com/en/windows/WindowPriceMax

https://docs.mql4.com/en/windows/WindowPriceMin İkinci seçenek

Hızlı ve ayrıntılı cevap için çok TEŞEKKÜRLER.Ben kendim ilk seçeneğe yöneldim, ancak penceredeki çubuk sayısını nasıl hesaplayacağımı bilmiyordum.İkinci seçenek daha kısa.

Ama önceki çubuktaki son maksimum ve minimum "yakalamak" nasıl? Şimdiden TEŞEKKÜR EDERİZ!

 
MK07 :


Ama önceki çubuktaki son maksimum ve minimum "yakalamak" nasıl? Şimdiden TEŞEKKÜR EDERİZ!

sadece mevcut çubukta ulaşılan maksimum ve minimumu hatırlamanız gerekir ve yeni bir çubuk göründüğünde ve önceki çubuk olduğunda, hafızaya alınan değişkenlerden maksimum ve minimumu alırsınız.

 
sergeev :

sadece mevcut çubukta ulaşılan maksimum ve minimumu hatırlamanız gerekir ve yeni bir çubuk göründüğünde ve önceki çubuk olduğunda, hafızaya alınan değişkenlerden maksimum ve minimumu alırsınız.


Ama nasıl? Bunu indikatörlerimde bir çok kez yapmaya çalıştım ama olmuyor!Z değişkenine max değerini atadığımızı varsayalım.Yeni bir çubuk belirir (bu izlenebilir) ve hemen Z'ye yeni bir değer atanır ve (Z-1) değeri "kayıp". Burada, görünüşe göre, Z'ye yeni bir değer atarken bir tür kontrol gerekiyor (ve yeni bir çubuk çıkmadı mı?) Profesyonelliğinize ve sabrınıza güveniyorum! Sıkı çalışman için teşekkür ederim.
 

z değişkenini statik olarak bildirin veya global bölgede bildirin.

ona yeni bir değer atamadan önce, yeni bir bar olup olmadığını kontrol edin ve değeri ile mevcut olan arasındaki farkı kontrol edin ve ancak bundan sonra ona yeni bir değer atayın.

 
smshev :
Test cihazındaki anlaşmaların kapanışı sizin gösterdiğiniz şekilde yazıldığında, bu büyük olasılıkla orderclose işlevinin sonucudur (TP ve SL'nin bununla hiçbir ilgisi yoktur)

Teşekkürler, ancak kodda hata yok:

 int CloseOrder( int ticket, double lots)
              {
               int err,i1;
               double price;
               OrderSelect (ticket,SELECT_BY_TICKET,MODE_TRADES);
               if (lots< MarketInfo ( Symbol (),MODE_MINLOT))lots= MarketInfo ( Symbol (),MODE_MINLOT);
               while (i1< 10 )
                   {
                     RefreshRates ();
                     if ( OrderType ()== 0 )price=Bid;
                     if ( OrderType ()== 1 )price=Ask;
                     if ( OrderType ()> 1 ){ OrderDelete (ticket); return ( 0 );}
                     OrderClose (ticket,lots, NormalizeDouble (price, Digits ),Slippage, Goldenrod );
                    err = GetLastError ();
                     if (err == 0 ) break ;
                     Print ( WindowExpertName (), Symbol (),Error(err), "  при закрытии ордера" );
                     Sleep ( 100 );
                    i1++;
                   }
               return ( 0 );
              }