Kapatılan siparişler için kar hesaplaması "YARDIM" - sayfa 7

 
Sergey Gritsay :
ve tüm bunlar nerede? bunu bir değişkende veya dizide bir yere mi yazıyorsunuz? önce nerede sakladığınızı gösterin, sonra ne yapacağınız görülecektir.
Hiçbir yerde. Tüm bunları doğru bir şekilde oluşturmak ve kâr verilerini toplamak gerekiyor.
 
Natashe4ka :

Peki, o zaman raflarda: siparişler için bir kapanış saati var, kapanış saatinde çakışan bir bilet veya sipariş sayısı var. Nasıl birleştirilir ve bu siparişlerin karı nasıl hesaplanır ?
Zor değil gibi görünüyor, ama net değil.

Bunlardan hangisinin kırmızı ile vurgulandığını şimdiye kadar kimse anlayamadı. Bu siparişler için kesin arama kriterlerine ihtiyacımız var. Bu nedenle parmaklarda nasıl söyleneceğini resimlerle vb. açıklamaya çalışın.
 
Sergey Gritsay :
Bunlardan hangisinin kırmızı ile vurgulandığını şimdiye kadar kimse anlayamadı. Bu siparişler için kesin arama kriterlerine ihtiyacımız var. Bu nedenle parmaklarda nasıl söyleneceğini resimlerle vb. açıklamaya çalışın.

?

Neden kimse anlayamıyor, büyük ihtimalle kendini kastediyorsun?

Uzun zamandır her şey açıktı.

Madam, programının ayrıntılarını yayınlamadan bunu kendi başına yapmak istiyor.

 
Sergey Gritsay :
Bunlardan hangisinin kırmızı ile vurgulandığını şimdiye kadar kimse anlayamadı. Bu siparişler için kesin arama kriterlerine ihtiyacımız var. Bu nedenle parmaklarda nasıl söyleneceğini resimlerle vb. açıklamaya çalışın.

Evet, zaten kesinlikle %100 çalışma koşulu verdim ve onu bitmiş bir kod olarak ekledim. Aynı zamanda kodun terminali yeniden başlatmaktan korkmayan bir yöntem kullandığını ve terminal açıldığında hiçbir şeyin kaybolmayacağını ve çalışmaya devam edeceğini de belirtmek gerekir. Ama burada sadece test cihazında çalışacak bir bisiklet icat ettiler.

Sergey , ayrıca orijinal TS kodunda, bir seri 5 pozisyondan kapatıldığında, kapanışın ortasında bir emrin de silindiğini, bunun da gerçek ticarette iyi bir şeye yol açmayacağını unutmayın. Genel olarak, araç dışında herkes için her şey açıktır.

 
Pekala, her şey Natalia'nın almak istediği şeye girmiş gibi görünüyor.
//+------------------------------------------------------------------+
//|                                                   Natashe4ka.mq4 |
//|                                                   Sergey Gritsay |
//|                         https://www.mql5.com/ru/users/sergey1294 |
//+------------------------------------------------------------------+
#property copyright "Sergey Gritsay"
#property link        "https://www.mql5.com/ru/users/sergey1294"
#property version    "1.00"
#property strict

input int Magic= 1 ; //Identification number
double Profit= 0 ;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//---

//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
   color ProfitColor= 0 ;

// START //
   LastProfitCL_1(Profit, TimeCurrent (),- 1 );
  
   if (Profit< 0 )ProfitColor= clrRed ;
   else if (Profit> 0 )ProfitColor= clrLimeGreen ;
   else ProfitColor= clrDarkGray ;
  
   ObjectCreate ( "Last Profit" , OBJ_LABEL , 0 , 0 , 0 );
   ObjectSet ( "Last Profit" , OBJPROP_CORNER , 1 );
   ObjectSet ( "Last Profit" , OBJPROP_XDISTANCE , 5 );
   ObjectSet ( "Last Profit" , OBJPROP_YDISTANCE , 15 );
   ObjectSetText ( "Last Profit" , StringConcatenate ( "Last Profit: " , DoubleToStr (Profit, 2 )), 10 , "Arial" ,ProfitColor);
// END START //

  }
//+------------------------------------------------------------------+
//Вариант 1
//+------------------------------------------------------------------+
bool LastProfitCL_1( double &LastProfit, //сюда записываем профит
                   datetime timecurent, // текущее время
                   int op=- 1 //"op" позиция (-1 любая позиция)                
                  )
  {
   double profit= 0 ;
   int cnt= 0 ;
   datetime timecurents= 0 ;
   int total= OrdersHistoryTotal ();

   for ( int i=total- 1 ;i>= 0 ;i--)
     {
       if (! OrderSelect (i, SELECT_BY_POS , MODE_HISTORY )) continue ;
       if ( OrderMagicNumber ()!=Magic) continue ;
       if ( OrderSymbol ()!= _Symbol ) continue ;
       if ( OrderType ()> 1 ) continue ; // исключим удаленные отложенные ордера
       if ( OrderCloseTime ()!=timecurent) continue ;
       if ( OrderType ()==op || op==- 1 )
        {
         profit+= OrderProfit ()+ OrderCommission ()+ OrderSwap ();
         cnt++;
        }
     }
   if (cnt!= 0 )
     {
      LastProfit=profit;
       return ( true );
     }
   return ( false );
  }
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//|   Вариант 2                                                               |
//+------------------------------------------------------------------+
bool LastProfitCL_2( double &LastProfit, //сюда записываем профит
                   datetime timecurent, // текущее время
                   int op=- 1 //"op" позиция (-1 любая позиция)                
                  )
  {
   double profit= 0 ;
   int cnt= 0 ;
   datetime timecurents= 0 ;
   int total= OrdersHistoryTotal ();
   if ( OrderSelect (total- 1 , SELECT_BY_POS , MODE_HISTORY ))
     {
      timecurents= OrderCloseTime ();
     }
   for ( int i=total- 1 ;i>= 0 ;i--)
     {
       if (! OrderSelect (i, SELECT_BY_POS , MODE_HISTORY )) continue ;
       if ( OrderMagicNumber ()!=Magic) continue ;
       if ( OrderSymbol ()!= _Symbol ) continue ;
       if ( OrderCloseTime ()<timecurents) continue ;
       if ( OrderType ()> 1 ) continue ; // исключим удаленные отложенные ордера
       if ( OrderType ()==op || op==- 1 )
        {
         profit+= OrderProfit ()+ OrderCommission ()+ OrderSwap ();
         cnt++;
        }
     }
   if (cnt!= 0 )
     {
      LastProfit=profit;
       return ( true );
     }
   return ( false );
  }
//+------------------------------------------------------------------+
....
 

Fonksiyonun ikinci versiyonunda düzeltmeler yapıldı

bool LastProfitCL_2( double &LastProfit, //сюда записываем профит
                     datetime timecurent, // текущее время
                     int op=- 1 //"op" позиция (-1 любая позиция)                
                    )
  {
   double profit= 0 ;
   int cnt= 0 ;
   datetime timecurents= 0 ;
   int total= OrdersHistoryTotal ();
   for ( int i=total- 1 ;i>= 0 ;i--)
     {
       if (! OrderSelect (i, SELECT_BY_POS , MODE_HISTORY )) continue ;
       if ( OrderType ()> 1 ) continue ; // исключим удаленные отложенные ордера
       if ( OrderType ()!=op && op!=- 1 ) continue ;  
       if ( OrderMagicNumber ()!=Magic) continue ;
       if ( OrderSymbol ()!= _Symbol ) continue ;
       if (timecurents== 0 )timecurents= OrderCloseTime (); // запомним время последнего закрытого ордера
       if ( OrderCloseTime ()<timecurents) continue ;

      profit+= OrderProfit ()+ OrderCommission ()+ OrderSwap ();
      cnt++;
     }
   if (cnt!= 0 )
     {
      LastProfit=profit;
       return ( true );
     }
   return ( false );
  }

.........

 
Sergey Gritsay :

Fonksiyonun ikinci versiyonunda düzeltmeler yapıldı

Yardım için teşekkürler.
Seçenek 1 düzgün çalışmıyor
Seçenek 2 doğru çalışıyor.
Ve benim versiyonum da düzgün çalışıyor ancak siparişler başka bir güne veya daha fazlasına aktarılırsa yanlış hesaplama değeri net değil, kar 190, ancak 4.27 olması gerekiyor.

3 numaralı ekran görüntüsüne bakın https://www.mql5.com/ru/forum/162930/page3

//+----------------------------------------------------------------------------+
//     Возвращает суммарный профит в валюте депозита серии закрытых ордеров    |
//+----------------------------------------------------------------------------+
double LastProfitCL( int op=- 1 ){ //"op" позиция (-1 любая позиция)
   double LastProfit= 0 ;
   datetime t= 0 ;
   for (i= OrdersHistoryTotal ()- 1 ;i>= 0 ;i--)
     if ( OrderSelect (i, SELECT_BY_POS , MODE_HISTORY ) && ( OrderType ()== OP_BUY || OrderType ()== OP_SELL ) && OrderSymbol ()== Symbol () && OrderMagicNumber ()==magic) {
       if ( OrderSymbol ()!= Symbol ()|| OrderMagicNumber ()!=magic) continue ;
       if (t< OrderCloseTime ()) {t= OrderCloseTime ();}
       if ((op< 0 || OrderType ()==op) && t== OrderCloseTime ()) {LastProfit+= OrderProfit ()+ OrderCommission ()+ OrderSwap ();}
       }
   return (LastProfit);
   }
 
Anlaşıldığı üzere sorun sipariş sayısında değil, siparişlerin başka bir güne veya daha fazlasına aktarılmasında.
 
Natashe4ka :
Anlaşıldığı üzere sorun sipariş sayısında değil, siparişlerin başka bir güne veya daha fazlasına aktarılmasında.
Yani seriyi kapatıyorsun ya da ne? Tüm siparişler bir döngüde kapatılırsa transfer nedir?
 
Vitalie Postolache :
Yani seriyi kapatıyorsun ya da ne? Tüm siparişler bir döngüde kapatılırsa transfer nedir?

Emirler bir seri halinde kapatılır, ancak kapanış için herhangi bir koşul yoksa, siparişler bir veya iki gün içinde toplanır vb.
Her ne kadar sipariş sayısı da kar değerini etkiler.
3'ten fazla sipariş varsa, değer yalnızca son kapatılan siparişten alınır.

Neden: