Yeni başlayanlardan sorular MQL5 MT5 MetaTrader 5 - sayfa 1266

 

Herkese iyi eğlenceler!

CTrade sınıfındaki ResultDeal() işlevi hakkında bir sorum var.

Gerçek şu ki , Strateji Test Cihazında bu fonksiyon ticari bileti sorunsuz bir şekilde döndürür ve Expert Advisor'ı Chart'a bıraktığınızda, ResultRetcode() işlevinin her zaman "TRADE_RETCODE_DONE" döndürmesine rağmen, her zaman "sıfır" döndürür.

Kod örneği:

 /////////////////////////////////////////////////////////////////////
#include <Trade\Trade.mqh>
#include <Trade\SymbolInfo.mqh>
/////////////////////////////////////////////////////////////////////
CTrade Trade;
CSymbolInfo SymbolInfo;

uint Retcode;
ulong TicketDeal;
bool first_calc;
bool second_calc;
bool third_calc;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
{
//---
   TicketDeal = 9999999 ;
   
   first_calc = true ;
   second_calc = false ;
   third_calc = false ;   
//---
   return ( INIT_SUCCEEDED );
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
{
//---
   if (first_calc)
   {
      first_calc = false ;
      second_calc = true ;
      
      SymbolInfo.Name( Symbol ());
      SymbolInfo.RefreshRates();
      Trade.Buy( 1.0 , Symbol (), SymbolInfo.Ask(), 0.0 , 0.0 , "BUY" );
//---
      Retcode = Trade.ResultRetcode();
       if (Retcode == TRADE_RETCODE_DONE ) TicketDeal = Trade.ResultDeal();
      
       Print ( "first_calc ////////////////////////////////////" );
       Print ( "PositionsTotal(): " , PositionsTotal ());
       Print ( "Retcode: " , Retcode, "; TicketDeal: " , TicketDeal);
   }
   else
   {
       if (second_calc)
      {
         second_calc = false ;
         third_calc = true ;
//---
         Retcode = Trade.ResultRetcode();
         if (Retcode == TRADE_RETCODE_DONE ) TicketDeal = Trade.ResultDeal();
         
         Print ( "second_calc ////////////////////////////////////" );
         Print ( "PositionsTotal(): " , PositionsTotal ());
         Print ( "Retcode: " , Retcode, "; TicketDeal: " , TicketDeal);
      }
       else
      {
         if (third_calc)
         {
            third_calc = false ;
//---
            Retcode = Trade.ResultRetcode();
             if (Retcode == TRADE_RETCODE_DONE ) TicketDeal = Trade.ResultDeal();
            
             Print ( "third_calc ////////////////////////////////////" );
             Print ( "PositionsTotal(): " , PositionsTotal ());
             Print ( "Retcode: " , Retcode, "; TicketDeal: " , TicketDeal);
         }
         else
         {
             //Print("TicketDeal: ", Trade.ResultDeal());
         }
      }
   }   
}
//+------------------------------------------------------------------+

Test Cihazında yürütme günlüğü:

 2020.11 . 25 18 : 08 : 54.225 Core 1    2020.11 . 23 00 : 05 : 00    first_calc ////////////////////////////////////
2020.11 . 25 18 : 08 : 54.225 Core 1    2020.11 . 23 00 : 05 : 00    PositionsTotal (): 1
2020.11 . 25 18 : 08 : 54.225 Core 1    2020.11 . 23 00 : 05 : 00    Retcode: 10009 ; TicketDeal: 2
2020.11 . 25 18 : 08 : 54.225 Core 1    2020.11 . 23 00 : 05 : 02    second_calc ////////////////////////////////////
2020.11 . 25 18 : 08 : 54.225 Core 1    2020.11 . 23 00 : 05 : 02    PositionsTotal (): 1
2020.11 . 25 18 : 08 : 54.225 Core 1    2020.11 . 23 00 : 05 : 02    Retcode: 10009 ; TicketDeal: 2
2020.11 . 25 18 : 08 : 54.225 Core 1    2020.11 . 23 00 : 05 : 05    third_calc ////////////////////////////////////
2020.11 . 25 18 : 08 : 54.225 Core 1    2020.11 . 23 00 : 05 : 05    PositionsTotal (): 1
2020.11 . 25 18 : 08 : 54.225 Core 1    2020.11 . 23 00 : 05 : 05    Retcode: 10009 ; TicketDeal: 2

Grafikte yürütme günlüğü:

 2020.11 . 25 18 : 08 : 13.991 _TestSelect (EURUSD,M1) first_calc ////////////////////////////////////
2020.11 . 25 18 : 08 : 13.991 _TestSelect (EURUSD,M1) PositionsTotal (): 0
2020.11 . 25 18 : 08 : 13.991 _TestSelect (EURUSD,M1) Retcode: 10009 ; TicketDeal: 0
2020.11 . 25 18 : 08 : 14.026 _TestSelect (EURUSD,M1) second_calc ////////////////////////////////////
2020.11 . 25 18 : 08 : 14.027 _TestSelect (EURUSD,M1) PositionsTotal (): 1
2020.11 . 25 18 : 08 : 14.027 _TestSelect (EURUSD,M1) Retcode: 10009 ; TicketDeal: 0
2020.11 . 25 18 : 08 : 14.260 _TestSelect (EURUSD,M1) third_calc ////////////////////////////////////
2020.11 . 25 18 : 08 : 14.260 _TestSelect (EURUSD,M1) PositionsTotal (): 1
2020.11 . 25 18 : 08 : 14.260 _TestSelect (EURUSD,M1) Retcode: 10009 ; TicketDeal: 0


Neyi yanlış yapıyorum? Gerçek zamanlı fırsat bileti nasıl alınır?

Ve ikinci soru (daha az önemli) neden Chart üzerinde bir anlaşma yaptıktan hemen sonra PositionsTotal() işlevi "sıfır" döndürüyor? Ve bir sonraki kenenin ortaya çıkmasıyla birlikte güvenilir veriler gösterir. Bu bilgi hemen elde edilebilir mi?


Dosyalar:
 
ZAKST :

Herkese iyi eğlenceler!

CTrade sınıfındaki ResultDeal() işlevi hakkında bir sorum var.

Gerçek şu ki , Strateji Test Cihazında bu fonksiyon ticari bileti sorunsuz bir şekilde döndürür ve Expert Advisor'ı Chart'a bıraktığınızda, ResultRetcode() işlevinin her zaman "TRADE_RETCODE_DONE" döndürmesine rağmen, her zaman "sıfır" döndürür.

Kod örneği:

Test Cihazında yürütme günlüğü:

Grafikte yürütme günlüğü:


Neyi yanlış yapıyorum? Gerçek zamanlı fırsat bileti nasıl alınır?

Ve ikinci soru (daha az önemli) neden Chart üzerinde bir anlaşma yaptıktan hemen sonra PositionsTotal() işlevi "sıfır" döndürüyor? Ve bir sonraki onay işaretinin ortaya çıkmasıyla birlikte güvenilir veriler gösterir. Bu bilgi hemen elde edilebilir mi?


Hmm.. Bekleyen emirleri kullanmamış olmama rağmen, birdenbire ihtiyacım olan gerçek zamanlı veriler aynı CTrade sınıfının ResultOrder () işlevi tarafından döndürülüyor...

Aynı soru: Neyi yanlış yapıyorum?

 

Böyle bir makro var.

 #define Warning if (ComentWarnig)LogWarnig.Write( __FILE__ ":" + IntegerToString ( __LINE__ , 4 , '0' )+ " " ,

Ben böyle kullanıyorum.

Warning "Warnig  сработал. " );

Soru: Bir makronun bu şekilde kullanılabilmesi için tanımında nelerin düzeltilmesi gerekiyor?

Warning( "Warnig  сработал. " );

yani, Uyarı ve "Warnig çalıştı" arasında bir parantez ile. Makro tanımında bir parantez kullanmaya çalıştım

 #define Warning( if (ComentWarnig)LogWarnig.Write( __FILE__ ":" + IntegerToString ( __LINE__ , 4 , '0' )+ " " ,

ancak derleyici paranteze izin vermez.

 
ZAKST :

Hmm.. Bekleyen emirleri kullanmamış olmama rağmen, birdenbire ihtiyacım olan gerçek zamanlı veriler aynı CTrade sınıfının ResultOrder () işlevi tarafından döndürülüyor...

Aynı soru: Neyi yanlış yapıyorum?

Sadece MT5 sipariş sistemi, sipariş-işlem-pozisyonu hakkında bilgi edinin.

ResultOrder - açılış emri. Konum, bu siparişin biletine eşit POSITION_IDENTIFIER ile olacaktır.

Tüm işlemler geçmişte konum kimliğine göre bulunabilir. Konum bileti ile karıştırılmaması için değişebilir, ancak tanımlayıcı sabittir.

ps Test cihazı, bir siparişin gecikmeden yerine getirilmesi ve hemen bir anlaşmanın doğması bakımından farklıdır. Gerçek hayatta zaman geçer ve siparişin başarılı bir şekilde oluşturulduğu sırada henüz bir anlaşma yoktur, OnTrade olaylarına yakalanması gerekir.
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства позиций
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства позиций
  • www.mql5.com
Тикет позиции. Уникальное число, которое присваивается каждой вновь открытой позиции. Как правило, соответствует тикету ордера, в результате которого она была открыта, за исключением случаев изменения тикета в результате служебных операций на сервере. Например, начисления свопов переоткрытием позиции. Для нахождения ордера, которым была открыта...
 
pivomoe :

Böyle bir makro var.

Ben böyle kullanıyorum.

Soru: Bir makronun bu şekilde kullanılabilmesi için tanımında nelerin düzeltilmesi gerekiyor?

yani, Uyarı ve "Warnig çalıştı" arasında bir parantez ile. Makro tanımında bir parantez kullanmaya çalıştım

ancak derleyici parantez kullanımına izin vermez.

parametrik olmayan bir form kaydetmiş olmanıza rağmen parametrik bir form kullanmak istiyorsunuz. böyle bir şeye ihtiyacın var

 #define Warning(CUSTOM) ( if (ComentWarnig)LogWarnig.Write( __FILE__ ":" + IntegerToString ( __LINE__ , 4 , '0' )+ "",string(CUSTOM)))


Warning( "Warnig  сработал. " );
 

iyi anlatamadım Önce gidelim. Şu anda böyle bir makro kullanıyorum:

Warning, "Warnig  сработал. i=" ,i);

İşte makronun kendisi:

 #define Warning if (LogWarnig)MoiLoggerWarnig.Write( __FILE__ ":" + IntegerToString ( __LINE__ , 4 , '0' )

"Uyarı" ve ");" arasındaki makro görüşmede İsteğe bağlı türlerin rastgele sayıda parametresi. Tüm bunlar, Yazma işlevini tekrar tekrar yükleyerek elde edilir.

Soru. Bu şekilde çağrılabilmesi için makroda düzeltilmesi gerekenler:

Warning( "Warnig  сработал. i=" ,i);
 
pivomoe :

iyi anlatamadım Önce gidelim. Şu anda böyle bir makro kullanıyorum:

İşte makronun kendisi:

"Uyarı" ve ");" arasındaki makro görüşmede İsteğe bağlı türlerin rastgele sayıda parametresi. Tüm bunlar, Yazma işlevini tekrar tekrar yükleyerek elde edilir.

Soru. Bu şekilde çağrılabilmesi için makroda düzeltilmesi gerekenler:

Cevap: ayrıca makroyu tekrar tekrar yükleyin)

Ancak dizelerde + operatörünü kullanmak ve her şeyi dizelere dönüştürmek daha iyidir, o zaman bir dizi parametreye sahip bir işlev (ve makro) sürümüne ihtiyacınız olmaz

 
Aleksey Mavrin :

Sadece MT5 sipariş sistemini, sipariş-ticaret-pozisyonunu anlayın.

ResultOrder - açılış emri. Konum, bu siparişin biletine eşit POSITION_IDENTIFIER ile olacaktır.

Tüm işlemler geçmişte konum kimliğine göre bulunabilir. Konum bileti ile karıştırılmaması için değişebilir, ancak tanımlayıcı sabittir.

ps Test cihazı, bir siparişin gecikmeden yerine getirilmesi ve hemen bir anlaşmanın doğması bakımından farklıdır. Gerçek hayatta zaman geçer ve siparişin başarılı bir şekilde oluşturulduğu sırada henüz bir anlaşma yoktur, OnTrade olaylarına yakalanması gerekir.
Cevap için teşekkürler. ben hallederim))
 
Merhaba! EA'dan gösterge özelliklerine nasıl erişilir. Örneğin, gösterge tutamağını bilerek Expert Advisor'dan çizginin rengini değiştirmek istiyorum. Yardım aradım, bir şey bulamadım, belki kötü bakıyorum?
 
Tango_X :
Merhaba! Bir EA'dan gösterge özelliklerine nasıl erişilir. Örneğin, gösterge tutamağını bilerek Expert Advisor'dan çizginin rengini değiştirmek istiyorum. Yardım aradım, bir şey bulamadım, belki kötü bakıyorum?

Bunun göstergesi bir renk giriş parametresine sahip olmalıdır. Yani, özel bir gösterge olmalıdır.