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

 
Snajper007 satış emri açıldı, fonksiyon ortalama fiyatı verdi. Ama 3. sıra açıldığında fonksiyon hem eski değeri veriyor hem de yenisini veriyor (Dergideki baskıya baktım) ve sonuç olarak eskisi kalıyor. Neyi yanlış yaptı?
 //+----------------------------------------------------------------------------+
//| Расчет среденй цены (0)-buy (1)-sell                                       |
//+----------------------------------------------------------------------------+
double GetAveragePrice( int ot=- 1 )
  {
   double order_lots = 0 , order_price = 0 , avg_price = 0 ;
     {
       for ( int i = OrdersTotal ()- 1 ; i>= 0 ; i--)
        {
         if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES))
           {
             if (OrderSymbol() == Symbol () && OrderMagicNumber() == Magic)
              {
               if (OrderType()==ot||ot< 0 )
                 {
                  order_lots += OrderLots();
                  order_price += OrderOpenPrice() * OrderLots();
                 }
              }
           }
        }
     }
   avg_price = NormalizeDouble (order_price / order_lots, Digits );
   return (avg_price);
  }
//+----------------------------------------------------------------------------+
 
MakarFX # :
Teşekkür ederim!
 
İyi günler, göstergelere göre anlaşmaları açma filtresinin uygulanmasına kim yardımcı olabilir?
 
Sergei Pimenov # :
İyi günler, göstergelere göre anlaşmaları açma filtresinin uygulanmasına kim yardımcı olabilir?
Daha
 

Lütfen mantığı geliştirmeye yardımcı olun. Kapanan emirler ile yenisinin açılması arasında saat cinsinden bir duraklama olması gerekir. Bir şey buldum. Ama çalışmıyor.

OrderCloseTime() > 0 && TimeCurrent () - OrderCloseTime() > FstOrderTimeHour* 3600 // сигнал на открытие ордера

OrderCloseTime() == 0 // сигнал на открытие первого ордера

где int FstOrderTimeHour = 1 // пауза в часах
 
Порт-моне тв # :

Lütfen mantığı geliştirmeye yardımcı olun. Kapanan emirler ile yenisinin açılması arasında saat cinsinden bir duraklama olması gerekir. Bir şey buldum. Ama çalışmıyor.

 //--- input parameters
input int HourPause = 1 ;   // Пауза в часах
//--- global parameters
datetime   pause;
//+------------------------------------------------------------------+
void OnTick()
  {
   pause=GetInfoLastPos( 3 )+(HourPause* 60 * 60 );
   // выключаем торговлю
   if ( TimeCurrent ()<pause) return ;
  .......
  }
//+----------------------------------------------------------------------------+
//|  Функция возвращает по символу и магику                             MakarFX|
//|  1 - размер лота последней закрытой позиции                                |
//|  2 - размер профита с учетом комиссии и свопа последней закрытой позиции   |
//|  3 - время последней закрытой позиции                                      |
//+----------------------------------------------------------------------------+
double GetInfoLastPos( int a= 1 )
  {
   datetime t= 0 ;
   double result= 0 ,l= 0 ,p= 0 ,f= 0 ;
   int i=OrdersHistoryTotal();
   for ( int pos= 0 ; pos<i; pos++)
     {
       if ( OrderSelect (pos, SELECT_BY_POS, MODE_HISTORY))
        {
         if (OrderSymbol()== _Symbol && OrderMagicNumber()==Magic )
           {
             if (OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               if (t<OrderCloseTime()) {t=OrderCloseTime(); l=OrderLots(); p=OrderProfit()+OrderCommission()+OrderSwap();}
              }
           }
        }
     }
   if (a== 1 ) {result=l;} else
   if (a== 2 ) {result=p;} else
   if (a== 3 ) {result=( double )t;}
   else      {result= 0 ;}
   return (result);
  }
//+----------------------------------------------------------------------------+

Sihirbaz gerekli değilse - sarı kahramanlık.

 
MakarFX # :

bir sipariş açmadan önce, prev_ticket'teki mevcut max_ticket'i hatırlarsınız

İyi seyirler Makar, sondan bir önceki siparişin biletini belirlemenin bu yönteminin ciddi bir dezavantajı var. Bu yöntem, ızgaradaki maksimum sıra açıldığında çalışır ve bu olmazsa, sondan bir önceki sıra sonuncuya eşittir, resme bakın. Bir fonksiyon yazmaya çalışıyorum ama saçmalığın son bilete göre belirlendiği ortaya çıktı. Seçilen koşul çalışmak istemiyor.

 //+----------------------------------------------------------------------------+
//| Расчет тикета предпоследнего ордера в сетке                                 |
//+----------------------------------------------------------------------------+
int GetTicketPenultimateOrder()
  {
   penultimate_ticket = 0 ;
     {
       for ( int cnt = OrdersTotal () - 1 ; cnt >= 0 ; cnt--)
        {
         if ( OrderSelect (ticket, SELECT_BY_TICKET, MODE_TRADES))
           {
             if (OrderSymbol() == Symbol () && OrderMagicNumber() == Magic)
              {
               if (OrderType() == OP_BUY || OrderType() == OP_SELL)
                 {
                   if (OrderTicket() > penultimate_ticket)
                     if (penultimate_ticket < GetTicketMaxOrder())
                        penultimate_ticket = OrderTicket();

                 }
              }
           }
        }
     }
   return (penultimate_ticket);
  }

 
EVGENII SHELIPOV # :

İyi seyirler Makar, sondan bir önceki siparişin biletini belirlemenin bu yönteminin ciddi bir dezavantajı var. Bu yöntem, ızgaradaki maksimum sıra açıldığında çalışır ve bu olmazsa, sondan bir önceki sıra sonuncuya eşittir, resme bakın. Bir fonksiyon yazmaya çalışıyorum ama saçmalığın son bilete göre belirlendiği ortaya çıktı. Seçilen koşul çalışmak istemiyor.

Sana çalışan bir kod verdim!
 
MakarFX # :
Sana çalışan bir kod verdim!

Bu kod ile yukarıda yazdığım her şey oluyor ve hatta resim ekliyorum.

 
EVGENII SHELIPOV # :

Bu kod ile yukarıda yazdığım her şey oluyor ve hatta resim ekliyorum.

Hata, sondan bir önceki arama kodunda değil, büyük olasılıkla bilginin metne çıktısındadır.