초보자의 질문 MQL4 MT4 MetaTrader 4 - 페이지 153

 

정보 패널 이있는 클래스가있는 코드가 있습니다 !!!
하지만 문제가 있습니다!
라벨이 붙어있고 원격 설정을 통해 반응할 수 있어요.... 그래서 설정을 2~3번 변경하면 패널 자체가 다른 방향으로 움직입니다!!! 그리고 기간을 2~3번 바꾸면!! 그것을 제거하는 방법???


추가 정보:
CAppDialog::Destroy(const int reason) 함수에서 Dialog.mqh 파일의 행을 주석 처리하면
if(m_deinit_reason!=WRONG_VALUE)
반품;
그러면 패널은 일반적으로 시간 프레임을 전환할 때 파괴되고 다시 시작됩니다.

파일:
TradePanel.mq4  15 kb
 

안녕하세요. 그래픽 개체에서만 작동하는 MT4에 표시기를 작성하고 있으며 동일한 표시기가 다른 기간에 작동하여 생성된 그래픽 개체의 위치도 추적합니다. 이전 기간의 수직선을 수동으로 이동하면 추세선이 새 위치 vert에서 다시 그려집니다. 선, 그리고 젊은 기간의 수직선도 다시 그려집니다. 이 모든 것은 OnChartEvent 이벤트에서 처리됩니다. 문제는 vert를 움직일 때입니다. 높은 주기의 선은 때때로 낮은 주기의 개체가 즉시 다시 그려지지 않고 정점을 두 번 클릭할 때만 다시 그려집니다. 더 높은 기간에 작동하는 표시기의 라인. 그리고 더 강력한 다른 PC에서는 이런 일이 덜 자주 발생합니다. 코드에서 개체를 다시 그린 후 ChartRedraw() 함수를 사용합니다.

PC 리소스가 부족하기 때문일 수 있습니까?

다른 차트에서 지표를 실행하고 EventChartCustom을 사용하여 더 높은 기간에 작동하는 지표에서 두 번째 지표까지 사용자 지정 이벤트를 생성 하려고 합니다. 프로그램 속도가 빨라질까요?

 

구조의 모든 요소를 빠르게 재설정(지우기)하는 방법은 무엇입니까?


구조는 글로벌합니다. 특정 순간에 0으로 재설정한 다음 새 데이터로 채워야 합니다.

요소별로 모든 것을 0으로 동일시할 수 있다는 것을 이해합니다. 다른 방법이 있습니까?


구조체ABC{

정수 a1;

정수 a2;

정수 a3;

};

ABC ㄱ;

이런게 필요해

a = 0; //구조의 모든 요소가 0이 됨

 
Sergey Likho :

구조의 모든 요소를 빠르게 재설정(지우기)하는 방법은 무엇입니까?


구조는 글로벌합니다. 특정 순간에 0으로 재설정한 다음 새 데이터로 채워야 합니다.

요소별로 모든 것을 0으로 동일시할 수 있다는 것을 이해합니다. 다른 방법이 있습니까?


구조체ABC{

정수 a1;

정수 a2;

정수 a3;

};

ABC ㄱ;

이런게 필요해

a = 0; //구조의 모든 요소가 0이 됨

 ZeroMemory ( a );
 
N 포인트 이후에 작동하고 가격을 따르는 후행 스레드가 있는 사람은 누구입니까?
가지고 있지만 N 포인트 이후에 작동하고 손익분기점에서 멈춥니다....
고쳐주세요, 머리가 부러졌어요!!!
void TrailingSL()
{
int    er;
if(shagtrala==0) return;
for(int i = 0; i < OrdersTotal(); i++)
  {
   if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
     {
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
        {
         if(OrderType()==OP_BUY && NormalizeDouble(Ask-OrderOpenPrice(), Digits) >= NormalizeDouble(shagtrala, Digits) &&
         NormalizeDouble(Ask-OrderStopLoss(), Digits) > NormalizeDouble(lTrailingDistance, Digits))
           {
            er = OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss() + (lTrailingDistance * _Point), OrderTakeProfit(),OrderExpiration(),0);
           }
         if(OrderType()==OP_SELL && NormalizeDouble(OrderOpenPrice()-Bid,Digits) >= NormalizeDouble(shagtrala, Digits) &&
         NormalizeDouble(OrderStopLoss()-Bid, Digits) > NormalizeDouble(lTrailingDistance, Digits))
           {
            er = OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss() - (lTrailingDistance * _Point), OrderTakeProfit(),OrderExpiration(),0);
           }
        }
     }
  }
return;
}
 
ponochka :
N 포인트 이후에 작동하고 가격을 따르는 후행 스레드가 있는 사람은 누구입니까?
가지고 있지만 N 포인트 이후에 작동하고 손익분기점에서 멈춥니다....
고쳐주세요, 머리가 부러졌어요!!!

여기 내 트롤이 작동합니다.

 //____________________________________________________________________________________
bool trailingpos( int magic_, int trail_p){
   string sym= Symbol (); bool res = true ; double sl,slnew,tpips = trail_p* Point ; int i,k= OrdersTotal ();
   for (i= 0 ;i<k;i++){
       if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )){
         if ( OrderSymbol ()==sym && OrderMagicNumber ()==magic_){
             switch ( OrderType ()){
               case OP_BUY :
                           slnew = NormalizeDouble ( Ask - tpips, Digits );
                           sl = OrderStopLoss ();
                           if ( OrderOpenPrice () <slnew)
                               if ((sl < slnew) || (sl == 0.0 )){
                                     if (! OrderModify ( OrderTicket (), OrderOpenPrice (),slnew, OrderTakeProfit (), OrderExpiration (), clrNONE ))
                                                   {res = false ; Print ( __FUNCTION__ , "OrderModify завершилась с ошибкой № " , GetLastError ());}
                           }
                           break ;
               case OP_SELL :
                           slnew = NormalizeDouble ( Bid + tpips, Digits );
                           sl = OrderStopLoss ();
                           if ( OrderOpenPrice ()> slnew)
                               if ((sl > slnew) || sl == 0.0 ){
                                     if (! OrderModify ( OrderTicket (), OrderOpenPrice (),slnew, OrderTakeProfit (), OrderExpiration (), clrNONE ))
                                                   {res = false ; Print ( __FUNCTION__ , "OrderModify завершилась с ошибкой № " , GetLastError ());}
                           }
                           break ;
              }
           }
        }
     }
return (res);}
//____________________________________________________________________________________

함수 호출 2 매개변수 매직 번호 및 pp 트롤

 
Sergey Likho :

구조의 모든 요소를 빠르게 재설정(지우기)하는 방법은 무엇입니까?


구조는 글로벌합니다. 특정 순간에 0으로 재설정한 다음 새 데이터로 채워야 합니다.

요소별로 모든 것을 0으로 동일시할 수 있다는 것을 이해합니다. 다른 방법이 있습니까?

 // Обнуляет любую простую структуру
template < typename T>
void SetNull( T &Value )
{
   static T NullValue = { 0 };
  
  Value = NullValue;
}
 

안녕하세요! 하루 동안의 모든 주문에 대한 총 수입에 대한 코드가 있습니까?

나는 다음과 같은 것을 가지고 있습니다.

 double getProfitFromTime( datetime time)
  {
   double profit = 0 ;
   
   for ( int i = OrdersHistoryTotal () - 1 ; i >= 0 ; i--)
       if ( OrderSelect (i, SELECT_BY_POS , MODE_HISTORY ) && OrderSymbol () == Symbol () && OrderMagicNumber () == magic)
        {
         if ( OrderCloseTime () < time)
             break ;
         
         profit += OrderProfit () + OrderCommission () + OrderSwap ();
        }
   
   return (profit);
  }

다음과 같이 참조해야 합니다.

getProfitFromTime( iTime ( NULL , PERIOD_D1 , 0 );

하루에 하나의 통화 쌍에 대한 이익과 모든 통화 쌍에 대한 총 이익을 볼 수 있도록 스레드로 변경할 수 있습니까?

 
ponochka :

모든 통화 쌍의 합계는?

다음 조건에서 OrderSymbol () == Symbol ()을 제거합니다.

 if ( OrderSelect (i, SELECT_BY_POS , MODE_HISTORY ) && OrderSymbol () == Symbol () && OrderMagicNumber () == magic)
그런 다음 코드의 이 부분은 터미널 기록의 모든 주문을 매직 번호로만 계산합니다. 다른 통화의 매직 번호가 동일한 경우 OrderMagicNumber () == magic을 제거하면 다음 없이 모든 주문을 계산합니다. 매직넘버를 고려하여
 

안녕 모두. 뉴비에게 말해보세요. 나는 확산의 행동에 대해 약간의 연구를 하고 싶습니다. 전체 스프레드를 계산하는 코드가 있습니다. 모든 것이 작성되었으며 모든 것이 정상 작동합니다.

 void ModifySpread()
{
   int Spread = ( Ask - Bid ) / Point ;
  
    
  Sumsp = SumSp + Spread;
  Vol++;
  
  PrevTime = Time [ 0 ];
  
   return ;
}

스프레드가 움직이지 않는 순간, 즉 매수와 매도가 변경되지 않은 순간을 계산에서 제거하고 싶습니다.
나는 이것을 이렇게 한다:

 void ModifySpread()
{
   int Spread = ( Ask - Bid ) / Point ;
   if ((prevsbid == Bid )) && (prevsask == Ask )) return ;
   
  SumSp = SumSp + Spread;
  Vol++;
  
  

  prevsask = Ask ;
  prevsbid = Bid ;
  PrevTime = Time [ 0 ];
   return ;
}

하지만 아무것도 바뀌지 않습니다. 내가 어디 멍청이야?