OnTicaretİşlem - sayfa 4

 
Andrey Dik :

OnTradeTransaction() olayını daha önce hiç işlemedim, buna gerek yoktu çünkü ticaret mantığının tam olarak neyin işe yaradığını hesaba katmasına gerek yoktu. SL veya TP. Bunun ticaret deneyimimin kanıtı olduğunu düşünüyor musunuz?)))

Çok dikkatli okudum, ancak birinin çalışan bir kod şeklinde anlaşılır bir cevap vereceğini görmüyorum. Yoksa lanet olası bir sır ve büyük bir büyücülük mü - gizli bilgi ve neyin işe yaradığını belirleme yeteneği mi?

Özellikle FOREX için sipariş vermek için danışman yazmıyorum.

Artık anlaşılır kod yazmak için gerekli tüm bilgilere sahipsiniz,

ihtiyaçlarınıza uygun.

 
prostotrader :

Özellikle FOREX için sipariş danışmanı yazmıyorum .

Artık anlaşılır kod yazmak için gerekli tüm bilgilere sahipsiniz,

ihtiyaçlarınıza uygun.

Ve sipariş için yazmanı kim istedi?!

Bugün bu forumda soru sormak siparişe yazmak mı demek?

Evet, hepiniz cehenneme gideceksiniz. Hucker'lar.

 
Andrey Dik :

...

Ve hesap geçmişindeki son işlemin yorumuna bakarsanız, bu size yakışır mı?

Bunun gibi bir şey:

//+------------------------------------------------------------------+
//| Возвращает причину закрытия позиции по Take Profit               |
//+------------------------------------------------------------------+
bool CAccountHistory::IsClosedByTakeProfit( const string symbol)
  {
//--- Получим комментарий последней сделки на указанном символе
   string last_comment=LastDealComment(symbol);
//--- Если в комментарии есть строка "tp"
   if ( StringFind (last_comment, "tp" , 0 )>- 1 )
       return ( true );
//--- Если нет строки "tp"
   return ( false );
  }
//+------------------------------------------------------------------+
//| Возвращает причину закрытия позиции по Stop Loss                 |
//+------------------------------------------------------------------+
bool CAccountHistory::IsClosedByStopLoss( const string symbol)
  {
//--- Получим комментарий последней сделки на указанном символе
   string last_comment=LastDealComment(symbol);
//--- Если в комментарии есть строка "sl"
   if ( StringFind (last_comment, "sl" , 0 )>- 1 )
       return ( true );
//--- Если нет строки "sl"
   return ( false );
  }
//+------------------------------------------------------------------+
//| Возвращает комментарий последней сделки на указанном символе     |
//+------------------------------------------------------------------+
string CAccountHistory::LastDealComment( const string symbol)
  {
   int     total_deals  = 0 ;   // Всего сделок в списке выбранной истории
   string deal_symbol  = "" ; // Символ сделки
   string deal_comment = "" ; // Комментарий сделки
//--- Если история сделок получена
   if ( HistorySelect ( 0 , TimeCurrent ()))
     {
       //--- Получим количество сделок в полученном списке
      total_deals= HistoryDealsTotal ();
       //--- Пройдемся по всем сделкам в полученном списке от последней сделки к первой
       for ( int i=total_deals- 1 ; i>= 0 ; i--)
        {
         //--- Получим комментарий сделки
         deal_comment= HistoryDealGetString ( HistoryDealGetTicket (i), DEAL_COMMENT );
         //--- Получим символ сделки
         deal_symbol= HistoryDealGetString ( HistoryDealGetTicket (i), DEAL_SYMBOL );
         //--- Если символ сделки и текущий символ равны, остановим цикл
         if (deal_symbol==symbol)
             break ;
        }
     }
//---
   return (deal_comment);
  }
 
Anatoli Kazharski :

Ve hesap geçmişindeki son işlemin yorumuna bakarsanız, bu size yakışır mı?

Bunun gibi bir şey:

Teşekkürler, nazik insan!

SL ve TP'nin kayabileceği ve fiyatı karşılaştırmanın faydasız olacağı düşünüldüğünde, belki de bu en güvenilir yoldur.

 
Anatoli Kazharski :

Ve hesap geçmişindeki son işlemin yorumuna bakarsanız, bu size yakışır mı?

Bunun gibi bir şey:


Ve herhangi bir yorum yoksa (ki bu tamamen mümkündür)?

 
Andrey Dik :

SL ve TP'nin kayabileceği ve fiyatı karşılaştırmanın faydasız olacağı düşünüldüğünde, belki de bu en güvenilir yoldur.

Hayır, bu yöntem kötü.
   static int GetOrderType( const ulong OrderTicket )
     {
       int OrderType =( int ):: HistoryOrderGetInteger ( OrderTicket , ORDER_TYPE );

       if (( OrderType == ORDER_TYPE_BUY ) || ( OrderType == ORDER_TYPE_SELL ))
        {
         const string OrderComment = HistoryOrderGetString ( OrderTicket , ORDER_COMMENT );
         const string OrderPrice=:: DoubleToString (:: HistoryOrderGetDouble ( OrderTicket , ORDER_PRICE_OPEN ),
                                                  ( int ):: SymbolInfoInteger ( HistoryOrderGetString ( OrderTicket , ORDER_SYMBOL ), SYMBOL_DIGITS ));

         if ( OrderComment == "tp " +OrderPrice)
             OrderType =ORDER_TYPE_TAKEPROFIT;
         else if ( OrderComment == "sl " +OrderPrice)
             OrderType =ORDER_TYPE_STOPLOSS;
        }

       return ( OrderType );
     }
 
prostotrader :

Ve herhangi bir yorum yoksa (ki bu tamamen mümkündür)?

Elbette oldukça mümkündür. Bunu, en basit ve en hızlısı olarak, test cihazındaki tarih analizi için kullanıyorum.

Ve böylece bekleyen siparişlerle , biletleri yapmanız ve analiz etmeniz gerekir. Hazır bir örneğim yok.

 
eski sorun

bir pozisyonu kapattıktan sonra MQL5 kullanarak kar alma ve stoploss değerlerini bulamayacaksınız .


Bunlar asılsız suçlamalar değil, saatlerce her şeyin nasıl çalıştığını anlamaya çalışmanın (HistorySelectByPosition vb. yardımlar olmadan) sonucudur. Ve yanılıyorsam seve seve özür dilemeye hazırım. Asılsız olmamak için, bir pozisyon açan, ardından SL ve TP seviyelerini belirleyen RoboForexEU-MetaTrader 5 sunucusunda testçi için bir danışman (anlaşılması daha kolay) getiriyorum.

 void OnTick ()
{
   static bool Flag = true ;

   if (Flag)
  {
     // Открываем SELL-позицию
     MqlTradeRequest Request = { 0 };

    Request.action = TRADE_ACTION_DEAL ;

    Request.symbol = Symbol ();
    Request.volume = 1 ;
    Request.price = SymbolInfoDouble ( Symbol (), SYMBOL_BID );

    Request.type = ORDER_TYPE_SELL ;

     MqlTradeResult Result;

     if ( OrderSend (Request, Result))
    {
       // Устанавливаем SL и TP
      Request.position = Result.deal;

      Request.action = TRADE_ACTION_SLTP ;

      Request.tp = Result.ask - 10 * _Point ;
      Request.sl = Result.ask + 10 * _Point ;

       if ( OrderSend (Request, Result))
         Print ( "Сделка в тестере закроется либо по SL, TP, либо по окончании бэктеста" )    ;

      Flag = false ;
    }
  }
}

Bu Expert Advisor'da (OnDeinit'te) tek bir kapalı pozisyonun SL ve TP'sini belirlemek imkansızdır. Bu kadar mı amaçlanmış?

Kim karar verebilir - kapalı bir pozisyonun SL ve TP'sini belirlemeye?
 
Anatoli Kazharski :

Elbette oldukça mümkündür. Bunu, en basit ve en hızlısı olarak, test cihazındaki tarih analizi için kullanıyorum.

Ve böylece bekleyen siparişlerle , biletleri yapmanız ve analiz etmeniz gerekir. Hazır bir örneğim yok.

Bu yöntemde yanlış olan neydi?

case TRADE_TRANSACTION_DEAL_ADD :
   if (trans.order != my_order_ticket)
  {
   //Сработал SL или TP
  }
break ;
 
prostotrader :

Bu yöntemde yanlış olan neydi?

case TRADE_TRANSACTION_DEAL_ADD :
   if (trans.order != my_order_ticket)
  {
   //Сработал SL или TP
  }
break ;
Evet böyle bir şey. Sadece henüz test etmedim.
Neden: