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

 
skyjet :
Bu, iç içe geçmiş bir işlev değil, temel MACD Sample Expert Advisor'ın bir parçasıdır. Hesaplanmış bir lot eklemeye çalışıyorum. Ana ve tek start() işlevi

O zaman kodun tamamına bakmanız gerekir. Gösterdiğin şey bir fonksiyon
 
İşte :) Sadece yukarıda bahsettiğim lot hesaplamasını nasıl gireceğimi bilmiyorum.
 //+------------------------------------------------------------------+
//|                                                  MACD Sample.mq4 |
//|                      Copyright © 2005, MetaQuotes Software Corp. |
//|                                       http://www.metaquotes.net/ |
//+------------------------------------------------------------------+

extern double TakeProfit = 50 ;
extern double Lots = 0.1 ;
extern double TrailingStop = 30 ;
extern double MACDOpenLevel= 3 ;
extern double MACDCloseLevel= 2 ;
extern double MATrendPeriod= 26 ;

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
   double MacdCurrent, MacdPrevious, SignalCurrent;
   double SignalPrevious, MaCurrent, MaPrevious;
   int cnt, ticket, total;
// initial data checks
// it is important to make sure that the expert works with a normal
// chart and the user did not make any mistakes setting external 
// variables (Lots, StopLoss, TakeProfit, 
// TrailingStop) in our case, we check TakeProfit
// on a chart of less than 100 bars
   if ( Bars < 100 )
     {
       Print ( "bars less than 100" );
       return ( 0 );  
     }
   if (TakeProfit< 10 )
     {
       Print ( "TakeProfit less than 10" );
       return ( 0 );   // check TakeProfit
     }
// to simplify the coding and speed up access
// data are put into internal variables
   MacdCurrent= iMACD ( NULL , 0 , 12 , 26 , 9 , PRICE_CLOSE ,MODE_MAIN, 0 );
   MacdPrevious= iMACD ( NULL , 0 , 12 , 26 , 9 , PRICE_CLOSE ,MODE_MAIN, 1 );
   SignalCurrent= iMACD ( NULL , 0 , 12 , 26 , 9 , PRICE_CLOSE ,MODE_SIGNAL, 0 );
   SignalPrevious= iMACD ( NULL , 0 , 12 , 26 , 9 , PRICE_CLOSE ,MODE_SIGNAL, 1 );
   MaCurrent= iMA ( NULL , 0 ,MATrendPeriod, 0 , MODE_EMA , PRICE_CLOSE , 0 );
   MaPrevious= iMA ( NULL , 0 ,MATrendPeriod, 0 , MODE_EMA , PRICE_CLOSE , 1 );

   total= OrdersTotal ();
   if (total< 1 ) 
     {
       // no opened orders identified
       if ( AccountFreeMargin ()<( 1000 *Lots))
        {
         Print ( "We have no money. Free Margin = " , AccountFreeMargin ());
         return ( 0 );  
        }
       // check for long position (BUY) possibility
       if (MacdCurrent< 0 && MacdCurrent>SignalCurrent && MacdPrevious<SignalPrevious &&
         MathAbs (MacdCurrent)>(MACDOpenLevel* Point ) && MaCurrent>MaPrevious)
        {
         ticket= OrderSend ( Symbol (),OP_BUY,Lots,Ask, 3 , 0 ,Ask+TakeProfit* Point , "macd sample" , 16384 , 0 , Green );
         if (ticket> 0 )
           {
             if ( OrderSelect (ticket,SELECT_BY_TICKET,MODE_TRADES)) Print ( "BUY order opened : " , OrderOpenPrice ());
           }
         else Print ( "Error opening BUY order : " , GetLastError ()); 
         return ( 0 ); 
        }
       // check for short position (SELL) possibility
       if (MacdCurrent> 0 && MacdCurrent<SignalCurrent && MacdPrevious>SignalPrevious && 
         MacdCurrent>(MACDOpenLevel* Point ) && MaCurrent<MaPrevious)
        {
         ticket= OrderSend ( Symbol (),OP_SELL,Lots,Bid, 3 , 0 ,Bid-TakeProfit* Point , "macd sample" , 16384 , 0 , Red );
         if (ticket> 0 )
           {
             if ( OrderSelect (ticket,SELECT_BY_TICKET,MODE_TRADES)) Print ( "SELL order opened : " , OrderOpenPrice ());
           }
         else Print ( "Error opening SELL order : " , GetLastError ()); 
         return ( 0 ); 
        }
       return ( 0 );
     }
   // it is important to enter the market correctly, 
   // but it is more important to exit it correctly...   
   for (cnt= 0 ;cnt<total;cnt++)
     {
       OrderSelect (cnt, SELECT_BY_POS, MODE_TRADES);
       if ( OrderType ()<=OP_SELL &&   // check for opened position 
         OrderSymbol ()== Symbol ())   // check for symbol
        {
         if ( OrderType ()==OP_BUY)   // long position is opened
           {
             // should it be closed?
             if (MacdCurrent> 0 && MacdCurrent<SignalCurrent && MacdPrevious>SignalPrevious &&
               MacdCurrent>(MACDCloseLevel* Point ))
                {
                 OrderClose ( OrderTicket (), OrderLots (),Bid, 3 , Violet ); // close position
                 return ( 0 ); // exit
                }
             // check for trailing stop
             if (TrailingStop> 0 )  
              {                 
               if (Bid- OrderOpenPrice ()> Point *TrailingStop)
                 {
                   if ( OrderStopLoss ()<Bid- Point *TrailingStop)
                    {
                     OrderModify ( OrderTicket (), OrderOpenPrice (),Bid- Point *TrailingStop, OrderTakeProfit (), 0 , Green );
                     return ( 0 );
                    }
                 }
              }
           }
         else // go to short position
           {
             // should it be closed?
             if (MacdCurrent< 0 && MacdCurrent>SignalCurrent &&
               MacdPrevious<SignalPrevious && MathAbs (MacdCurrent)>(MACDCloseLevel* Point ))
              {
               OrderClose ( OrderTicket (), OrderLots (),Ask, 3 , Violet ); // close position
               return ( 0 ); // exit
              }
             // check for trailing stop
             if (TrailingStop> 0 )  
              {                 
               if (( OrderOpenPrice ()-Ask)>( Point *TrailingStop))
                 {
                   if (( OrderStopLoss ()>(Ask+ Point *TrailingStop)) || ( OrderStopLoss ()== 0 ))
                    {
                     OrderModify ( OrderTicket (), OrderOpenPrice (),Ask+ Point *TrailingStop, OrderTakeProfit (), 0 , Red );
                     return ( 0 );
                    }
                 }
              }
           }
        }
     }
   return ( 0 );
  }
// the end.
 
skyjet : İşte :) Yukarıda bahsettiğim lot hesaplamasını nasıl gireceğimi bilmiyorum.
 //+------------------------------------------------------------------+
//|                                                  MACD Sample.mq4 |
//|                      Copyright © 2005, MetaQuotes Software Corp. |
//|                                       http://www.metaquotes.net/ |
//+------------------------------------------------------------------+

extern double TakeProfit = 50 ;
extern double Lots = 0.1 ;
extern double TrailingStop = 30 ;
extern double MACDOpenLevel= 3 ;
extern double MACDCloseLevel= 2 ;
extern double MATrendPeriod= 26 ;

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
   double MacdCurrent, MacdPrevious, SignalCurrent;
   double SignalPrevious, MaCurrent, MaPrevious;
   int cnt, ticket, total;
// initial data checks
// it is important to make sure that the expert works with a normal
// chart and the user did not make any mistakes setting external 
// variables (Lots, StopLoss, TakeProfit, 
// TrailingStop) in our case, we check TakeProfit
// on a chart of less than 100 bars
   if ( Bars < 100 )
     {
       Print ( "bars less than 100" );
       return ( 0 );  
     }
   if (TakeProfit< 10 )
     {
       Print ( "TakeProfit less than 10" );
       return ( 0 );   // check TakeProfit
     }
// to simplify the coding and speed up access
// data are put into internal variables
   MacdCurrent= iMACD ( NULL , 0 , 12 , 26 , 9 , PRICE_CLOSE ,MODE_MAIN, 0 );
   MacdPrevious= iMACD ( NULL , 0 , 12 , 26 , 9 , PRICE_CLOSE ,MODE_MAIN, 1 );
   SignalCurrent= iMACD ( NULL , 0 , 12 , 26 , 9 , PRICE_CLOSE ,MODE_SIGNAL, 0 );
   SignalPrevious= iMACD ( NULL , 0 , 12 , 26 , 9 , PRICE_CLOSE ,MODE_SIGNAL, 1 );
   MaCurrent= iMA ( NULL , 0 ,MATrendPeriod, 0 , MODE_EMA , PRICE_CLOSE , 0 );
   MaPrevious= iMA ( NULL , 0 ,MATrendPeriod, 0 , MODE_EMA , PRICE_CLOSE , 1 );

   total= OrdersTotal ();
   if (total< 1 ) 
     {
       // no opened orders identified
       if ( AccountFreeMargin ()<( 1000 *Lots))
        {
         Print ( "We have no money. Free Margin = " , AccountFreeMargin ());
         return ( 0 );  
        }
       // check for long position (BUY) possibility
       if (MacdCurrent< 0 && MacdCurrent>SignalCurrent && MacdPrevious<SignalPrevious &&
         MathAbs (MacdCurrent)>(MACDOpenLevel* Point ) && MaCurrent>MaPrevious)
        {
         ticket= OrderSend ( Symbol (),OP_BUY, Lots() ,Ask, 3 , 0 ,Ask+TakeProfit* Point , "macd sample" , 16384 , 0 , Green );
         if (ticket> 0 )
           {
             if ( OrderSelect (ticket,SELECT_BY_TICKET,MODE_TRADES)) Print ( "BUY order opened : " , OrderOpenPrice ());
           }
         else Print ( "Error opening BUY order : " , GetLastError ()); 
         return ( 0 ); 
        }
       // check for short position (SELL) possibility
       if (MacdCurrent> 0 && MacdCurrent<SignalCurrent && MacdPrevious>SignalPrevious && 
         MacdCurrent>(MACDOpenLevel* Point ) && MaCurrent<MaPrevious)
        {
         ticket= OrderSend ( Symbol (),OP_SELL, Lots() ,Bid, 3 , 0 ,Bid-TakeProfit* Point , "macd sample" , 16384 , 0 , Red );
         if (ticket> 0 )
           {
             if ( OrderSelect (ticket,SELECT_BY_TICKET,MODE_TRADES)) Print ( "SELL order opened : " , OrderOpenPrice ());
           }
         else Print ( "Error opening SELL order : " , GetLastError ()); 
         return ( 0 ); 
        }
       return ( 0 );
     }
   // it is important to enter the market correctly, 
   // but it is more important to exit it correctly...   
   for (cnt= 0 ;cnt<total;cnt++)
     {
       OrderSelect (cnt, SELECT_BY_POS, MODE_TRADES);
       if ( OrderType ()<=OP_SELL &&   // check for opened position 
         OrderSymbol ()== Symbol ())   // check for symbol
        {
         if ( OrderType ()==OP_BUY)   // long position is opened
           {
             // should it be closed?
             if (MacdCurrent> 0 && MacdCurrent<SignalCurrent && MacdPrevious>SignalPrevious &&
               MacdCurrent>(MACDCloseLevel* Point ))
                {
                 OrderClose ( OrderTicket (), OrderLots (),Bid, 3 , Violet ); // close position
                 return ( 0 ); // exit
                }
             // check for trailing stop
             if (TrailingStop> 0 )  
              {                 
               if (Bid- OrderOpenPrice ()> Point *TrailingStop)
                 {
                   if ( OrderStopLoss ()<Bid- Point *TrailingStop)
                    {
                     OrderModify ( OrderTicket (), OrderOpenPrice (),Bid- Point *TrailingStop, OrderTakeProfit (), 0 , Green );
                     return ( 0 );
                    }
                 }
              }
           }
         else // go to short position
           {
             // should it be closed?
             if (MacdCurrent< 0 && MacdCurrent>SignalCurrent &&
               MacdPrevious<SignalPrevious && MathAbs (MacdCurrent)>(MACDCloseLevel* Point ))
              {
               OrderClose ( OrderTicket (), OrderLots (),Ask, 3 , Violet ); // close position
               return ( 0 ); // exit
              }
             // check for trailing stop
             if (TrailingStop> 0 )  
              {                 
               if (( OrderOpenPrice ()-Ask)>( Point *TrailingStop))
                 {
                   if (( OrderStopLoss ()>(Ask+ Point *TrailingStop)) || ( OrderStopLoss ()== 0 ))
                    {
                     OrderModify ( OrderTicket (), OrderOpenPrice (),Ask+ Point *TrailingStop, OrderTakeProfit (), 0 , Red );
                     return ( 0 );
                    }
                 }
              }
           }
        }
     }
   return ( 0 );
  }
// the end.

double Lots()
  {
   double lot;
   lot=( AccountFreeMargin ()* AccountLeverage ()*Risk)/( MarketInfo ( Symbol (), MODE_LOTSIZE));
   lot= NormalizeDouble (lot, 1 );
   return (lot);
  }
Aşağı yukarı böyle
 
Vinin :
Aşağı yukarı böyle
Yardımın için teşekkürler!
 
skyjet :
Yardımın için teşekkürler!

Yalnızca lot hesaplama işlevi evrensel hale getirilmelidir
 

Merhaba.

Ben bu işte acemiyim. Ve bu yüzden yardım istiyorum.


işte bir kod parçası:

 int start()
  {
  
    
   if ( IsTesting ()) return ;
 
      
     if ( AccountBalance () < 111 ){
       Alert ( "Erorr Balance" );
       return ; 
      
     if ( AccountNumber () != 11111 ){
       Alert ( "Error AccountNumber" );
       return ;}
      
   }
  

İlk önce tutarın bakiyesini kontrol etmek istiyorum 111'den az ise uyarı ve iade, daha sonra hesap numarasını kontrol et, hesap doğruysa işlem yap, değilse uyar ve iade et...

Ancak herhangi bir nedenle AccountBalance veya AccountNumber'ı kaldırırsam yalnızca ayrı olarak yürütülür ...

Belki bir noob sorusu, ama neyi özlüyorum?

Teşekkür ederim

 
volodin_andrei :

Merhaba.

Ben bu işte acemiyim. Ve bu yüzden yardım istiyorum.


işte bir kod parçası:

111'den az ise önce bakiyeyi kontrol etmesini, sonra uyarıp iade etmesini, daha sonra hesap numarasını kontrol etmesini, hesap doğruysa ticaret yapmasını istiyorum, sonra değilse uyar ve iade et...

Ancak, herhangi bir nedenle, AccountBalance veya AccountNumber'ı kaldırırsam yalnızca ayrı olarak yürütülür ...

Belki bir noob sorusu, ama neyi özlüyorum?

Teşekkür ederim


Ve parantez koymaya çalışmadılar (kıvırcık)

 int start()
  {
  
    
   if ( IsTesting ()) return ;
 
      
   if ( AccountBalance () < 111 )
   {
       Alert ( "Erorr Balance" );
       return ( 0 ); 
   }  
   if ( AccountNumber () != 11111 )
   {
       Alert ( "Error AccountNumber" );
       return ( 0 );
   }
   return ( 0 );
}

Parantezler yeterliydi ama yanlış yerlerde

 

Yardımınızla düzelttim, ancak derlerken yemin ediyor, ekran görüntüsü veriyorum, görünüşe göre bir yerde fazladan bir parantez var veya .... :(

 
Köşeli ayraç eşleştirme özelliğine sahip bir metin düzenleyici bulun.
 
Vinin :

Ve diğer enstrümanlar veya diğer danışmanlar için de pozisyonlar açıldıysa? ne yazdığını düşün
Ne yazık ki, koşulun açıklaması eksiksiz olduğunu iddia etmedi ve "40. sıra" kavramını tam olarak açıklamaz, o zaman EA'da açılan siparişlerin sayısını standart işlevleri kullanmak yerine bir değişkende tutmak daha kolaydır. . Bu durumdaki ertelemeler ayrı bir konudur.