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

 
Vinin :

Veya bir danışmanın yardımıyla aktif araçların bir listesini yapabilirsiniz. Yaklaşım biraz karmaşık. çözmek daha kolay olabilir mi
Girdi parametrelerinde basitçe bir sayı belirtmek mümkün olabilir, ancak gerçek şu ki, ticaret sürecinde bazı para birimlerinde ticaretin duracağı durumlar ortaya çıkabilir. O zaman diğerlerinin danışmanları parametrelerini yeniden hesaplamalıdır.
 
forexnew :
Girdi parametrelerinde basitçe bir sayı belirtmek mümkün olabilir, ancak gerçek şu ki, ticaret sürecinde bazı para birimlerinde ticaretin duracağı durumlar ortaya çıkabilir. O zaman diğerlerinin danışmanları parametrelerini yeniden hesaplamalıdır.

neden belirtiniz. Danışman kendisi alabilir. Aynı zamanda diğer danışmanları da yönetebilir. Her şey göreve bağlı.
 

Figar0:

В самой функции ошибок нет, наверно ошибки возникают при попытке ее использовать, но это вы нам не показываете. Выкладывайте то что не компилится прямо файлом и гадать будет не надо.

//+------------------------------------------------------------------+
//|                                                  MACD Sample.mq4 |
//|                      Copyright © 2005, MetaQuotes Software Corp. |
//|                                       http://www.metaquotes.net/ |
//+------------------------------------------------------------------+

extern double TakeProfit = 50;
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
     }
double Lots()      // Расчет используемого лота
  {
   double Lots;
   Lots=AccountFreeMargin()/10000*5;
   Lots=MathMin(15,MathMax(0.1,Lots));
   if(Lots<0.1) 
     Lots=NormalizeDouble(Lots,2);
   else
     {
     if(Lots<1) Lots=NormalizeDouble(Lots,1);
     else       Lots=NormalizeDouble(Lots,0);
     }
     return(Lots);
  }
//+------------------------------------------------------------------+  

// 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.
 
Vinin :

neden belirtiniz. Danışman kendisi alabilir. Aynı zamanda diğer danışmanları da yönetebilir. Her şey göreve bağlı.

Diğer danışmanları yönetmeyi bilmiyorum. Tüm döviz çiftleri için yalnızca bir danışman vardır ve model aşağıdaki gibidir:

2 döviz çifti varsa: ilkinde - 2, ikincisinde - 1 gösterilir

3 döviz çifti varsa: ilkinde - 3, ikincisinde - 2, üçüncüsünde - 1 gösterilir

4 döviz çifti varsa: ilkinde - 4, ikincide - 3, üçüncüde - 2, dördüncüde - 1 gösterilir.

İlk para biriminde hesaplananın diğer çiftteki danışman tarafından dikkate alınmadığı veya bir şekilde açık pencerelerin sayısına (döviz çiftleri) bağlı olduğu anlaşılıyor?!

 
Vinin :

neden belirtiniz. Danışman kendisi alabilir. Aynı zamanda diğer danışmanları da yönetebilir. Her şey göreve bağlı.
Teşekkür ederim. Zaten kendim anladım. Sadece satırı kaldırmanız ve kp'yi 1'den saymanız yeterlidir.
 if ( OrderSymbol ()== Symbol ())   break ;
 
skyjet :

Başlangıç olarak, parti hesaplama işlevi, başlatma işlevinin içinde bildirilir. Onu dışarı çıkar. O zaman bildirilmemiş bir değişkenle birkaç hata olacak, ama evet, onlarla kendiniz ilgileneceğinizi düşünüyorum.
 
skyjet :
Parti hesaplamasında NormalizeDlouble() nedir?

Ondalık noktadan sonra iki ondalık basamağa sahip olmak. Aksi takdirde 0,009 lotu olan bir pozisyon açılmayacaktır, çünkü minimum lot adımının katı olmayacaktır.

   double Lots;
   Lots= AccountFreeMargin ()/ 10000 * 5 ;
   Lots= MathMin ( 15 , MathMax ( 0.1 ,Lots));
   if (Lots< 0.1 ) 
     Lots= NormalizeDouble (Lots, 2 );
   else
     {
     if (Lots< 1 ) Lots= NormalizeDouble (Lots, 1 );// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     else        Lots= NormalizeDouble (Lots, 0 );// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     } 

 

Çocuklar!

artan lot ile her 40. sipariş nasıl yapılır? :: piyasa ve ertelenmiş

belki bu yüzden?

 int Nom = OrderTicket ();                         // Номер ордера

a= Nom% 40 ;                                       // к-во делить на 40 без остатка
if a = 0
lot = 2 ;  

 
 
Figar0 :

Başlangıç olarak, parti hesaplama işlevi, başlatma işlevinin içinde bildirilir. Onu dışarı çıkar. O zaman bildirilmemiş bir değişkenle birkaç hata olacak, ama evet, onlarla kendiniz ilgileneceğinizi düşünüyorum.
Yardım için teşekkürler.
 
DDFedor :
hava jeti :
Parti hesaplamasında NormalizeDlouble() nedir?

Ondalık noktadan sonra iki ondalık basamağa sahip olmak. Aksi takdirde 0,009 lotu olan bir pozisyon açılmayacaktır, çünkü minimum lot adımının katı olmayacaktır.

Açıklama için teşekkürler.