MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 1624

 
EVGENII SHELIPOV # :

안녕하세요 !!!

특정 감소 수준에 도달하면 그리드 Expert Advisor에서 최소 및 최대 주문을 마감하는 코드를 작성하는 데 도움을 주세요.

최소 및 최대 주문의 이익을 계산하는 두 가지 함수 작성

이 차수의 합을 계산하는 함수를 작성했습니다. 여기에는 문제가 없는 것 같습니다.

문제는 이 두 주문만 마감하는 방법입니다. 여기에 내가 찾은 CloseAll() 함수가 있습니다.

문제는 모든 주문을 마감하는 OrderTicket() 함수 대신

그리드에서 최소 및 최대 주문에 대해서만 티켓을 정의하는 max_ticket 및 min_ticket 변수를 조입니다.

또는이 문제에 대한 솔루션이 있습니까?

 void ClosseAll()
{
   int slip = MarketInfo( _Symbol , MODE_SPREAD )* 2 ;
   for ( int i = OrdersTotal ()- 1 ; i>= 0 ; i--)
  {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES))
     {
      if (OrderClose(max_ticket , OrderLots(), Bid, slip)&&OrderClose(min_ticket , OrderLots(), Bid, slip))
             Print ( "OK" );
       else
             Print ( "Не удалось закрыть ордер! " , GetLastError ());
     }
  }
}

그리고 그것을 고친다

 if (OrderTicket() > max_ticket) max_ticket = OrderTicket();
 
makssub # :

죄송합니다, 다시 삐딱하게 씁니다. 다시 한번 시도해 보겠습니다)

열린 주문 그리드가 있습니다. 현재 가격과 가장 가까운 주문의 시가(OrderOpenPrice)를 찾아야 합니다. 그리드를 계속 구축하기 위해 그렇지 않으면 거의 혼란스러운 방식으로 구축됩니다.

열거형 쓰는 방법은 알겠는데 언어로 제대로 표현이 안되서 제대로 작동함 (개처럼 다 이해함))

예 또는 예에 대한 링크가 있으면 plz를 작성하십시오. MQL4

루프에서:

 if ( MathAbs (OrderOpenPrice()-Bid)<previous_value)
   {
   previous_value= MathAbs (OrderOpenPrice()-Bid);
   nearest_order=OrderTicket();
   }

루프 전에 previous_value=DBL_MAX a Nearest_order=0 초기화

 
PapaYozh # :

그런데 객체가 생성될 때 호출이 암시적으로 발생한다는 사실 외에 어떻게 다른가요?

또한 생성자에서 호출될 때 메모리가 아직 할당되지 않은 경우 컴파일되지 않습니다.

 class A
{
public :
   int                val;
                     A() {}
};
//+------------------------------------------------------------------ +
class B
{
public :
   A                 a;
                     B():a(),a.val( 10 ) {} //
};

그러나 생성자의 본문에는 문제가 없습니다.

 class A
{
public :
   int                val;
                     A() {}
};
//+------------------------------------------------------------------ +
class B
{
public :
   A                 a;
                     B():a() {a.val= 10 ;}
};



기본 클래스 생성자에 대해 - 명시적으로 호출할 수 있습니다 .

 class A
{
public :
   int                val;
                     A( const int v): val(v) {}
                     A() {}
};
//+------------------------------------------------------------------ +
class B: public A
{
public :
                     B(): A( 100 ) {}
};
 
MakarFX # :

그리고 그것을 고친다

미끄러짐은 처음에 이미 EA가 있습니다.

MakarFX # :

그리고 그것을 고친다

MakarFX # :

그리고 그것을 고친다

 //+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int init() 
{
   Spread = MarketInfo( Symbol (), MODE_SPREAD ) * Point ;
   MinLot = MarketInfo( Symbol (),MODE_MINLOT);
   return ( 0 );
}

마감 결과에 따른 레이아웃이며 최대 주문만 마감됩니다.


 
Taras Slobodyanik # :

루프에서:

루프 전에 previous_value=DBL_MAX a Nearest_order=0 초기화

MakarFX # :

그리고 그것을 고친다

MakarFX # :

그리고 그것을 고친다

로그의 오류로 인해


 
안녕하세요 MirachLtd-Real과 같은 제품에 대해 들어본 사람이 있습니까? 리뷰가 있는 사람이 있습니까?

 
EVGENII SHELIPOV # :

미끄러짐은 처음에 이미 EA가 있습니다.

이 미끄러짐은 이 기능을 위한 것입니다 ... BUY 또는 SELL을 넘지 않도록

 //--- global parameters
int max_ticket = 0 ;
int min_ticket = INT_MAX ;
//+----------------------------------------------------------------------------+
void ClosseAll()
{
   int slipp = MarketInfo( _Symbol , MODE_SPREAD )* 2 ;
   for ( int i = OrdersTotal ()- 1 ; i>= 0 ; i--)
  {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES))
     {
       if (OrderClose(max_ticket , OrderLots(), Bid, slipp)&&OrderClose(min_ticket , OrderLots(), Bid, slipp))
             Print ( "OK" );
       else
             Print ( "Не удалось закрыть ордер! " , GetLastError ());
     }
  }
}
//+----------------------------------------------------------------------------+
//| Расчет профита максимального ордера в сетке                                |
//+----------------------------------------------------------------------------+
double GetProfitMaxOrder()
{
   double max_ticket_profit = 0 ;
      {
       for ( int cnt = OrdersTotal () - 1 ; cnt >= 0 ; cnt--) 
         {
         if ( OrderSelect (cnt, SELECT_BY_POS, MODE_TRADES))
            {
             if (OrderSymbol() == Symbol () && OrderMagicNumber() == Magic)
               {
               if (OrderType() == OP_BUY || OrderType() == OP_SELL)
                  {
                   if (OrderTicket() > max_ticket) 
                     {
                     max_ticket = OrderTicket();
                     max_ticket_profit =  OrderProfit();
                     }
                  }
               }
            }
         }
      }
   return ( max_ticket_profit);
}
//+----------------------------------------------------------------------------+
//| Расчет профита минимального ордера в сетке                                 |
//+----------------------------------------------------------------------------+
double GetProfitMinOrder()
{
   double min_ticket_profit = 0 ;
      {
       for ( int cnt = OrdersTotal () - 1 ; cnt >= 0 ; cnt--) 
         {
         if ( OrderSelect (cnt, SELECT_BY_POS, MODE_TRADES))
            {
             if (OrderSymbol() == Symbol () && OrderMagicNumber() == Magic) 
               {
               if (OrderType() == OP_BUY || OrderType() == OP_SELL)
                  {
                   if (OrderTicket() < min_ticket)
                     {
                     min_ticket = OrderTicket();
                     min_ticket_profit = OrderProfit(); 
                     }
                  }
               }
            }
         }
      }
   return (min_ticket_profit);
 
클래스 개체 를 만드는 가장 좋은 방법은 무엇입니까? 클래스 설명 뒤에 또는 로컬로, 예를 들어 OnTick()에서? 두 번째 옵션은 아마도 매우 비경제적일 것입니다: CPU, RAM에 대한 부하.
 
MakarFX # :

이 미끄러짐은 이 기능을 위한 것입니다 ... BUY 또는 SELL을 넘지 않도록

 int slipp = MarketInfo( _Symbol , MODE_SPREAD )* 2 ;

여기에서는 모든 것이 정확합니다. 포인트를 곱할 필요가 없습니다.

유형 변환으로 인한 데이터 손실 가능성 네발라슈카.mq4 376 열셋

컴파일 경고가 있습니다


 
EVGENII SHELIPOV # :

여기에서는 모든 것이 정확합니다. 포인트를 곱할 필요가 없습니다.

유형 변환으로 인한 데이터 손실 가능성 네발라슈카.mq4 376 열셋

컴파일 경고가 있습니다


MODE_SPREAD를 곱할 필요가 없습니다 - 포인트로 스프레드

당신은 확인할 수 있습니다

   Print (MarketInfo( _Symbol , MODE_SPREAD ), " / " ,MarketInfo( _Symbol , MODE_SPREAD )* Point );

그리고 그렇게

 int slipp = ( int ) MarketInfo( _Symbol , MODE_SPREAD )* 2 ;