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

 
Merhaba sevgili programcılar!

Aşağıdaki analize ihtiyaç vardı - program kendisine verilen parametreleri analiz etmeli ve sonuçları bir dizi tarih içeren bir tablo şeklinde ayrı bir pencerede göstermelidir. Onlar. Program tarihi analiz etmeli ve gerekli tarihleri vermelidir.

Bu MQL4'te mümkün mü yoksa geçmişi dışa aktarmak ve verileri başka bir dilde yazılmış bir program kullanarak analiz etmek daha mı iyi?

Şimdiden teşekkürler!
 
GygaByte :


Doğru, ancak uygulamanın gösterdiği gibi - her zaman değil ..

Beşinci ondalık basamak = 5 (1.хххх5) ise, değer yine de bozuktur:

Soru hala güncel...

Not Genel olarak, MagicNumber'a bir fiyat değeri atamam gerekiyor ... ve MagicNumber türü int, bu yüzden onu dönüştürmeye çalışıyorum

Belki başka biri tavsiye verebilir?

Teşekkür ederim.

Farklı yuvarlamalarla çıktı alırsınız - bu nedenle tam sayıyı görmüyorsunuz - ve bir şeyin bozuk olduğunu düşünüyorsunuz. Varsayılan olarak, gerçek sayılar görüntülenirken çıktı sayısı 4. ondalık basamağa yuvarlanır. 5 ondalık basamakta çıktıyı açıkça yuvarlamak gerekir:

 Alert ( "bid= " ,bid, " bid_minus= " ,DoubleToStr(bid_minus,Digits), " bid_plus= " ,DoubleToStr(bid_plus,Digits), " Bid = " ,DoubleToStr(Bid,Digits));

Kendi resminize bakın - DoubleToStr() olmadan ve DoubleToStr() ile teklif çıktısı.

 
hoz :

Artyom ve Boris, sorumu benim için "çiğnediğiniz" için teşekkür ederim. Bu sefer yaptığım gibi oldukça basit şeylerde hata yapabildiğim dönemler oluyor..

Shchas yeni bir soru vardı.

Buraya bir fonksiyon ekledim, açık emirlerin sayısını hesaplamak, verilen karlardan belirli bir tipteki emirleri aramak ve karlarını belirli bir değerle (şu anda 0) karşılaştırmak için fonksiyona ekledim. Ayrıca açık emir yoksa FindOrders() fonksiyonunun parametreleri üzerinden True değerinde 2 bayrak döndürülür, yani emir gönderebilirsiniz ve eğer emir varsa kar kontrol edilir, böylece kar kontrol edilir. değer belirtilen değerden büyükse, eğer kar belirtilen değerden düşükse, FindOrders() işlevinin parametreleri aracılığıyla False değerine sahip 2 bayrak döndürülür, böylece bazılarında olduğunda. Yönde kârsız siparişler varsa, kârsız yönde hiçbir yükleme yapılmamıştır.

Ardından, sinyal işlevinde FindOrders() işlevini çağırıyorum:

Siparişler tamamen açılmak üzere taşındı. Mantık doğru gibi. Anlayabiliyor musun, hazırlıksız, nerede yanlış yaptım?

Her şeyi ayrı bir işlev olarak kolaylaştırmanın mümkün olduğunu anlıyorum ve yapabilirim. Ama neden böyle çalışmadığını anlamak istiyorum.

Victor, algoritmanı tam olarak anlayamıyorum ama tavsiyede bulunabilirim! Bu mantıkta bir hata olduğunda bana da oluyor. Koşullarınızda belirsizlik veya karşılıklı münhasırlık varsa program durur. Belki ne istediğinizi anlıyorsunuz ama kodun mantığını doğru bir şekilde oluşturamıyorsunuz. Planladığınız koşulların yerine getirilmesinin tüm sırasını netlik için oklarla sırayla kağıda boyayarak bu aksaklıkları arayın! İyi şanlar!
 
borilunad :
Victor, algoritmanı tam olarak anlayamıyorum ama tavsiyede bulunabilirim! Bu mantıkta bir hata olduğunda bana da oluyor. Koşullarınızda belirsizlik veya karşılıklı münhasırlık varsa program durur. Belki ne istediğinizi anlıyorsunuz ama kodun mantığını doğru bir şekilde oluşturamıyorsunuz. Planladığınız koşulların yerine getirilmesinin tüm sırasını netlik için oklarla sırayla kağıda boyayarak bu aksaklıkları arayın! İyi şanlar!


Yani her şey mantıkla ilgili. Açık emir yoksa, emirlerin bir sinyalle açılması gerekir.

Ve açık emirler varsa, belirli bir yöndeki (al veya sat) emirlerin karı belirli bir değerden büyükse, yani emirler belirli bir sinyale göre açılmalıdır. en azından olumsuz değil. (Test için oraya 0 koydum).

Bir tane mantıklı söve buldum. İşte olanlar:

 //+-------------------------------------------------------------------------------------+
//| Поиск своих ордеров                                                                 |
//+-------------------------------------------------------------------------------------+
int FindOrders( bool & long , bool & short )
{
   int t, total = OrdersTotal () - 1 ;
   
   for ( int i=total; i>= 0 ; i--)
   {
       if (! OrderSelect (i,SELECT_BY_POS,MODE_TRADES)) continue ;
           if (OrderSymbol() != Symbol ()) continue ;
               if (OrderMagicNumber() != i_magic) continue ;
              {
                 if (OrderType() == OP_BUY)         // Найден ордер типа OP_BUY
                 {
                     if (OrderProfit() < 0 )         // Если профит ордера ниже заданного значения,..
                         long = false ;               // .. покупка запрещена
                 }

                 if (OrderType() == OP_SELL)       // Найден ордер типа OP_SELL
                 {
                     if (OrderProfit() < 0 )         // Если профит ордера ниже заданного значения,..
                         short = false ;             // .. продажа запрещена
                 }
                 t++;
              }
   }
   
   return (t);
}

//+-------------------------------------------------------------------------------------+
//| Получаем общий торговый сигнал                                                      |
//+-------------------------------------------------------------------------------------+
int GetGeneralSignal()
{
   bool short = true ,
         long = true ;
        
   if (FindOrders( short , long ) > 3 )
       return (-1);

   if (GetRSI( 1 ) < i_RSIToUpLimit)
       if (GetRSI( 0 ) > i_RSIToUpLimit)
      {
         if ( long == true )
             return (SIGNAL_BUY);
      }

   if (GetRSI( 1 ) > i_RSIToDnLimit)
       if (GetRSI( 0 ) < i_RSIToDnLimit)
      {
         if ( short == true )
             return (SIGNAL_SELL);
      }
            
   return (-1);
}

Artık satış emirleri bir yandan görünümde doğru bir şekilde açılıyor ve uzunlar hiç açılmıyor. Bayrak her iki değişkene de ayarlanmışken 1 yani doğru .

 

Oluşan MT4 ile öyle bir yanlış anlaşılma var ki..

mt4 broker programının (yani geçen hafta kullandığım 3'ü) başlatılmasıyla, bilgisayarımda "Kullanıcı olarak çalıştır" Windows penceresi belirir ("farklı çalıştır" ile aynıdır. Herhangi bir işlem seçeneği ile, mt4 normal açılıyor.

Bu pencere olmadan mt4.exe'nin başlatılması nasıl iade edilir? Neler olduğunu bilen veya anlayan var mı?

 

İyi günler, bekleyen tüm siparişleri hızlı bir şekilde iptal etme ihtiyacıyla karşı karşıya kaldı. OrderClose gecikmeleri yok sayar. Hangi operatörün kullanımı daha uygundur ve böyle bir olasılık var mı?

 
Notter :

İyi günler, bekleyen tüm siparişleri hızlı bir şekilde iptal etme ihtiyacıyla karşı karşıya kaldı. OrderClose gecikmeleri yok sayar. Hangi operatörün kullanımı daha uygundur ve böyle bir olasılık var mı?


Sadece piyasa emirleri kapatılabilir ve bekleyen emirleri silmek için OrderDelete operatörüne ihtiyacınız vardır.
 

ho

Teşekkür ederim!

 
hoz :


Yani her şey mantıkla ilgili. Açık emir yoksa, emirlerin bir sinyalle açılması gerekir.

Ve açık emirler varsa, belirli bir yöndeki (al veya sat) emirlerin karı belirli bir değerden büyükse, yani emirler belirli bir sinyale göre açılmalıdır. en azından olumsuz değil. (Test için oraya 0 koydum).

Bir tane mantıklı söve buldum. İşte olanlar:

Artık satış emirleri bir yandan görünümde doğru bir şekilde açılıyor ve uzunlar hiç açılmıyor. Bayrak her iki değişkene de ayarlanmışken 1 yani. doğru .

Viktor, kontrol et! Uzun alımı yorumladıktan sonra, açığa satışın nasıl çalıştığını görmek için günlüğe bakın! Ve tam tersi, o zaman farkın ne olduğunu görecek ve neden işe yaramadığını anlayacaksınız!
 
borilunad :
Viktor, kontrol et! Uzun alımı yorumladıktan sonra, açığa satışın nasıl çalıştığını görmek için günlüğe bakın! Ve tam tersi, o zaman farkın ne olduğunu ve neden işe yaramadığını göreceksiniz!


Boris, int GetGeneralSignal() işlevindeki koşullardan birini yorumlarsanız, açılış açıktır.

takip ettim. Mevcut açık siparişlerin karlılığı kırmızı renkte olduğunda bayrak değerini değiştirmez. İşte kısa ve uzun bayrakların değerini false olarak ayarlaması gereken yeniden yazılmış bir fonksiyon, yani. olumsuz emirler varsa pozisyon açma yasağı:

 //+-------------------------------------------------------------------------------------+
//| Поиск своих ордеров                                                                 |
//+-------------------------------------------------------------------------------------+
int FindOrders( bool & long , bool & short )
{
   int t, total = OrdersTotal () - 1 ;
   double profitL,               // Профит лонговой позиции
          profitS;               // Профит шортовой позиции
   
   for ( int i=total; i>= 0 ; i--)
   {
       if (! OrderSelect (i,SELECT_BY_POS,MODE_TRADES)) continue ;
           if (OrderSymbol() != Symbol ()) continue ;
               if (OrderMagicNumber() != i_magic) continue ;
              {
                 if (OrderType() == OP_BUY)         // Найден ордер типа OP_BUY
                 {
                     Print ( "if (OrderType() == OP_BUY)" );
                     profitL = OrderProfit();
                     if (profitL < OrderProfit())
                         if (profitL < 0 )
                         long = false ;
                 }

                 if (OrderType() == OP_SELL)       // Найден ордер типа OP_SELL
                 {
                     Print ( "if (OrderType() == OP_SELL)" );
                     profitS = OrderProfit();
                     if (profitS < OrderProfit())
                         if (profitS < 0 )
                         long = false ;
                 }
                 t++;
              }
   }
   
   return (t);
}

Çağırma işlevi burada:

 //+-------------------------------------------------------------------------------------+
//| Получаем общий торговый сигнал                                                      |
//+-------------------------------------------------------------------------------------+
int GetGeneralSignal()
{
   bool short = true ,
         long = true ;
        
   if (FindOrders( short , long ) > 15 )
       return (SIGNAL_NO);

   Print ( "long = " , long );
   Print ( "short = " , short );
      
   if (GetRSI( 1 ) < i_RSIToUpLimit)
       if (GetRSI( 0 ) > i_RSIToUpLimit)
      {
         if ( long == true )
             return (SIGNAL_BUY);
      }
           
   if (GetRSI( 1 ) > i_RSIToDnLimit)
       if (GetRSI( 0 ) < i_RSIToDnLimit)
      {
         if ( short == true )
             return (SIGNAL_SELL);
      }
            
   return (SIGNAL_NO);
}