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

 
Rustam Bikbulatov :
Merhaba, tavsiyeye ihtiyacım var. Son metnim neden gösterilmiyor? Burada sorun ne? Lütfen bana nasıl düzelteceğimi söyle!

Her zaman yalnızca bir nesnenin adını alıyorsanız neden döngü?

 for ( int no1= 0 ; no1< ObjectsTotal ( OBJ_TEXT ); no1++)
  {
   if ( ObjectName ( 0 ) == "Profit1" + iBarShift ( NULL , 1440 , 0 ))
     {
       double name;
      name = ObjectDescription ( 0 ) ;;
       Comment (name);
     }
  }
 

Iurii Tokman :

no1<= ObjectsTotal ( OBJ_TEXT );

Yani kesinlikle imkansız - dizinin sınırlarının ötesinde bir çıktı olacak. 10 nesne varsa, sonuncunun dizini 9 olacaktır. Çünkü sayı sıfırdan başlar.

 
Artyom Trishkin :

Her zaman yalnızca bir nesnenin adını alıyorsanız neden döngü?

Bu nesnenin sondan bir önceki metnini tam olarak nasıl belirleyeceğimi söyleyebilir misiniz?

 
Rustam Bikbulatov :

Bu nesnenin sondan bir önceki metnini tam olarak nasıl belirleyeceğimi söyleyebilir misiniz?

Ne istediğini anlamak zor.

 
void Profit()
  {
   ObjectCreate ( "Profit" + iBarShift ( NULL , 1440 , 0 ), OBJ_TEXT , 1 , TimeCurrent (), 0.6 );
   ObjectSetText( "Profit" + iBarShift ( NULL , 1440 , 0 ),DoubleToStr(AccountProfit(), 2 ), 11 , "Arial" , clrWhite );
   ObjectSetInteger ( 0 , "Profit" + iBarShift ( NULL , 1440 , 0 ), OBJPROP_ANCHOR , ANCHOR_RIGHT_LOWER );
   return ;
  }
void Profit1()
  {
   double   Prof = ObjectDescription( "Profit1" + iBarShift ( NULL , 1440 , 0 ));
   double   P = -Prof;
   ObjectCreate ( "Profit1" + iBarShift ( NULL , 1440 , 0 ), OBJ_TEXT , 1 , TimeCurrent (), 0.1 );
   ObjectSetText( "Profit1" + iBarShift ( NULL , 1440 , 0 ),DoubleToStr( MathMax (-AccountProfit(),-P), 1 ), 11 , "Arial" , clrWhite );
   ObjectSetInteger ( 0 , "Profit1" + iBarShift ( NULL , 1440 , 0 ), OBJPROP_ANCHOR , ANCHOR_RIGHT_LOWER );
   return ;
  }
void Profit2()
  {
   ObjectCreate ( "Profit2" + iBarShift ( NULL , 1440 , 0 ), OBJ_TEXT , 1 , TimeCurrent (),- 0.4 );
   ObjectSetText( "Profit2" + iBarShift ( NULL , 1440 , 0 ), iBarShift ( NULL , 1440 , 0 )- 1000 , 11 , "Arial" , clrWhite );
   ObjectSetInteger ( 0 , "Profit2" + iBarShift ( NULL , 1440 , 0 ), OBJPROP_ANCHOR , ANCHOR_RIGHT_LOWER );
   return ;
  }
void Profit3()
  {
   for ( int no1= 0 ; no1<= ObjectsTotal ( OBJ_TEXT ); no1++)
     {
       if ( ObjectFind ( 1 , "Profit2" + iBarShift ( NULL , 1440 , 0 ))!= 0 )
        {

         string    obj_name;
         obj_name = ObjectName ( 3 );
         string    name;
         name = ObjectDescription(obj_name);
         Comment (obj_name);
        }
     }

   ObjectCreate ( "Profit3" + iBarShift ( NULL , 1440 , 0 ), OBJ_TEXT , 1 , TimeCurrent (),- 0.9 );
   ObjectSetText( "Profit3" + iBarShift ( NULL , 1440 , 0 ),DoubleToStr(name, 1 ), 11 , "Arial" , clrWhite );
   ObjectSetInteger ( 0 , "Profit3" + iBarShift ( NULL , 1440 , 0 ), OBJPROP_ANCHOR , ANCHOR_RIGHT_LOWER );
   return ;
  }

Provit - gün boyunca test sırasındaki toplam karı gösterir

Provit1 - günlük maksimum düşüşü bırakır

Provit2 - birinden başlayan olağan dijital seri.

Provit3 - Gol! Provit1'i toplayın ve Provit2'ye bölün. Toplam test süresi için ortalama günlük düşüşü bilmek istiyorum. Provit3 ile Yardım

 

Meslektaşlarım - kapanış hatası ne olabilir ve bununla nasıl başa çıkılır? Aşağıdaki kod, kâr aşıldığında - tüm tek yönlü pozları kapatın. Teşekkür ederim.

        
             
 // ЗАКРЫВАЕМ ВИРТУАЛЬНЫЕ ТР БАЙ позы            
     if (takeprofit < ProfitB)    
      {   
         Print ( " ЗАКРЫТИЕ BUY POSITIONS. общий ProfitB = " , ProfitB, " мин общий takeprofit buys positions = " , takeprofit);   
         for (i= OrdersTotal ()- 1 ; i>= 0 ; i--)         
           if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES))
           if (OrderSymbol()== Symbol () &&  Magic_Прямой==OrderMagicNumber()) 
            {             
             if (OrderType()==OP_BUY)    
                             //if(OrderOpenPrice()+takeprofit*Point<=MarketInfo(Symbol(),MODE_BID) || 
                             //   OrderOpenPrice()-stoploss*Point>=MarketInfo(Symbol(),MODE_BID))   
                     
               if (OrderClose(OrderTicket(),OrderLots(),MarketInfo( Symbol (),MODE_BID), NormalizeDouble (MarketInfo( Symbol (), MODE_SPREAD )* 2 , Digits ()), clrGray ))  
                   Print ( " закрытие бай, тикет = " , OrderTicket());
               else    Print ( " ошибка закрытия бай, Error = " , GetLastError ());          
            }
       }     
      
       if (takeprofit < ProfitS)     
        { 
         Print ( " ЗАКРЫТИЕ СЕЛЛов. общий ProfitS = " , ProfitS, " мин общий takeprofit СЕЛЛов = " , takeprofit);   
 
         for (i= OrdersTotal ()- 1 ; i>= 0 ; i--)      
           if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES))
           if (OrderSymbol()== Symbol () &&  Magic_Прямой==OrderMagicNumber()) 
            {                       
             if (OrderType()==OP_SELL)    
                             //  if(OrderOpenPrice()-takeprofit*Point>=MarketInfo(Symbol(),MODE_ASK) ||
                             //     OrderOpenPrice()+stoploss  *Point<=MarketInfo(Symbol(),MODE_ASK))                
             
               if (OrderClose(OrderTicket(),OrderLots(),MarketInfo( Symbol (),MODE_ASK), NormalizeDouble (MarketInfo( Symbol (), MODE_SPREAD )* 2 , Digits ()), clrGray )) 
                   Print ( " закрытие SELL,  тикет = " , OrderTicket());
               else    Print ( " ошибка закрытия sell, Error = " , GetLastError ());     
            }       
         }    
           
 
Roman Shiredchenko :

Meslektaşlarım - kapanış hatası ne olabilir ve bununla nasıl başa çıkılır? Aşağıdaki kod, kâr aşıldığında - tüm tek yönlü pozları kapatın. Teşekkür ederim.

ne hatası ekran aynı değil

teorik olarak işe yaramalı, ancak yayılmayı hesaba katarak ve kayma olarak mahvederek bu kadar karmaşık bir kapanış görmedim - IMHO, kapatmaya karar verirseniz, kayma dikkat edilmesi gereken en önemli şey değildir, kapanış hataları daha önemlidir, sonra yeniden alıntı yapar, ardından bağlantı genellikle kaybolur


https://www.mql5.com/ru/forum/131859/page2#comment_3359664 yerine OrderClose(....) ve Kim'in ClosePosBySelect() öğelerini kaldırın

kullanın, o zaman nerede çalışmadığı netleşecektir - ya kapanma koşullarınızda ya da sahip olduğunuz sunucuda ne kadar eğlenceli

 
Igor Makanu :

ne hatası ekran aynı değil

teorik olarak işe yaramalı, ancak yayılmayı hesaba katarak ve kayma olarak mahvederek bu kadar karmaşık bir kapanış görmedim - IMHO, kapatmaya karar verirseniz, kayma dikkat edilmesi gereken en önemli şey değildir, kapanış hataları daha önemlidir, sonra yeniden alıntı yapar, ardından bağlantı genellikle kaybolur


OrderClose(....) öğesini kaldırın ve bunun yerine Kim'in ClosePosBySelect() öğesine bir bilet iletin, o zaman nerede çalışmadığı netleşecektir - ya kapatma koşullarınızda ya da biraz eğlenerek sahip olduğunuz sunucuda

Orada sıfır fiyattan kapanıyor. Buna göre MarketInfo fonksiyonunun ne döndürdüğünü kontrol etmek gerekir, ancak kontrol yoktur. Ancak, dörtte her zaman olduğu gibi, bazı insanlar yazmaya alışkın - bir şey aldılar, kontrol etmediler, ancak bir argüman olarak gönderdiler.

 
Artyom Trishkin :

Orada sıfır fiyattan kapanıyor. Buna göre MarketInfo fonksiyonunun ne döndürdüğünü kontrol etmek gerekir, ancak kontrol yoktur. Ancak, dörtte her zaman olduğu gibi, bazı insanlar yazmaya alışkın - bir şey aldılar, kontrol etmediler, ancak bir argüman olarak gönderdiler.

Gördüm, her şeyi kendisinin yazdırabileceğinden şüpheliyim, bu yüzden ClosePosBySelect() kullanarak OrderSelect() aracılığıyla seçilen siparişin kontrol edilen kapanışını kullanmayı önerdim - bunu yapabilir, en azından kodları nasıl topladığını gördü. yapıcı)))

Not: Hala bir siparişi iki kez kapattığına dair bir şüphe var, ancak Kimovskaya işlevi dergiye baskılar yazacak , hayır, 2. koşula göre kapatma için ayrı döngüler var gibi görünüyor

 
Igor Makanu :

Gördüm, her şeyi kendi başına yazdırabileceğinden şüpheliyim, bu yüzden seçilen siparişin işaretli kapanışını OrderSelect() aracılığıyla kullanmayı önerdim.

Evet, Igor'un işlevlerinin kullanıcının kendisi için her şeyi yapacağı açıktır (ve o zaman bile bazıları onlarla uğraşmayı başarır). Ama sonra kendisi hiçbir şey yapmayı öğrenmeyecek. Tabii ki - onların seçimi.