GLUCK?! Fare tıklama olaylarını işleme!!! - sayfa 13

 
sergeev :


acele et! Şu anda!! Bu eşsiz ürünü indirin!

Ve özel olarak tasarlanmış bir hataya sahip bir sürüm alacaksınız - küçük bir satır bulanıklığı!


:))


bu sorun için bir çözümünüz var mı? Her şeyi karıştırdım - henüz başka bir şey düşünemiyorum ve bu bir hata değil, satırlardaki değişiklik bilinçli, ama parlıyor - sorunu daha önce yazmıştım.

Hatta bunun bir bulanıklık değil, X ekseni boyunca bir çizgi kayması olduğunu söyleyebilirim.

 

Sevgili tüccarlar!

Örneği , OrderSendAsync işlevinin açıklamasındaki .chm kılavuzundan basit bir tıklanabilir düğmeyle kopyaladım, benim durumumda şöyle görünüyor:

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();
}

Görünüşe göre, zaman çerçevesi değiştiğinde çalışır. Lütfen bana bu sorunu nasıl çözeceğimi söyler misiniz?

 
surava :

Sevgili tüccarlar!

Örneği , OrderSendAsync işlevinin açıklamasındaki .chm kılavuzundan basit bir tıklanabilir düğmeyle kopyaladım, benim durumumda şöyle görünüyor:

Görünüşe göre, zaman çerçevesi değiştiğinde çalışır. Lütfen bana bu sorunu nasıl çözeceğimi söyler misiniz?

OrderSendAsync için standart örnek, grafik periyodunun değiştirilmesine hiçbir şekilde tepki vermez. Bir şey yaptın demektir. Daha fazla bilgi gereklidir: terminal tipi, terminal yapısı ve tüm kodunuz.
 
Karputov Vladimir :
OrderSendAsync için standart örnek, grafik periyodunun değiştirilmesine hiçbir şekilde tepki vermez. Bir şey yaptın demektir. Daha fazla bilgiye ihtiyacınız var: terminal tipi, terminal yapısı ve tüm kodunuz.

Vladimir, hızlı yanıt için teşekkürler!

İşte terminal bilgileri:


İşte kod ( ticaret fonksiyonlarının nasıl çalıştığını öğrenmeye başladım):

 #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, hızlı yanıt için teşekkürler!

İşte terminal bilgileri:


İşte kod ( ticaret fonksiyonlarının nasıl çalıştığını öğrenmeye başladım):

Hazırlıksız - süre kaldırın.
 
Karputov Vladimir :
Hazırlıksız - süre kaldırın.
Kaldırmanın hiçbir maliyeti yoktur, ancak sorunun başka bir yerde olması önemli değildir. Ve bu yüzden, bana gelince, zamanında kapanmayan bir pozisyonla ilgili sorunun, hemen fark edilmeyebilecek bir kayıptan ziyade sonsuz bir döngü ile sonuçlanması daha iyidir)
 

Sorunun ne olduğu anlaşıldı. Sadece bu mantığı açıklayın, lütfen, bir satırın varlığının/yokluğunun düğme işleyicisini neden etkilediğini açıklayın.

 input bool DescriptionModeFull= true ;

???

 

Görünüşe göre sadece bu satır değil. Eğri metatrader'ın normal şekilde çalışmasını sağlamak için bir tef ile dans etmeye devam etmemiz gerekecek...

Onlar. Örneğimde, her şey yolunda gitti, ancak gerçek bir programda - hayır ((

 
surava :

Onlar. Örneğimde, her şey yolunda gitti, ancak gerçek bir programda - hayır ((

Belki eğrilik başka bir yerdedir? Bu yaklaşımla fazla uzağa gidemezsiniz.

 
surava :

Görünüşe göre sadece bu satır değil. Eğri metatrader'ın normal şekilde çalışmasını sağlamak için bir tef ile daha fazla dans etmemiz gerekecek...

Onlar. Örneğimde, her şey yolunda gitti, ancak gerçek bir programda - hayır ((

Belki tef çok küçüktür?