Sadece Karlı İşlemleri Kapatın, Kar Hedefinde - sayfa 3

 
af1 :

Merhaba GumRai, zaman ayırdığınız için teşekkürler. Değişikliklerinizi zaten denedim, ancak siparişler 1'de kapanmaya devam ediyor. Başka bir deyişle, karlı siparişler 25'e ulaşmayı beklemiyor.

Daha önce DeVries ve Raptor tarafından sağlanan kod satırını kullanarak bile mi?

 if (CloseAllNow) CloseAll();
    
     if (CloseProfitableTradesOnly && ProfitTarget == 0.0 ) CloseAllinProfit();
    
     if (BuyProfit+SellProfit >= ProfitTarget && !CloseProfitableTradesOnly) CloseAll(); 

     if (CloseProfitableTradesOnly && BuyProfit+SellProfit >= ProfitTarget) CloseAllinProfit();

     if (ClosePendingOnly) ClosePendingOrdersOnly();

Umarım bu çizgiyi değiştirmemişsindir, bunu düşünüyordun

 if (CloseProfitableTradesOnly && ProfitTarget == 0.0 ) CloseAllinProfit();

25.00 olarak değiştirdiyseniz, 1$+ değerindeki tüm karlı işlemleri kapatmış olacaksınız.

 
GumRai :

Daha önce DeVries ve Raptor tarafından sağlanan kod satırını kullanarak bile mi?

Umarım bu çizgiyi değiştirmemişsindir, bunu düşünüyordun

25.00 olarak değiştirdiyseniz, 1$+ değerindeki tüm karlı işlemleri kapatmış olacaksınız.


Tüm önerileri denedim ama yine de doğru şekilde kapanmıyor.

 
af1 :


Tüm önerileri denedim ama yine de doğru şekilde kapanmıyor.


Belki şu anda kullandığınız kodun tamamını gösterebilirsiniz.
 
GumRai :

Belki şu anda kullandığınız kodun tamamını gösterebilirsiniz.

 //|$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
//|              Close 
//|   Last Updated 12-12-2006 10:00pm
//|$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
#define     NL     "\n" 

extern int     ProfitTarget     = 25 ;             // closes all orders once Float hits this $ amount
extern bool    CloseAllNow      = false ;           // closes all orders now
extern bool    CloseProfitableTradesOnly = true; // closes only profitable trades
extern double ProftableTradeAmount      = 1 ;     // Only trades above this amount close out
extern bool    ClosePendingOnly = false ;           // closes pending orders only
extern bool    UseAlerts        = false ;

//+-------------+
//| Custom init |
//|-------------+
int init()
  {

  }

//+----------------+
//| Custom DE-init |
//+----------------+
int deinit()
  {

  }

//+------------------------------------------------------------------------+
//| Closes everything
//+------------------------------------------------------------------------+
void CloseAll()
{
   int i;
   bool result = false ;

   while ( OrdersTotal ()> 0 )
   {
       // Close open positions first to lock in profit/loss
       for (i= OrdersTotal ()- 1 ;i>= 0 ;i--)
      {
         if ( OrderSelect (i, SELECT_BY_POS)== false ) continue ;

         result = false ;
         if ( OrderType() == OP_BUY)  result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 15 , Red );
         if ( OrderType() == OP_SELL)  result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 15 , Red );
         if (UseAlerts) PlaySound ( "alert.wav" );
      }
       for (i= OrdersTotal ()- 1 ;i>= 0 ;i--)
      {
         if ( OrderSelect (i, SELECT_BY_POS)== false ) continue ;

         result = false ;
         if ( OrderType()== OP_BUYSTOP)  result = OrderDelete( OrderTicket() );
         if ( OrderType()== OP_SELLSTOP)  result = OrderDelete( OrderTicket() );
         if ( OrderType()== OP_BUYLIMIT)  result = OrderDelete( OrderTicket() );
         if ( OrderType()== OP_SELLLIMIT)  result = OrderDelete( OrderTicket() );
         if (UseAlerts) PlaySound ( "alert.wav" );
      }
       Sleep ( 1000 );
   }
}
   
//+------------------------------------------------------------------------+
//| cancels all orders that are in profit
//+------------------------------------------------------------------------+
void CloseAllinProfit()
{
   for ( int i= OrdersTotal ()- 1 ;i>= 0 ;i--)
 {
     OrderSelect (i, SELECT_BY_POS);
     bool result = false ;
         if ( OrderType() == OP_BUY && OrderProfit()+OrderSwap()>ProftableTradeAmount)  result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 5 , Red );
         if ( OrderType() == OP_SELL && OrderProfit()+OrderSwap()>ProftableTradeAmount)  result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 5 , Red );
         if (UseAlerts) PlaySound ( "alert.wav" );
 }
   return ; 
}

//+------------------------------------------------------------------------+
//| cancels all pending orders 
//+------------------------------------------------------------------------+
void ClosePendingOrdersOnly()
{
   for ( int i= OrdersTotal ()- 1 ;i>= 0 ;i--)
 {
     OrderSelect (i, SELECT_BY_POS);
     bool result = false ;
         if ( OrderType()== OP_BUYSTOP)   result = OrderDelete( OrderTicket() );
         if ( OrderType()== OP_SELLSTOP)  result = OrderDelete( OrderTicket() );
  }
   return ; 
  }

//+-----------+
//| Main      |
//+-----------+
int start()
  {
   int       OrdersBUY;
   int       OrdersSELL;
   double    BuyLots, SellLots, BuyProfit, SellProfit;

//+------------------------------------------------------------------+
//  Determine last order price                                       |
//-------------------------------------------------------------------+
       for ( int i= 0 ;i< OrdersTotal ();i++)
      {
         if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES)== false ) continue ;
         if (OrderType()==OP_BUY)  
         {
            OrdersBUY++;
            BuyLots += OrderLots();
            BuyProfit += OrderProfit() + OrderCommission() + OrderSwap();
         }
         if (OrderType()==OP_SELL) 
         {
            OrdersSELL++;
            SellLots += OrderLots();
            SellProfit += OrderProfit() + OrderCommission() + OrderSwap();
         }
      }               
   
     if (CloseAllNow) CloseAll();
    
     if (CloseProfitableTradesOnly && ProfitTarget == 0.0 ) CloseAllinProfit();
    
     if (BuyProfit+SellProfit >= ProfitTarget && !CloseProfitableTradesOnly) CloseAll();
    
     if (CloseProfitableTradesOnly && BuyProfit+SellProfit >= ProfitTarget) CloseAllinProfit(); 

     if (ClosePendingOnly) ClosePendingOrdersOnly();
       
   
   Comment ( "                            Comments Last Update 12-12-2006 10:00pm" , NL,
           "                            Buys    " , OrdersBUY, NL,
           "                            BuyLots        " , BuyLots, NL,
           "                            Sells    " , OrdersSELL, NL,
           "                            SellLots        " , SellLots, NL,
           "                            Balance " , AccountBalance(), NL,
           "                            Equity        " , AccountEquity(), NL,
           "                            Margin              " , AccountMargin(), NL,
           "                            MarginPercent        " , MathRound ((AccountEquity()/AccountMargin())* 100 ), NL,
           "                            Current Time is  " ,TimeHour(CurTime()), ":" ,TimeMinute(CurTime()), "." ,TimeSeconds(CurTime()));
 } // start()

 


 

Lütfen mesajıma geri dönün

https://forum.mql4.com/56959/page2#822980

Yalnızca karlı işlemler eklemiyorsunuz. Net kar veya zarar hesaplıyorsunuz

 
GumRai :

Lütfen mesajıma geri dönün

https://forum.mql4.com/56959/page2#822980

Yalnızca karlı işlemler eklemiyorsunuz. Net kar veya zarar hesaplıyorsunuz



GumRai, Raptor ve sizin tarafınızdan önerilen kod değişikliklerini yaptım:

https://www.mql5.com/en/forum/146091
https://www.mql5.com/en/forum/146091/page2#822980

Ve şimdi doğru kapanıyor gibi görünüyor. Bunun için teşekkürler!


Sadece bir şey daha. Tüm karlı işlemleri hesaplamak yerine sadece karlı alımları veya sadece karlı satış işlemlerini hesaplamak istersem neyi değiştirmeliyim?

Bu değişikliği yalnızca satın alımları hesaplamak için düşünüyorum, ancak emin değilim. Bu doğru mu?:

bundan:

 if (OrderType()==OP_SELL) 
         {
            OrdersSELL++;
            SellLots += OrderLots(); 
            ThisTradeProfit=OrderProfit() + OrderCommission() + OrderSwap();
             if (ThisTradeProfit> 0 )
            BuyProfit += ThisTradeProfit;
         }

buna:

 //if(OrderType()==OP_SELL) 
         {
             //OrdersSELL++;
             //SellLots += OrderLots(); 
             //ThisTradeProfit=OrderProfit() + OrderCommission() + OrderSwap();
             //if(ThisTradeProfit>0)
             //BuyProfit += ThisTradeProfit;
         }
 

Her ikisi de başlangıçta false olarak ayarlanmış "Yalnızca BuyTrades" ve "SellTradesOnly" gibi bir şey olarak adlandırılan giriş parametrelerine 2 harici bool ekleyebileceğinizi tahmin ediyorum.

o zamanlar

 if (OrderType()==OP_SELL && BuyTradesOnly == false )
         {
            OrdersSELL++;
            SellLots += OrderLots(); 
            ThisTradeProfit=OrderProfit() + OrderCommission() + OrderSwap();
             if (ThisTradeProfit> 0 )
            BuyProfit += ThisTradeProfit;
         }
 
GumRai :

Her ikisi de başlangıçta false olarak ayarlanmış "Yalnızca Satın Al" ve "Yalnızca SellTrades" gibi bir şey olarak adlandırılan giriş parametrelerine 2 harici bool ekleyebileceğinizi tahmin ediyorum.

o zamanlar


2 extern bool'u eklemedim, bunu "yalnızca satın alma siparişlerini" kapatmak için değiştirdim

 for ( int i= 0 ;i< OrdersTotal ();i++)
      {
         if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES)== false ) continue ;
         if (OrderType()==OP_BUY)  
         {
            OrdersBUY++;
            BuyLots += OrderLots();
             double ThisTradeProfit=OrderProfit() + OrderCommission() + OrderSwap();
             if (ThisTradeProfit> 0 )
            BuyProfit += ThisTradeProfit;
         }

ve bunu "yalnızca satış siparişlerini" kapatmak için değiştirin

 for ( int i= 0 ;i< OrdersTotal ();i++)
      {
         if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES)== false ) continue ;
         if (OrderType()==OP_SELL)  
         {
            OrdersSELL++;
            SellLots += OrderLots();
             double ThisTradeProfit=OrderProfit() + OrderCommission() + OrderSwap();
             if (ThisTradeProfit> 0 )
            BuyProfit += ThisTradeProfit;
         }

Yani şimdi iki EA'm var. Biri yakın alımlar için, diğeri yakın satışlar için. Benim için tamam.


Her iki hesapta da test ettim, demo ve gerçek. Demoda iyi çalışıyor, ancak gerçek hesapta, kar hedefine ulaşıldığında, pozisyonları kapatmaya başlayacak, ancak kalan siparişler kar hedefinin altına düştüğünde pozisyonları kapatmayı durduracak. Bu, kapanış anında fiyat değişiyorsa gerçekleşir. Bu nedenle, hepsini kapatmak (karlı siparişler) yerine açık karlı siparişler bırakma eğilimindedir.

Bu yazıyı RaptorUK https://www.mql5.com/en/forum/139654 adresinden okudum. Bunun gibi bir şey, ama bu sorun için en iyi çözümün ne olabileceğini gerçekten bilmiyorum.

 
af1 :


Bu gönderiyi RaptorUK https://www.mql5.com/en/forum/139654 adresinden okudum. Bunun gibi bir şey, ama bu sorun için en iyi çözümün ne olabileceğini gerçekten bilmiyorum.

Çözüm iş parçacığında verilmiştir. . . bu yüzden yarattım. Yukarı değil döngüde geri sayım.
 
RaptorUK :
Çözüm iş parçacığında verilmiştir. . . bu yüzden yarattım. Yukarı değil döngüde geri sayım.


Tamam Raptor, bu döngüyü yapmaya çalışacağım, ama bunu yapmadan önce, ya değiştirirsem

Bundan:
}
       Sleep ( 1000 );
   }
Buna:
}
       Sleep ( 5000 );
      RefreshRates();
       continue ;
   }


Bu işi yapabilir mi?

Neden: