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

 
Zalevsky1234 :

Merhaba.

Söyle bana, danışmanın parametrelerine yorum veya açıklama içeren bir sütun eklemek mümkün mü... ???

Teşekkür ederim.

evet ama kaynağa ihtiyacın var
[Silindi]  
MakarFX :
evet ama kaynağa ihtiyacın var
Bu gerekli değil...

   input int i = 5 ;            
   input bool b = false ;    
 
void OnTick ()
  {
   if (i != 0 ) 
         {
             Comment ( "123" );
         }
  }
 
Mihail Matkovskij :

Teşekkür ederim! MQL'nin bunun için bir işlevi olduğunu bilmiyordum. Zaten kendiminkini yaratmak istiyordum. Ama ondan önce forumda sormaya karar verdim.

Bu, dili öğrenmeye yönelik yanlış yaklaşımın bir sonucudur. Kaynak yardımını okurken ……… g.kodlarıyla değil de belgelerle çalışıyor olsaydınız, kesinlikle bu konuda okurdunuz. Ve sormaya gerek yoktu.
 
Zalevsky1234 :

Merhaba.

Söyle bana, danışmanın parametrelerine yorum veya açıklama içeren bir sütun eklemek mümkün mü... ???

Teşekkür ederim.

Belgeleri okumayı ne zaman öğreneceksiniz?

 //--- input parameters
input int             InpMAPeriod= 13 ;         // Smoothing period
input int             InpMAShift= 0 ;           // Line horizontal shift
input ENUM_MA_METHOD InpMAMethod= MODE_SMMA ;   // Smoothing method 

Input переменные - Переменные - Основы языка - Справочник MQL4
Input переменные - Переменные - Основы языка - Справочник MQL4
  • docs.mql4.com
Input переменные - Переменные - Основы языка - Справочник MQL4
 
Bunu, takip ederken sözleşmenin yıkanması için yaptım, çünkü   kar almak   500 ve Zarar Durdur 150'dir.
Beş adede kadar ek sözleşme satın alın.
İki tanesi zaten açıkken yeni pozisyonların açılmasını yasaklamak mümkün müdür? Açık pozisyonların hacmini sınırlayın.



 //--------------------------------------------------------------------

void OPENORDER( string ord)

  {
  
   double priceL=m_symbol.Ask();
   if (ord== "Sell" )      
         //--- check for free money
             if (m_account.FreeMarginCheck( Symbol (), ORDER_TYPE_BUY ,my_lot,priceL)< 0.0 )
               printf ( "We have no money. Free Margin = %f" ,m_account.FreeMargin());
             else
       if (!m_trade.Sell(my_lot, Symbol (),m_symbol.Bid(),my_SL,my_TP, "" ))
         Print ( "BUY_STOP -> false. Result Retcode: " ,m_trade.ResultRetcode(),
               ", description of Retcode: " ,m_trade.ResultRetcodeDescription(),
               ", ticket of order: " ,m_trade.ResultOrder());                     // Если sell, то не открываемся
     double priceS=m_symbol.Bid();
   if (ord== "Buy" )
         //--- check for free money
             if (m_account.FreeMarginCheck( Symbol (), ORDER_TYPE_SELL ,my_lot,priceS)< 0.0 )
               printf ( "We have no money. Free Margin = %f" ,m_account.FreeMargin());
             else
       if (!m_trade.Buy(my_lot, Symbol (),m_symbol.Ask(),my_SL,my_TP, "" ))
 
         Print ( "Buy -> false. Result Retcode: " ,m_trade.ResultRetcode(),
               ", description of result: " ,m_trade.ResultRetcodeDescription(),
               ", ticket of deal: " ,m_trade.ResultDeal());
   return ;
 }
   double iMAGet( const int handle, const int index)
  {
   double MA[];
   ArraySetAsSeries (MA, true );
//--- reset error code
   ResetLastError ();
//--- fill a part of the iMABuffer array with values from the indicator buffer that has 0 index
   if ( CopyBuffer (handle, 0 , 0 ,index+ 1 ,MA)< 0 )
     {
       //--- if the copying fails, tell the error code
       PrintFormat ( "Failed to copy data from the iMA indicator, error code %d" , GetLastError ());
       //--- quit with zero result - it means that the indicator is considered as not calculated
       return ( 0.0 );
     }
   return (MA[index]);
  }
//+------------------------------------------------------------------+
//| Refreshes the symbol quotes data                                 |
//+------------------------------------------------------------------+
bool RefreshRates()
  {
//--- refresh rates
   if (!m_symbol.RefreshRates())
       return ( false );
//--- protection against the return value of "zero"
   if (m_symbol.Ask()== 0 || m_symbol.Bid()== 0 )
       return ( false );
//---
   return ( true );
  }
//+------------------------------------------------------------------+
//| Get Time for specified bar index                                 |
//+------------------------------------------------------------------+
datetime iTime ( const int index, string symbol= NULL , ENUM_TIMEFRAMES timeframe= PERIOD_CURRENT )
  {
   if (symbol== NULL )
      symbol= Symbol ();
   if (timeframe== 0 )
      timeframe= Period ();
   datetime Time[];
   datetime time= 0 ;
   ArraySetAsSeries (Time, true );
   int copied= CopyTime (symbol,timeframe,index, 1 ,Time);
   if (copied> 0 )
      time=Time[ 0 ];
   return (time);
  }
//+------------------------------------------------------------------+
//| Get value of buffers                                             |
//+------------------------------------------------------------------+
bool iGetArray( const int handle, const int buffer, const int start_pos,
               const int count, double &arr_buffer[])
  {
   bool result= true ;
   if (! ArrayIsDynamic (arr_buffer))
     {
       PrintFormat ( "ERROR! EA: %s, FUNCTION: %s, this a no dynamic array!" , __FILE__ , __FUNCTION__ );
       return ( false );
     }
   ArrayFree (arr_buffer);
//--- reset error code
   ResetLastError ();
//--- fill a part of the iBands array with values from the indicator buffer
   int copied= CopyBuffer (handle,buffer,start_pos,count,arr_buffer);
   if (copied!=count)
     {
       //--- if the copying fails, tell the error code
       PrintFormat ( "ERROR! EA: %s, FUNCTION: %s, amount to copy: %d, copied: %d, error code %d" ,
                   __FILE__ , __FUNCTION__ ,count,copied, GetLastError ());
       //--- quit with zero result - it means that the indicator is considered as not calculated
       return ( false );
     }
   return (result);
 
 
}
void TrailingOrder()
  {

   if (InpTrailingOrderLimit== 0 )
       return ;
   for ( int i= PositionsTotal ()- 1 ;i>= 0 ;i--) // returns the number of open positions
       if (m_position.SelectByIndex(i))
         if (m_position. Symbol ()==m_symbol.Name() && m_position.Magic()==m_magic)
           {
             if (m_position.PositionType()== POSITION_TYPE_BUY )
              {
               if (m_position.PriceCurrent()-m_position.PriceOpen()>ExtTrailingOrderLimit+ExtTrailingOrderStep)
                   if (m_position.StopLoss()<m_position.PriceCurrent()-(ExtTrailingOrderLimit+ExtTrailingOrderStep))
                    {
                     if (!m_trade.PositionModify(m_position.Ticket(),
                     
                        m_symbol.NormalizePrice(m_position.PriceCurrent()-ExtTrailingOrderLimit),
                        m_position.TakeProfit()))
                         Print ( "Modify " ,m_position.Ticket());
                        OPENORDER( "Buy" );
                    }
              }
             else
              {
               if (m_position.PriceOpen()-m_position.PriceCurrent()>ExtTrailingOrderLimit+ExtTrailingOrderStep)
                   if ((m_position.StopLoss()>(m_position.PriceCurrent()+(ExtTrailingOrderLimit+ExtTrailingOrderStep))) ||
                     (m_position.StopLoss()== 0 ))
                    {
                     if (!m_trade.PositionModify(m_position.Ticket(),
                        m_symbol.NormalizePrice(m_position.PriceCurrent()+ExtTrailingOrderLimit),
                        m_position.TakeProfit()))
                         Print ( "Modify " ,m_position.Ticket());
                        OPENORDER( "Sell" );
                   }
              }
           }
    }      
 void Trailing()
  {
   if (InpTStop== 0 )
       return ;
         if (m_position. Symbol ()==m_symbol.Name() && m_position.Magic()==m_magic)
           {
             if (m_position.PositionType()== POSITION_TYPE_BUY )
              {
               if (m_position.PriceCurrent()-m_position.PriceOpen()>ExtTStop+ExtTStep)
                   if (m_position.StopLoss()<m_position.PriceCurrent()-(ExtTStop+ExtTStep))
                    {
                     if (!m_trade.PositionModify(m_position.Ticket(),
                        m_symbol.NormalizePrice(m_position.PriceCurrent()-ExtTStepShift),
                        m_position.TakeProfit()))
                         Print ( "Modify " ,m_position.Ticket(),
                               " Position -> false. Result Retcode: " ,m_trade.ResultRetcode(),
                               ", description of result: " ,m_trade.ResultRetcodeDescription());
                    }
              }
             else
              {
               if (m_position.PriceOpen()-m_position.PriceCurrent()>ExtTStop+ExtTStep)
                   if ((m_position.StopLoss()>(m_position.PriceCurrent()+(ExtTStop+ExtTStep))) ||
                     (m_position.StopLoss()== 0 ))
                    {
                     if (!m_trade.PositionModify(m_position.Ticket(),
                        m_symbol.NormalizePrice(m_position.PriceCurrent()+ExtTStepShift),
                        m_position.TakeProfit()))
                         Print ( "Modify " ,m_position.Ticket(),
                               " Position -> false. Result Retcode: " ,m_trade.ResultRetcode(),
                               ", description of result: " ,m_trade.ResultRetcodeDescription());
                   }
              }
         }
   }
 
Alexey Viktorov :
Bu, dili öğrenmeye yönelik yanlış yaklaşımın bir sonucudur. Kaynak yardımını okurken ……… g.kodlarıyla değil de belgelerle çalışıyor olsaydınız, kesinlikle bu konuda okurdunuz. Ve sormaya gerek yoktu.

Cevabımdan sonra ahlak dersinin başlayacağını biliyordum... Repertuarımda... Bir nevi teşekkür ettim ama hayır... Böyle bir şey yazmak lazım... İşlevini biliyorlardı. belgeler - aferin! Ama eğer kodu tam olarak bilmiyorsanız, o zaman en azından MQL belgelerinin uzunluğunu ve genişliğini incelersiniz, her neyse, pratikte, fayda minimum olacaktır!...

 

Yanlışlıkla bu hataya rastladım

koordinatlarda küçük bir farkla iki özdeş düğme oluşturun

   CreateButton( 0 , "lab_Button1" , 0 , 79 , 20 , 77 , 25 , CORNER_RIGHT_UPPER , " " , "START" , "Arial Black" , 10 , clrWhite , clrGreen ,
   BORDER_SUNKEN , false , false , false , false , false , 0 );
   CreateButton( 0 , "lab_Button2" , 0 , 4 , 50 , - 73 , 25 , CORNER_RIGHT_UPPER , " " , "START" , "Arial Black" , 10 , clrWhite , clrGreen ,
   BORDER_SUNKEN , false , false , false , false , false , 0 );

şuna benziyor


sonuç olarak, yalnızca ilk düğme OnChartEvent öğesine tepki verir, ikincisi vermez.

 
Eugen8519 :
Bunu, takip ederken sözleşmenin yıkanması için yaptım, çünkü   kar almak   500 ve Zarar Durdur 150'dir.
Beş adede kadar ek sözleşme satın alın.
İki tanesi zaten açıkken yeni pozisyonların açılmasını yasaklamak mümkün müdür? Açık pozisyonların hacmini sınırlayın.

MQL5 bilmiyorum ama sanırım

 void TrailingOrder()
  {

   if (InpTrailingOrderLimit== 0 || PositionsTotal ()>= 2 )
       return ;
   for ( int i= PositionsTotal ()- 1 ;i>= 0 ;i--) // returns the number of open positions
       if (m_position.SelectByIndex(i))
         if (m_position. Symbol ()==m_symbol.Name() && m_position.Magic()==m_magic)
           {
             if (m_position.PositionType()== POSITION_TYPE_BUY )
              {
               if (m_position.PriceCurrent()-m_position.PriceOpen()>ExtTrailingOrderLimit+ExtTrailingOrderStep)
                   if (m_position.StopLoss()<m_position.PriceCurrent()-(ExtTrailingOrderLimit+ExtTrailingOrderStep))
                    {
                     if (!m_trade.PositionModify(m_position.Ticket(),
                     
                        m_symbol.NormalizePrice(m_position.PriceCurrent()-ExtTrailingOrderLimit),
                        m_position.TakeProfit()))
                         Print ( "Modify " ,m_position.Ticket());
                        OPENORDER( "Buy" );
                    }
              }
             else
              {
               if (m_position.PriceOpen()-m_position.PriceCurrent()>ExtTrailingOrderLimit+ExtTrailingOrderStep)
                   if ((m_position.StopLoss()>(m_position.PriceCurrent()+(ExtTrailingOrderLimit+ExtTrailingOrderStep))) ||
                     (m_position.StopLoss()== 0 ))
                    {
                     if (!m_trade.PositionModify(m_position.Ticket(),
                        m_symbol.NormalizePrice(m_position.PriceCurrent()+ExtTrailingOrderLimit),
                        m_position.TakeProfit()))
                         Print ( "Modify " ,m_position.Ticket());
                        OPENORDER( "Sell" );
                   }
              }
           }
    }      
 
MakarFX :

Yanlışlıkla bu hataya rastladım

koordinatlarda küçük bir farkla iki özdeş düğme oluşturun

şuna benziyor


sonuç olarak, yalnızca ilk düğme OnChartEvent öğesine tepki verir, ikincisi vermez.

İşleyicideki kodu görebiliyor musunuz?

Ve neden parametrelerde -73 var, çok net değil mi?...

 
Mihail Matkovskij :

İşleyicideki kodu görebiliyor musunuz?

Ve neden parametrelerde -73 var, çok net değil mi?...

Herhangi bir hata vermiyor.

Bu tür koordinatlarda düğme ters çevrilir, çünkü düğme uzunluğu X noktasından +/- hesaplanır