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

 
pivomoe :
Sadece uygun olup olmadığını anlayamıyorum..

Burada anlaşılması zor olan birçok şey var. Özellikle işlem sırası ile uğraşırken bazı durumlarda saçmalıklar olduğunu gördüm.
Örneğin, bir pozisyon açarken, önce resmi olarak bir piyasa emri açılır ve daha sonra bir pozisyona dönüşür. Ancak bu makineli tüfek serisi işlemler sırasında, pozisyonun zaten açık olduğu ancak emrin henüz kapatılmadığı bir durum söz konusudur. Bunların aynı olay olduğu, ancak işlemlerin parça bazında düzenlendiği, sırayla verildiği ve bu yaklaşımla bir piyasa emrinin pozisyona dönüşümünü doğru bir şekilde yansıtmak prensipte imkansızdır.

Benim düşünceme göre, ticaret kontrolünüzü organize etmek en iyisidir: ticaret emirlerinizi hatırlayın ve emirlerin ve pozisyonların kompozisyonunu basitçe onların varlığına göre kontrol edin. listeler.
 

Kuşlardan bahsetmişken.

Bu sıfır maliyetli işlemlerde piyasa emirlerinin verildiğini biliyor muydunuz?
Burada bir kişi örneğin 1.2000, Sl= 1.1000, Tr=1.3000 fiyatından bir Buy pozisyonu açmak istiyor.
Bu işlemi gerçekleştirirken, görünen ilk şey, aşağıdaki verilerle birlikte bir piyasa emrini yansıtan bir işlemdir:
Sl= 1.1000, Тр=1.3000, yani. verilen sayılarla ve Fiyat = 0 (sıfıra eşittir). Sıfır fiyatla böyle bir piyasa emri :) Ve ne istersen onu düşün.

 
pivomoe :

Rahatlık için. MqlTradeTransaction öğesinden küçük bir işlev çağrılır. İçinde, sınıfın elemanları numaralandırılarak, istenilen eleman bulunur. Ve zaten bu öğe için, yararlı bir şey yapan sınıf işlevlerinden biri çağrılır.


Lütfen tam olarak ne almak istediğinizi daha ayrıntılı olarak açıklayın. Neden OnTradeTransaction'dan bir şey arıyorsunuz?

Önce sadece kelimeler, sonra doğru yönde düzelteceğiz.

 
User_mt5 :
Uzun (zaman içinde) bir algoritma uygulayan özel Abc() işlevi yürütülür.
Bu işlevin yürütülmesi sırasında, örneğin - Ticaret, Zamanlayıcı, vb. olaylar gerçekleşir.
Abc() işlevinin yürütülmesini tamamlamadan bu olayların gerçekleştiğini öğrenmek mümkün müdür?

Numara. Bir fonksiyon sayarken, diğer her şey atlanır.

Bu, Sleep() işlevine benzer - yani, işleviniz çok uzun süre sayarken davranışı Sleep'e benzer - diğer tüm olaylar atlanır.

 
User_mt5 :

...


OnTradeTransaction'da kesinlikle her şey şeffaftır.

Birincisi: MqlTradeTransaction yapısı, ticari işlem türüne ( ENUM_TRADE_TRANSACTION_TYPE ) bağlı olarak farklı şekilde doldurulur.

buradan okuyun: Ticari İşlem Yapısı (MqlTradeTransaction))

İkincisi: sonuçları görselleştirmek için OrderSendAsync örneğinden bu kod bloğunu çıkarabilirsiniz.

 //+------------------------------------------------------------------+ 
//| TradeTransaction function                                        | 
//+------------------------------------------------------------------+ 
void OnTradeTransaction ( const MqlTradeTransaction &trans, 
                         const MqlTradeRequest &request, 
                         const MqlTradeResult &result) 
  { 
//--- получим тип транзакции в виде значения перечисления  
   ENUM_TRADE_TRANSACTION_TYPE type=( ENUM_TRADE_TRANSACTION_TYPE )trans.type; 
//--- если транзакция является результатом обработки запроса, выведем только её название 
   if (type== TRADE_TRANSACTION_REQUEST ) 
     { 
       Print ( EnumToString (type)); 
       //--- выведем строковое описание обработанного запроса 
       Print ( "------------RequestDescription\r\n" ,RequestDescription(request)); 
       //--- выведем описание результата запроса 
       Print ( "------------ResultDescription\r\n" ,TradeResultDescription(result)); 
       //--- запомним тикет ордера для его удаления на следующей обработке в OnTick() 
       if (result.order!= 0 ) 
        { 
         //--- удалим этот ордер по его тикету при следующем вызове OnTick() 
         order_ticket=result.order; 
         Print ( " Тикет отложенного ордера " ,order_ticket, "\r\n" ); 
        } 
     } 
   else // для транзакций другого типа выведем полное описание 
//--- выведем описание полученной транзакции в Журнал 
       Print ( "------------TransactionDescription\r\n" ,TransactionDescription(trans));
 
//---      
  } 
//+------------------------------------------------------------------+ 
//| Возвращает текстовое описание транзакции                         | 
//+------------------------------------------------------------------+ 
string TransactionDescription( const MqlTradeTransaction &trans) 
  { 
//---  
   string desc= EnumToString (trans.type)+ "\r\n" ; 
   desc+= "Symbol: " +trans.symbol+ "\r\n" ; 
   desc+= "Deal ticket: " +( string )trans.deal+ "\r\n" ; 
   desc+= "Deal type: " + EnumToString (trans.deal_type)+ "\r\n" ; 
   desc+= "Order ticket: " +( string )trans.order+ "\r\n" ; 
   desc+= "Order type: " + EnumToString (trans.order_type)+ "\r\n" ; 
   desc+= "Order state: " + EnumToString (trans.order_state)+ "\r\n" ; 
   desc+= "Order time type: " + EnumToString (trans.time_type)+ "\r\n" ; 
   desc+= "Order expiration: " + TimeToString (trans.time_expiration)+ "\r\n" ; 
   desc+= "Price: " + StringFormat ( "%G" ,trans.price)+ "\r\n" ; 
   desc+= "Price trigger: " + StringFormat ( "%G" ,trans.price_trigger)+ "\r\n" ; 
   desc+= "Stop Loss: " + StringFormat ( "%G" ,trans.price_sl)+ "\r\n" ; 
   desc+= "Take Profit: " + StringFormat ( "%G" ,trans.price_tp)+ "\r\n" ; 
   desc+= "Volume: " + StringFormat ( "%G" ,trans.volume)+ "\r\n" ; 
   desc+= "Position: " +( string )trans.position+ "\r\n" ; 
   desc+= "Position by: " +( string )trans.position_by+ "\r\n" ; 
//--- вернем полученную строку 
   return desc; 
  } 
//+------------------------------------------------------------------+ 
//| Возвращает текстовое описание торгового запроса                  | 
//+------------------------------------------------------------------+ 
string RequestDescription( const MqlTradeRequest &request) 
  { 
//--- 
   string desc= EnumToString (request.action)+ "\r\n" ; 
   desc+= "Symbol: " +request.symbol+ "\r\n" ; 
   desc+= "Magic Number: " + StringFormat ( "%d" ,request.magic)+ "\r\n" ; 
   desc+= "Order ticket: " +( string )request.order+ "\r\n" ; 
   desc+= "Order type: " + EnumToString (request.type)+ "\r\n" ; 
   desc+= "Order filling: " + EnumToString (request.type_filling)+ "\r\n" ; 
   desc+= "Order time type: " + EnumToString (request.type_time)+ "\r\n" ; 
   desc+= "Order expiration: " + TimeToString (request.expiration)+ "\r\n" ; 
   desc+= "Price: " + StringFormat ( "%G" ,request.price)+ "\r\n" ; 
   desc+= "Deviation points: " + StringFormat ( "%G" ,request.deviation)+ "\r\n" ; 
   desc+= "Stop Loss: " + StringFormat ( "%G" ,request.sl)+ "\r\n" ; 
   desc+= "Take Profit: " + StringFormat ( "%G" ,request.tp)+ "\r\n" ; 
   desc+= "Stop Limit: " + StringFormat ( "%G" ,request.stoplimit)+ "\r\n" ; 
   desc+= "Volume: " + StringFormat ( "%G" ,request.volume)+ "\r\n" ; 
   desc+= "Comment: " +request.comment+ "\r\n" ; 
//--- вернем полученную строку 
   return desc; 
  } 
//+------------------------------------------------------------------+ 
//| Возвращает текстовое описание результата обработки запроса       | 
//+------------------------------------------------------------------+ 
string TradeResultDescription( const MqlTradeResult &result) 
  { 
//--- 
   string desc= "Retcode " +( string )result.retcode+ "\r\n" ; 
   desc+= "Request ID: " + StringFormat ( "%d" ,result.request_id)+ "\r\n" ; 
   desc+= "Order ticket: " +( string )result.order+ "\r\n" ; 
   desc+= "Deal ticket: " +( string )result.deal+ "\r\n" ; 
   desc+= "Volume: " + StringFormat ( "%G" ,result.volume)+ "\r\n" ; 
   desc+= "Price: " + StringFormat ( "%G" ,result.price)+ "\r\n" ; 
   desc+= "Ask: " + StringFormat ( "%G" ,result.ask)+ "\r\n" ; 
   desc+= "Bid: " + StringFormat ( "%G" ,result.bid)+ "\r\n" ; 
   desc+= "Comment: " +result.comment+ "\r\n" ; 
//--- вернем полученную строку 
   return desc; 
  }

ve çizelgeye eklenecek olan danışmana ekleyin. Ardından pozisyonları manuel olarak açıp kapatabilir ve "Uzmanlar" sekmesinde sonuçların çıktılarına bakabilirsiniz.

 
Vladimir Karputov :

Numara. Bir fonksiyon sayarken, diğer her şey atlanır.

Bu, Sleep() işlevine benzer - yani, işleviniz çok uzun süre sayarken davranışı Sleep'e benzer - diğer tüm olaylar atlanır.

Teşekkür ederim. Talihsiz.
Ve o zaman PC'nin kaynağı nasıl etkin bir şekilde kullanılır? Tekrar döngülü kod ve parametrelerin periyodik olarak yoklanması?

 
Vladimir Karputov :

OnTradeTransaction'da kesinlikle her şey şeffaftır.

Cevap için teşekkürler, temelde yaptığım şey buydu. Şimdiye kadar, anlamaktan daha fazla soru.

 
Vladimir Karputov :

Lütfen tam olarak ne almak istediğinizi daha ayrıntılı olarak açıklayın. Neden OnTradeTransaction'dan bir şey arıyorsunuz?

İlk başta sadece kelimeler, sonra doğru yönde düzelteceğiz.

Sorunun OnTradeTransaction'da olmadığını anladım. Bakın nasıl bir korku yaşıyorum:

İşte kod.

 CPositionInfo PositionInfoKotiryemii,PositionInfoVedygii;
 
 if ( !PositionInfoKotiryemii.Select( "SBRF-3.18" ) ) Print ( "Не удалось выбрать позицию по символ SBRF-3.18 " );
 if ( !PositionInfoVedygii.Select( "SBRF-12.17" )   ) Print ( "Не удалось выбрать позицию по символ SBRF-12.17 " );

 Print (PositionInfoKotiryemii. Symbol (), " Объем " ,PositionInfoKotiryemii. Volume (), " " ,PositionInfoVedygii. Symbol (), " Объем " ,PositionInfoVedygii. Volume ());

Ve işte yürütmenin sonucu

2017.09.22 10:30:12 SBRF-12.17 sembolüne göre konum seçilemedi
2017.09.22 10:30:12 Hacim 0.0 Hacim 0.0

2. ve 3. satırları değiştiriyorum. yani kod şimdi böyle

CPositionInfo PositionInfoKotiryemii,PositionInfoVedygii;
 
 if ( !PositionInfoVedygii.Select( "SBRF-12.17" )   ) Print ( "Не удалось выбрать позицию по символ SBRF-12.17 " );
 if ( !PositionInfoKotiryemii.Select( "SBRF-3.18" ) ) Print ( "Не удалось выбрать позицию по символ SBRF-3.18 " );
 
 Print (PositionInfoKotiryemii. Symbol (), " Объем " ,PositionInfoKotiryemii. Volume (), " " ,PositionInfoVedygii. Symbol (), " Объем " ,PositionInfoVedygii. Volume ());

Bu sonucu alıyorum.

2017.09.22 10:30:12 SBRF-12.17 sembolüne göre konum seçilemedi
2017.09.22 10:30:12 SBRF-3.18 Cilt 1.0 SBRF-3.18 Cilt 1.0

Her iki durumda da derleyici herhangi bir uyarı vermez . 80 satır ve test ayarları için uzman kodunu ekledim. Komisyoncu BCS. Sürüm 1730.

Ошибки - Инструменты - Пользовательский интерфейс - Справка по MetaEditor
Ошибки - Инструменты - Пользовательский интерфейс - Справка по MetaEditor
  • www.metatrader5.com
На данной вкладке отображается журнал компиляции программ, содержащий сообщения об использованных при компиляции файлах, а также ошибки и предупреждения, возникшие в этом процессе. — описание события. Иконки, расположенные слева от описания свидетельствуют о типе события. означает ошибку, — предупреждение, а — информационное сообщение; Если...
Dosyalar:
temp.mq5  7 kb
1.png  11 kb
 
pivomoe :

Sorunun OnTradeTransaction'da olmadığını anladım. Bakın nasıl bir dehşet yaşıyorum:

İşte kod.

Ve işte yürütmenin sonucu

2017.09.22 10:30:12 SBRF-12.17 sembolüne göre konum seçilemedi
2017.09.22 10:30:12 Hacim 0.0 Hacim 0.0

2. ve 3. satırları değiştiriyorum. yani kod şimdi böyle

Bu sonucu alıyorum.

2017.09.22 10:30:12 SBRF-12.17 sembolüne göre konum seçilemedi
2017.09.22 10:30:12 SBRF-3.18 Cilt 1.0 SBRF-3.18 Cilt 1.0

Her iki durumda da derleyici herhangi bir uyarı vermez . 80 satır ve test ayarları için uzman kodunu ekledim. Komisyoncu BCS. Sürüm 1730.

Hafta sonu cevap vereceğim. Afedersiniz.

 

Hata, 1 satırda ( Print ) 1'den fazla pozisyon hakkında bilgi almaya çalışıyorsunuz gibi görünüyor.

Herhangi bir zamanda, yalnızca 1 ( seçili ) konum hakkında bilgi mevcuttur :

- ikinci durumda, her şey doğrudur, çünkü son Seçim, kontrol etmediğiniz true değerini döndürür.

- ve ilk durumda : son Seçim, sizin de kontrol etmediğiniz false değerini döndürür ve sonuç tahmin edilemez.

..... açıkçası Select==false önceki Select==true'nun bilgilerini sıfırlar