Sonsuza kadar harika ve korkunç MT4 (veya bir geçiş stratejisinin nasıl doğru bir şekilde geliştirileceği) - sayfa 16

 

çok iyi çıkıyor - (hangi amaçlara bağlı olarak!?)

 #include <Trade\Trade.mqh>
CTrade Trade;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
  {
//---
   int total= PositionsTotal ();
   int Ordertotal= OrdersTotal ();
   while (! IsStopped () && (total <= 1 ))   // Закончим, когда появится более одной позиции.
       if (total == 1 )
         Trade.PositionClose( PositionGetTicket ( 0 )); // Если есть позиция - закрываем.
       else
         if (Ordertotal!= 0 )
            Trade.Buy( 0.01 ); // Если нет позиции и ордера - открываем позицию.
  }
//+------------------------------------------------------------------+
 
SanAlex :

çok iyi çıkıyor - (hangi amaçlara bağlı olarak!?)

buluşmayın. MT hatalarını yakalamak için her türlü entrikayı oluşturan özel bir DC'leri var.

 
Alexey Viktorov :

MT hatalarını yakalamak için her türlü entrikayı oluşturan özel bir DC.

Çoğu broker aynı şekilde çalışır: Result.deal == 0.

Örneğin, Signals, scalping için en popüler komisyoncudur.

Tanınmış brokerler arasında MT5'in nerede farklı bir şekilde çalıştığını bulmak oldukça zordur.

 
SanAlex :

çok iyi çıkıyor - (hangi amaçlara bağlı olarak!?)


"İyi" tam olarak nedir?
Kodda, yukarıda belirtilmiş olan bir hatanız var.
 
fxsaber :

Çoğu broker aynı şekilde çalışır: Result.deal == 0.

Örneğin, Signals, scalping için en popüler komisyoncudur.

Tanınmış brokerler arasında MT5'in nerede farklı bir şekilde çalıştığını bulmak oldukça zordur.

Eh, ne tür bir kafa derisinin işe yarayacağını bilmiyorum, bu yüzden pozisyonu kapatmak için zamanım yok ...

Sakıncası yoksa, yine de pozisyon sayısı için bir kontrol eklemeyi deneyin.

     else if (! PositionsTotal () && ! OrdersTotal ())

Bence iki pozisyon açık ve kapalı. Bu iki pozisyonun türlerini elde etmeye çalışmaktan zarar gelmez. Zıt yönlerdelerse, bu şüphelerimi doğrulayacaktır ...

 
Ihor Herasko :

Yapılmış:

Sonuç:

Peki, bu siparişin durumunu al, eğer bilet biliniyorsa.

Anlaşma başarısız oldu, kullanım fiyatı 0.

Ticaret talebi sonuç yapısı (MqlTradeResult)

İşlem sistemine bir emir vermek için bir işlem talebine yanıt olarak, işlem sunucusu, önceden tanımlanmış özel bir MqlTradeResult yapısı biçiminde bir işlem talebinin işlenmesinin sonucu hakkında bilgi içeren verileri döndürür.

 struct MqlTradeResult
  {
   uint      retcode;           // Код результата операции
   ulong     deal;             // Тикет сделки, если она совершена
   ulong     order;             // Тикет ордера, если он выставлен
   double    volume;           // Объем сделки, подтверждённый брокером
   double    price;             // Цена в сделке, подтверждённая брокером
   double    bid;               // Текущая рыночная цена предложения (цены реквота)
   double    ask;               // Текущая рыночная цена спроса (цены реквота)
   string    comment;           // Комментарий брокера к операции (по умолчанию заполняется расшифровкой кода возврата торгового сервера)
   uint      request_id;       // Идентификатор запроса, устанавливается терминалом при отправке 
   uint      retcode_external; // Код ответа внешней торговой системы
  };

 
Rashid Umarov :

Peki, bu siparişin durumunu al, eğer bilet biliniyorsa.

Anlaşma başarısız oldu, kullanım fiyatı 0.

Sadece mesele buydu, geçti. Komut dosyası yürütmesinin sona ermesinden sonra, bir veya iki konum asılı kalır (koda kaç baskı ekleneceğine bağlı olarak).

kod:

 #define PRINT(A) Print ( #A + " = " + ( string )(A))

#include <Trade\Trade.mqh>

void OnStart ()
{
  CTrade Trade;
  
   while (! IsStopped () && ( PositionsTotal () <= 1 )) // Закончим, когда появится более одной позиции.
     if ( PositionsTotal () == 1 )
    {
      Trade.PositionClose( PositionGetTicket ( 0 )); // Если есть позиция - закрываем.
       Print ( "Закрытие, т. к. PositionsTotal() равно 1" );
    }
     else if (! OrdersTotal ())
    {
       printf ( "Перед открытием. PositionsTotal: %d, OrdersTotal: %d" , PositionsTotal (), OrdersTotal ());
      Trade.Buy( 0.01 ); // Если нет позиции и ордера - открываем позицию.
      PRINT(Trade.ResultRetcodeDescription());
      PRINT(Trade.ResultDeal());
      PRINT(Trade.ResultOrder());
      PRINT(Trade.ResultComment());
       if ( OrderSelect (Trade.ResultOrder()))
         PRINT( OrderGetInteger ( ORDER_STATE ));
       printf ( "После открытия. PositionsTotal: %d, OrdersTotal: %d" , PositionsTotal (), OrdersTotal ());
    }
    
   Print ( "Выход. PostionsTotal: " , PositionsTotal ());
}

Sonuç:

 2021.05 . 05 14 : 25 : 14.738 Test (EURUSD,M1)        Перед открытием. PositionsTotal : 0 , OrdersTotal : 0
2021.05 . 05 14 : 25 : 14.821 Test (EURUSD,M1)        Trade.ResultRetcodeDescription() = done at 0.00000
2021.05 . 05 14 : 25 : 14.821 Test (EURUSD,M1)        Trade.ResultDeal() = 0
2021.05 . 05 14 : 25 : 14.821 Test (EURUSD,M1)        Trade.ResultOrder() = 2249888681
2021.05 . 05 14 : 25 : 14.821 Test (EURUSD,M1)        Trade.ResultComment() = Request executed
2021.05 . 05 14 : 25 : 14.821 Test (EURUSD,M1)         EnumToString ( ENUM_ORDER_STATE ( OrderGetInteger ( ORDER_STATE ))) = ORDER_STATE_PLACED
2021.05 . 05 14 : 25 : 14.821 Test (EURUSD,M1)        После открытия. PositionsTotal : 1 , OrdersTotal : 1
2021.05 . 05 14 : 25 : 14.899 Test (EURUSD,M1)        Закрытие, т. к. PositionsTotal () равно 1
2021.05 . 05 14 : 25 : 14.899 Test (EURUSD,M1)        Выход. PostionsTotal: 2
 
Alexey Viktorov :

Eh, ne tür bir kafa derisinin işe yarayacağını bilmiyorum, bu yüzden pozisyonu kapatmak için zamanım yok ...

Her şey orada çalışıyor. Sadece MT5'in mimari bir özelliği.

Sakıncası yoksa, yine de pozisyon sayısı için bir kontrol eklemeyi deneyin.

Bu kontrol kaynak kodunda mevcuttur.

Bence iki pozisyon açık ve kapalı . Bu iki pozisyonun türlerini elde etmeye çalışmaktan zarar gelmez. Zıt yönlerdelerse, bu şüphelerimi doğrulayacaktır ...

Kapanış pozisyonu yok.

 
fxsaber :

Eller henüz uzanmadı. gün içinde yayınlayacağım.

İşe yaramadı, problemler buldum.

 
fxsaber :

İşe yaramadı, problemler buldum.

Dört gözle beklemek. Herhangi bir yardıma ihtiyacınız olursa lütfen yazın.