이익 목표에서 수익성 있는 거래만 마감

 

안녕하세요, 저는 이 ea를 테스트하고 있으며 주문을 마감하는 데 매우 유용하다고 생각하지만 제 경우에는 모든 미결 주문을 마감하고 싶지 않고 수익성 있는 주문만 마감하고 싶습니다.

"CloseProfitableTradesOnly" 값을 false에서 true로 변경했지만 주문은 계속 1달러에서 마감됩니다. 그리고 내가 찾고 있는 것은 함께 25 USD에 도달할 때만 수익성 있는 주문을 마감하는 것입니다. 1 USD 이상의 이익이 있는 모든 마감된 주문.

어떤 제안이 있으면 정말 감사하겠습니다. 도움을 주셔서 미리 감사드립니다.

다음은 ea 및 코드입니다.

 //|$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
//|              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 = false ; // 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) CloseAllinProfit();
    
     if (BuyProfit+SellProfit >= ProfitTarget) CloseAll(); 

     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()

 


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

안녕하세요, 저는 이 ea를 테스트하고 있으며 주문을 마감하는 데 매우 유용하다고 생각하지만 제 경우에는 모든 미결 주문을 마감하고 싶지 않고 수익성 있는 주문만 마감하고 싶습니다.

"CloseProfitableTradesOnly" 값을 false에서 true로 변경했지만 주문은 계속 1달러에서 마감됩니다. 그리고 내가 찾고 있는 것은 함께 25 USD에 도달할 때만 수익성 있는 주문을 마감하는 것입니다. 1 USD 이상의 이익이 있는 모든 마감된 주문.


이 코드를 작성하지 않은 것 같습니다. . .

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

     if (ClosePendingOnly) ClosePendingOrdersOnly();

. . . 하지만 읽을 수 있어야 합니다.

"CloseProfitableTradesOnly" 값을 false에서 true로 변경했으므로 위에서 보면 CloseAllinProfit()이 호출됩니다. . . 총 이익에 관계없이.

이 변경을 시도하십시오.

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

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

     if (ClosePendingOnly) ClosePendingOrdersOnly();
 

안녕하세요 랩터님, 답변 감사합니다.

이 코드를 작성하지 않고 "CloseProfitableTradesOnly" 입력 값을 다음과 같이 false에서 true로 변경합니다.

나는 당신의 변경 사항을 시도하고 있지만 여전히 ea는 이익 목표에서 닫히지 않습니다(이 경우 25 USD).


코드에서도 0.0에서 25.0으로 변경해야 합니까?

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

안녕하세요 랩터님, 답변 감사합니다.

이 코드를 작성하지 않고 "CloseProfitableTradesOnly" 입력 값을 다음과 같이 false에서 true로 변경합니다.

나는 당신의 변경 사항을 시도하고 있지만 여전히 ea는 이익 목표에서 닫히지 않습니다(이 경우 25 USD).


코드에서도 0.0에서 25.0으로 변경해야 합니까?


아니요, 이 줄은 원하는 작업을 수행해야 합니다. 모든 변경을 수행했습니까?

     if (CloseProfitableTradesOnly && BuyProfit+SellProfit >= ProfitTarget) CloseAllinProfit();
 
나는 이것에서 변했다
 if (CloseAllNow) CloseAll();
    
if (CloseProfitableTradesOnly) CloseAllinProfit();
    
if (BuyProfit+SellProfit >= ProfitTarget) CloseAll(); 

if (ClosePendingOnly) ClosePendingOrdersOnly();

이에:

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

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

if (ClosePendingOnly) ClosePendingOrdersOnly();


그리고 "CloseProfitableTradesOnly"를 false에서 true로 입력합니다.


그러나 닫지 마십시오. 그 밖에 무엇이 있을 수 있습니까?

 
af1 :
나는 이것에서 변했다

이에:


그리고 "CloseProfitableTradesOnly"를 false에서 true로 입력합니다.


그러나 닫지 마십시오. 그 밖에 무엇이 있을 수 있습니까?

총 이익이 25.0 미만일 수 있습니다.
 
RaptorUK :
총 이익이 25.0 미만일 수 있습니다.


25보다 작으면 더 빨리 닫아야 합니다.

 
af1 :


25보다 작으면 더 빨리 닫아야 합니다.

아니요, 수익은 25.0 이상이어야 마감됩니다. . .

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

아니요, 수익은 25.0 이상이어야 마감됩니다. . .


다음은 랩터의 예입니다. 97.9의 이익을 가진 4개의 주문이 있습니다. 따라서 내 이익 목표가 25이고 조건이 "CloseProfitableTradesOnly"가 true이면 이 4개의 주문이 마감되어야 합니다. 그러나 어떤 주문도 마감하지 않습니다.

 
af1 :


다음은 랩터의 예입니다. 97.9의 이익을 가진 4개의 주문이 있습니다. 따라서 내 이익 목표가 25이고 조건이 "CloseProfitableTradesOnly"가 true이면 이 4개의 주문이 마감되어야 합니다. 그러나 어떤 주문도 마감하지 않습니다.

아니요, 총 이익은 25.0보다 커야 하며 귀하의 이익은 -59.80입니다.