마감된 주문 "HELP"에 대한 이익 계산 - 페이지 7

 
Sergey Gritsay :
그리고 이 모든 것이 어디에 있습니까? 변수 또는 배열의 어딘가에 씁니다. 저장 위치를 먼저 표시한 다음 다음에 수행할 작업을 표시합니다.
아니 어디. 이 모든 것을 올바르게 생성하고 이익 데이터를 수집하는 것이 필요합니다.
 
Natashe4ka :

글쎄, 선반에 : 주문 마감 시간이 있고 마감 시간과 일치하는 티켓 또는 주문 수가 있습니다. 그것을 결합하고 이러한 주문의 이익을 계산하는 방법은 무엇입니까?
어렵지 않은 것 같지만 명확하지 않습니다.

지금까지 아무도 빨간색으로 강조 표시된 것을 이해할 수 없습니다. 이러한 주문에 대한 정확한 검색 기준이 필요합니다. 따라서 그림 등으로 손가락으로 말하는 방법을 설명하십시오.
 
Sergey Gritsay :
지금까지 아무도 빨간색으로 강조 표시된 것을 이해할 수 없습니다. 이러한 주문에 대한 정확한 검색 기준이 필요합니다. 따라서 그림 등으로 손가락으로 말하는 방법을 설명하십시오.

?

아무도 이해할 수 없습니까? 아마도 당신 자신을 의미합니까?

오랫동안 모든 것이 분명했습니다.

마담은 프로그램의 세부 사항을 알리지 않고 혼자서 하고 싶어합니다.

 
Sergey Gritsay :
지금까지 아무도 빨간색으로 강조 표시된 것을 이해할 수 없습니다. 이러한 주문에 대한 정확한 검색 기준이 필요합니다. 따라서 그림 등으로 손가락으로 말하는 방법을 설명하십시오.

네, 저는 이미 절대적으로 100% 작업 조건을 부여하고 완성된 코드로 첨부했습니다. 동시에 코드는 터미널을 다시 시작하는 것을 두려워하지 않는 방법을 사용하며 터미널이 켜질 때 아무 것도 잃지 않고 계속 작동한다는 점에 유의해야 합니다. 그러나 여기에서 그들은 테스터에서만 작동하는 자전거를 발명했습니다.

Sergey 는 또한 원래 TS 코드에서 시리즈가 5개 위치에서 마감되면 마감 중에 주문도 삭제되므로 실제 거래에서 좋은 결과로 이어지지 않습니다. 일반적으로 차량을 제외한 모든 사람에게 모든 것이 명확합니다.

 
글쎄, 모든 것이 나탈리아가 얻고자 하는 것에 들어간 것 같다.
//+------------------------------------------------------------------+
//|                                                   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 );
  }
//+------------------------------------------------------------------+
....
 

기능의 두 번째 버전을 수정했습니다.

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 :

기능의 두 번째 버전을 수정했습니다.

도와 주셔서 감사합니다.
옵션 1이 제대로 작동하지 않음
옵션 2는 올바르게 작동합니다.
그리고 내 버전도 제대로 작동하지만 주문이 다른 날 이상으로 이전되면 오산 값이 명확하지 않고 이익이 190이지만 4.27이어야합니다

스크린샷 #3 참조 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);
   }
 
결과적으로 문제는 주문 건수가 아니라 주문을 다른 날 또는 그 이상으로 이전하는 데 있습니다.
 
Natashe4ka :
결과적으로 문제는 주문 건수가 아니라 주문을 다른 날 또는 그 이상으로 이전하는 데 있습니다.
그래서 당신은 시리즈를 닫습니다 또는 무엇? 모든 주문이 한 주기로 마감된 경우 전송이란 무엇입니까?
 
Vitalie Postolache :
그래서 당신은 시리즈를 닫습니다 또는 무엇? 모든 주문이 한 주기로 마감된 경우 전송이란 무엇입니까?

주문은 순차적으로 마감되지만 마감 조건이 없으면 하루 이틀 등으로 주문이 모아진다.
주문의 수도 이익 가치에 영향을 미치지만.
3개 이상의 주문이 있는 경우 마지막으로 마감된 주문에서만 값을 가져옵니다.