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

 
Taras Slobodyanik # :

Neden 3 yönteme ihtiyacınız var?
her şeyi bir arada yapmak için yeterli

  • siparişi kontrol ettim

- değiştirilmiş
- modifiye edilmemiş

İlginç!

Taras, diyelim ki TP ve SL ile üç alış emri var, sonra SL bir emirde değiştirildi.

Soru: Değiştirilmiş bir siparişi nasıl bulabilirim?

 
Taras Slobodyanik # :

Neden 3 yönteme ihtiyacınız var?
her şeyi bir arada yapmak için yeterli

  • siparişi kontrol ettim

- değiştirilmiş
- modifiye edilmemiş

Zaten iki, biri dizinin boyutunu, değiştirilmiş siparişlerin biletlerinin depolandığı OrdersTotal() aracılığıyla kontrol eder ve diğerinde bu dizi, biletin konusu için sıralanır. Ama şimdi, tüm bunlarla hiçbir şekilde ilgisi olmayan başka bir yerde kodu değiştirdim ve nedense bir hata alıyorum (sınır dışı dizi).
 
MakarFX # :

İlginç!

Taras, diyelim ki TP ve SL ile üç alış emri var, sonra SL bir emirde değiştirildi.

Soru: Değiştirilmiş bir siparişi nasıl bulabilirim?

açıkçası zhezh, sl (veya tp) bir sebepten dolayı değişti, değil mi?
Ve bazı şartlara göre.

yani, bir sonraki kontrolde bu koşul "yerine getirildi" olarak belirlenecektir - sipariş zaten değiştirilmiş.


not. manuel bir değişiklikten bahsediyorsak, oradaki biri EA'nın bilgisi olmadan bir şeyi değiştirecek, o zaman elbette bir dizi yapı toplamanız ve sürekli olarak piyasa emirleriyle karşılaştırmanız gerekir.

 
Taras Slobodyanik # :

Neden 3 yönteme ihtiyacınız var?
her şeyi bir arada yapmak için yeterli

  • siparişi kontrol ettim

- değiştirilmiş
- modifiye edilmemiş

Sıralama 1 değil 10 tane diyelim, değiştirilen her birinin biletini bir diziye yazarım. Ama şimdilik, bu bir sorun.
 
MakarFX # :

kaldırıldı

MakarFX Teşekkürler! Şimdi bu ilk emir sinyal olmadan gereksiz değil, ama şimdi bir nedenden dolayı ilk sinyal emrinde (normal) giriş 2 mum önce yapılır))) Ve sonra her şey yolunda, diğer emirlerde doğru anda giriyor ) Test cihazından mesaja ekran ekledim ama bu ilk siparişe rağmen - en önemli şey yapılmış, tekrar çok teşekkür ederim) Sihirbazlarla anladım, sonra harici bir değişken yapacağım ve eklediğimde Bir döviz çiftinin belirli bir grafiğine uzman, her çiftin numarasını ayrı ayrı değiştireceğim.

 
Nerd Trader # :
Sıralama 1 değil 10 tane diyelim, değiştirilen her birinin biletini bir diziye yazarım. Ama şimdilik, bu bir sorun.

Kaç sipariş olduğu önemli değil - TP/SL'yi koşullara göre değiştirmeniz gerekmiyorsa = sipariş zaten değiştirilmiş.

 
SanAlex # :

Bu, test cihazında eğlence için iyidir.

ve bu sizin için, bir hediye olarak - para kazanmak için.

\\\\\\\\\\\\\\\\\\\\\\\\\

doğrulama için başlatıldı - akşam nasıl çalıştığını göreceğiz

\\\\\\\\\\\\\\\\\\\\\\\\\\

Tüm çizelgelerde şablonu nasıl değiştirdiğini kontrol ettim - her şey işe yaradı! Toplam kâr hedefe nasıl ulaştı?


SanAlex , çok ilginç, bu uzmanı kesinlikle ayrıntılı olarak ele alacağım, teşekkürler!

 

Ryabyata, iyi günler, bana koddan bahset, işte eksi alımların iki anlaşmasının sağındaki bir grafik - bir sat, al ile sat, algoritmaya göre, al'ı girmeniz gerekiyor, ancak bir nedenden dolayı eksi görünen ve veren bu iki fonksiyon tarihteki en yeni fonksiyonlardır - ikisini de artıda gösterin! Nasıl doğru yazılır ve hata nerede - bu TS ortalama olarak bir tersine çevirmedir - aynı işlevler, kısaca eksi bir satıştan sonra düzgün çalışır - bir satın alma açılmalıdır, ancak açılmaz, çünkü f-ii her ikisini de doğru verir, bool Calc_Loss_BUY () yanlış vermelidir, çünkü f-s'de bence en uç anlaşma kârsızsa, o zaman bu f-th DOĞRU, aksi halde YANLIŞ verir ve her ikisi de DOĞRU verir. Lütfen karar vermeme yardım et.



 // проверка предыдущего минусового селл
bool Calc_Loss_SELL()
  {
   bool ord;
   bool TotalLot= false ;
   HistorySelect ( TimeCurrent ()-HistoryDaysLoadI* 86400 , TimeCurrent ());
   for ( int i= HistoryDealsTotal ()- 1 ; i>= 0 ; i--)
     {
       ulong ticket= HistoryDealGetTicket (i);
      ord= HistoryDealSelect (ticket);
       if (ord && HistoryDealGetString (ticket, DEAL_SYMBOL ) == _Symbol
         && HistoryDealGetInteger (ticket, DEAL_MAGIC ) == MagicC
         && HistoryDealGetInteger (ticket, DEAL_ENTRY ) == DEAL_ENTRY_OUT
         && HistoryDealGetInteger (ticket, DEAL_TYPE ) ==   DEAL_TYPE_BUY )
        {
         if ( HistoryDealGetDouble (ticket, DEAL_PROFIT ) < 0 )
           {
            TotalLot= true ;
             if (УСРЕДНЯЛКА) Print ( " усреднение в селл разрешено " ,TotalLot);
             else    Print ( " ПЕРЕВОРОТ В БАЙ разрешен " ,TotalLot);
             break ;
           }
         else
           {
             break ;
           }
        }
     }
   return (TotalLot);
  }


// проверка предыдущего минусового бай
bool Calc_Loss_BUY()
  {
   bool ord;
   bool TotalLot= false ;
   HistorySelect ( TimeCurrent ()-HistoryDaysLoadI* 86400 , TimeCurrent ());
   for ( int i= HistoryDealsTotal ()- 1 ; i>= 0 ; i--)
     {
       ulong ticket= HistoryDealGetTicket (i);
      ord= HistoryDealSelect (ticket);
       if (ord && HistoryDealGetString (ticket, DEAL_SYMBOL ) == _Symbol
         && HistoryDealGetInteger (ticket, DEAL_MAGIC ) == MagicC
         && HistoryDealGetInteger (ticket, DEAL_ENTRY ) == DEAL_ENTRY_OUT
         && HistoryDealGetInteger (ticket, DEAL_TYPE ) == DEAL_TYPE_SELL )
        {
         if ( HistoryDealGetDouble (ticket, DEAL_PROFIT ) < 0 )
           {
            TotalLot= true ;
             if (УСРЕДНЯЛКА) Print ( " усреднение в бай разрешено " ,TotalLot);
             else    Print ( " ПЕРЕВОРОТ В СЕЛЛ разрешен " , TotalLot);
             break ;          
           }
         else
           {
             break ;
           }
        }
     }
   return (TotalLot);
  }


     //----------------------------------------------
       // проверка условий ПЕРЕВОРОТА В СЕЛЛ
       // нет поз рыночных и предыдущая сделка В БАЙ была минусовая и не было минусового селла
       Print ( " Calc_Loss_BUY(): " ,Calc_Loss_BUY(), " Calc_Loss_SELL(): " ,Calc_Loss_SELL());
      
       if (! PositionSelect ( Symbol ()) && Calc_Loss_BUY() && !Calc_Loss_SELL())
        {
         m_trade.Sell(CalcLot(), _Symbol ,LastTick.bid,LastTick.ask+ double (SLE)* _Point ,LastTick.bid- double (TPE)* _Point - _Spread* _Point );
         Print ( " ПЕРЕВОРОТ БАЯ В СЕЛЛ, Calc_Loss_BUY(): " ,Calc_Loss_BUY());
        }

 
       // проверка условий ПЕРЕВОРОТА в SELL
       // нет поз рыночных и предыдущий селл был минусовой И НЕ БЫЛО МИНУСОВОГО БАЙ
      
       if (! PositionSelect ( Symbol ()) && Calc_Loss_SELL() && !Calc_Loss_BUY())
        {
         m_trade.Buy(CalcLot(), _Symbol ,LastTick.ask,LastTick.bid- double (SLE)* _Point ,LastTick.ask+ double (TPE)* _Point + _Spread* _Point );
         Print ( " ПЕРЕВОРОТ СЕЛЛА В БАЙ, Calc_Loss_SELL(): " ,Calc_Loss_SELL());
        }

genel olarak, bir satın alma açmaz, ancak bir önyükleme satışından sonra açması gerekir !!!!!!!!!


Aslında, görev, bir alım veya satım anlaşması haline gelen ve türüne göre daha fazla bakan EXTREME pozisyonunun kapatıldığı kâr veya zararı belirlemektir!

YARDIM! lütfen!

 

Güzel gün!

İki işlev vardır: tüm sipariş tablosunu hesaplama işlevi ve siparişleri kapatma işlevi

 //+------------------------------------------------------------------+
double CalculiteProfit()
{
     double oProfit = 0 ;
     for ( int i = OrdersTotal ()- 1 ; i>= 0 ; i--)
    {
       if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES))
      {
         if (OrderSymbol() == Symbol () && OrderMagicNumber() == Magic)
        {
           if (OrderType() == OP_BUY || OrderType() == OP_SELL)
          {
            oProfit += OrderProfit();
          }
        }
      }
    }
     return (oProfit);
}
//+------------------------------------------------------------------+
 double FindLastBuyPrice()
{
   int oldticket, ticket = 0 ;
   double oldopenprice = 0 ;
   
   for ( int cnt = OrdersTotal ()- 1 ; cnt>= 0 ; cnt--)
   {
     if ( OrderSelect (cnt, SELECT_BY_POS, MODE_TRADES))
     {
         if (OrderSymbol() == Symbol () && OrderMagicNumber() == Magic && OrderType() == OP_BUY)
        {
          oldticket = OrderTicket();
           if (oldticket > ticket)
          {
            ticket = oldticket;
            oldopenprice = OrderOpenPrice();
          } 
        }
     }
   }
   return (oldopenprice);
 }
//+------------------------------------------------------------------+

Siparişleri kapatmak için hala koşullar var

 double op = CalculiteProfit(); 
     if (op >= Profit)
     {
       ClosseAll();
     }

Kar - mevduat para birimindeki ayarlarda

Tüm bunların anlamı: Mevduat para biriminde siparişler tablosu sıfır artı Kar'a eşit olduktan sonra, tüm siparişler tablosu kapatılır.

Kodu değiştirmeme yardım et, böylece Kâr yerine puanlar olacak. Teşekkür ederim.

 
Taras Slobodyanik # :

açıkçası zhezh, sl (veya tp) bir sebepten dolayı değişti, değil mi?
Ve bazı şartlara göre.

yani, bir sonraki kontrolde bu koşul "yerine getirildi" olarak belirlenir - sipariş değiştirildi.


not. manuel bir değişiklikten bahsediyorsak, oradaki biri EA'nın bilgisi olmadan bir şeyi değiştirecek, o zaman elbette bir dizi yapı toplamanız ve sürekli olarak piyasa emirleriyle karşılaştırmanız gerekir.

zaten unuttum... ama en başta öyle yaptım (işte bu iyi oldu), ama koşuldan gelen yöntem güvenilmez görünüyordu, değişen sırayı belirtmek için daha açık bir şey istedim.