글럭?! 마우스 클릭 이벤트 처리!!! - 페이지 13

 
sergeev :


서둘러요! 방금!! 이 독특한 제품을 다운로드하십시오!

그리고 당신은 특별히 디자인된 버그가 있는 버전을 얻게 될 것입니다.


:))


이 문제에 대한 해결책이 있습니까? 나는 모든 것을 뒤졌다 - 나는 아직 다른 것을 생각할 수 없다. 그리고 이것은 버그가 아니다. 줄의 변화는 의식적이지만 불타오르고 있다 - 나는 이전에 문제를 썼다.

나는 이것이 흐릿한 것이 아니라 X 축을 따라 선의 이동이라고 말할 것입니다.

 

친애하는 거래처 여러분!

방금 OrderSendAsync 함수에 대한 설명의 .chm 매뉴얼에서 간단한 클릭 가능한 버튼으로 예제를 복사했습니다. 제 경우에는 다음과 같습니다.

void OnChartEvent ( const int id,
                   const long &lparam,
                   const double &dparam,
                   const string &sparam)
{
//--- обработка события CHARTEVENT_CLICK ("Нажатие кнопки мышки на графике")
   if ( id == CHARTEVENT_OBJECT_CLICK )
   {
       Print ( "=> " , __FUNCTION__ , ": sparam = " , sparam );
       if ( sparam== "Finalize" )
      {
         PrintFormat ( "Closing position %s" , _Symbol );
         while ( !ClosePosition() );

         //--- отожмем нажатую кнопку обратно
         ObjectSetInteger ( 0 , "Finalize" , OBJPROP_STATE , false );
      }
       ChartRedraw ();
   }      
}

void CreateFinalizeButton()
{
//--- проверим наличие объекта с именем "Finalize"
   if(ObjectFind(0,"Finalize")>=0)
   {
      //--- если найденный объект не является кнопкой, удалим его
      if(ObjectGetInteger(0,"Finalize",OBJPROP_TYPE)!=OBJ_BUTTON)
         ObjectDelete(0,"Finalize");
   }
   else
      ObjectCreate(0,"Finalize",OBJ_BUTTON,0,0,0); // создадим кнопку "Finalize"
//--- настроим кнопку "Finalize"
   ObjectSetInteger( 0, "Finalize", OBJPROP_CORNER, CORNER_LEFT_LOWER );
   ObjectSetInteger( 0, "Finalize", OBJPROP_XDISTANCE, 100 );
   ObjectSetInteger( 0, "Finalize", OBJPROP_YDISTANCE, 50 );
   ObjectSetInteger( 0, "Finalize", OBJPROP_XSIZE, 150 );
   ObjectSetInteger( 0, "Finalize", OBJPROP_YSIZE, 30 );
   ObjectSetString( 0, "Finalize", OBJPROP_TEXT, "Finalize" );
   ObjectSetInteger( 0, "Finalize", OBJPROP_COLOR, clrBlue );
//--- принудительно обновим график, чтобы кнопки отрисовались немедленно
   ChartRedraw();
}

결과적으로 기간이 변경되면 작동합니다. 이 문제를 해결하는 방법을 알려주시겠습니까?

 
surava :

친애하는 거래처 여러분!

방금 OrderSendAsync 함수에 대한 설명의 .chm 매뉴얼에서 간단한 클릭 가능한 버튼으로 예제를 복사했습니다. 제 경우에는 다음과 같습니다.

결과적으로 기간이 변경되면 작동합니다. 이 문제를 해결하는 방법을 알려주시겠습니까?

OrderSendAsync의 표준 예는 차트 기간 변경에 대해 어떤 식으로든 반응하지 않습니다. 당신이 뭔가를 했다는 뜻입니다. 터미널 유형, 터미널 빌드 및 모든 코드와 같은 추가 정보가 필요합니다.
 
Karputov Vladimir :
OrderSendAsync의 표준 예는 차트 기간 변경에 대해 어떤 식으로든 반응하지 않습니다. 당신이 뭔가를 했다는 뜻입니다. 터미널 유형, 터미널 빌드 및 모든 코드에 대한 추가 정보가 필요합니다.

Vladimir, 신속한 응답에 감사드립니다!

다음은 터미널 정보입니다.


다음은 코드입니다(거래 기능 이 어떻게 작동하는지 배우기 시작했습니다):

 #property copyright "surava"
#property link        "https://www.mql5.com"
#property version    "1.00"

ulong MagicNumber = 1649353089 ;

int OnInit ()
{
   CreateFinalizeButton();

   return ( INIT_SUCCEEDED );
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
{
   while ( !ClosePosition() );
   
   if ( ObjectFind ( 0 , "Finalize" ) >= 0 )
       ObjectDelete ( 0 , "Finalize" );
}
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Trade function                                                   |
//+------------------------------------------------------------------+
void OnTrade ()
{
 
}
//+------------------------------------------------------------------+
//| TradeTransaction function                                        |
//+------------------------------------------------------------------+
void OnTradeTransaction ( const MqlTradeTransaction & trans,
                         const MqlTradeRequest & request,
                         const MqlTradeResult & result)
{
   if ( trans.type != TRADE_TRANSACTION_REQUEST )
       return ;
   
   Print ( "============= New transaction =============" );
   Print ( __FUNCTION__ , " Trans action: " , EnumToString ( trans.type ) ); 
   Print ( __FUNCTION__ , " Trans order state: " , EnumToString ( trans.order_state ) );    
   Print ( __FUNCTION__ , " Result order type: " , EnumToString ( request.action ) );
   Print ( __FUNCTION__ , " Request action: " , EnumToString ( request.type ) );
   Print ( __FUNCTION__ , " Deal price: " , result.price );   
   Print ( __FUNCTION__ , " Result comment: " , result.comment ); 
}

void OnChartEvent ( const int id,
                   const long &lparam,
                   const double &dparam,
                   const string &sparam)
{
//--- обработка события CHARTEVENT_CLICK ("Нажатие кнопки мышки на графике")
   if ( id == CHARTEVENT_OBJECT_CLICK )
   {
       Print ( "=> " , __FUNCTION__ , ": sparam = " , sparam );
       if ( sparam== "Finalize" )
      {
         PrintFormat ( "Closing position %s" , _Symbol );
         while ( !ClosePosition() );

         //--- отожмем нажатую кнопку обратно
         ObjectSetInteger ( 0 , "Finalize" , OBJPROP_STATE , false );
      }
       ChartRedraw ();
   }      
}

void CreateFinalizeButton()
{
//--- проверим наличие объекта с именем "Finalize"
   if ( ObjectFind ( 0 , "Finalize" )>= 0 )
   {
       //--- если найденный объект не является кнопкой, удалим его
       if ( ObjectGetInteger ( 0 , "Finalize" , OBJPROP_TYPE )!= OBJ_BUTTON )
         ObjectDelete ( 0 , "Finalize" );
   }
   else
       ObjectCreate ( 0 , "Finalize" , OBJ_BUTTON , 0 , 0 , 0 ); // создадим кнопку "Finalize"
//--- настроим кнопку "Finalize"
   ObjectSetInteger ( 0 , "Finalize" , OBJPROP_CORNER , CORNER_LEFT_LOWER );
   ObjectSetInteger ( 0 , "Finalize" , OBJPROP_XDISTANCE , 100 );
   ObjectSetInteger ( 0 , "Finalize" , OBJPROP_YDISTANCE , 50 );
   ObjectSetInteger ( 0 , "Finalize" , OBJPROP_XSIZE , 150 );
   ObjectSetInteger ( 0 , "Finalize" , OBJPROP_YSIZE , 30 );
   ObjectSetString ( 0 , "Finalize" , OBJPROP_TEXT , "Finalize" );
   ObjectSetInteger ( 0 , "Finalize" , OBJPROP_COLOR , clrBlue );
//--- принудительно обновим график, чтобы кнопки отрисовались немедленно
   ChartRedraw ();
}

bool ClosePosition( bool async = true )
{
   int numPos = PositionsTotal ();
   PrintFormat ( "Positions number: %d" , numPos );
   
   if ( PositionSelect ( _Symbol ) )
       Print ( "PositionSelect returned true" );
   else
       Print ( "PositionSelect returned false" );
      
   if ( numPos == 0 )
       return true ;
       
   double volume = PositionGetDouble ( POSITION_VOLUME );
   uint posType = PositionGetInteger ( POSITION_TYPE );

   MqlTradeRequest req={ 0 };
   req.action      = TRADE_ACTION_DEAL ;
   req.symbol      = _Symbol ;
   req.magic       = MagicNumber;
   req.volume      = volume;
   switch ( posType )
   {
   case POSITION_TYPE_BUY :
      req.type = ORDER_TYPE_SELL ;
      req.price = SymbolInfoDouble ( req.symbol, SYMBOL_BID );
       break ;
   case POSITION_TYPE_SELL :
      req.type = ORDER_TYPE_BUY ;
      req.price = SymbolInfoDouble ( req.symbol, SYMBOL_ASK );
       break ;
   default :
       Print ( "Wrong position type" );
       return true ;
   }
   req.deviation   = 3 ;
   req.comment     = "Closing opened position" ;
   MqlTradeResult   res={ 0 };
   if ( ! OrderSend ( req, res ) )
   {
       Print ( __FUNCTION__ , ": ошибка " , GetLastError (), ", retcode = " ,res.retcode);
       return false ;
   }
   return true ;
}
 
surava :

Vladimir, 신속한 응답에 감사드립니다!

다음은 터미널 정보입니다.


다음은 코드입니다( 거래 기능 이 어떻게 작동하는지 배우기 시작했습니다):

Offhand - 동안 제거합니다.
 
Karputov Vladimir :
Offhand - 동안 제거합니다.
제거하는 데 비용이 들지 않지만 분명히 문제가 다른 곳에 있다는 것은 중요하지 않습니다. 그래서 저 같은 경우는 적시에 청산되지 않은 포지션 문제가 손실보다 끝없는 순환을 일으키게 되어 당장 눈에 띄지 않을 수 있습니다)
 

문제가 무엇인지 이해했습니다. 이 논리를 설명해주세요. 왜 라인의 존재/부재가 버튼 핸들러에 영향을 미치는지 설명해주세요

 input bool DescriptionModeFull= true ;

???

 

이 라인뿐만이 아닌 것 같습니다. 비뚤어진 메타 트레이더가 정상적으로 작동하려면 탬버린과 함께 계속 춤을 추어야합니다 ...

저것들. 내 예에서는 모든 것이 잘 작동했지만 실제 프로그램에서는 - 아니요((

 
surava :

저것들. 내 예에서는 모든 것이 잘 작동했지만 실제 프로그램에서는 - 아니요((

곡률이 다른 곳에 있는 것은 아닐까? 이 접근 방식으로는 멀리 가지 못할 것입니다.

 
surava :

이 라인뿐만이 아닌 것 같습니다. 비뚤어진 메타 트레이더가 정상적으로 작동하려면 탬버린과 함께 계속 춤을 추어야합니다 ...

저것들. 내 예에서는 모든 것이 잘 작동했지만 실제 프로그램에서는 - 아니요((

어쩌면 탬버린이 너무 작습니까?