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

 
Maxim Kuznetsov # :

이것은 일종의 농담입니까?

흑백이 있습니다(;;)

글쎄, 네, 마법이 주문의 마법과 같지 않을 때만 탈출구가 제공됩니다.
 
Nerd Trader # :
글쎄, 네, 마법이 주문의 마법과 같지 않을 때만 탈출구가 제공됩니다.

이 시도

 int GetMagic(Order &order)
{
   int magic = 0 ;
   if (order.cmd == OP_SELLSTOP || order.cmd == OP_BUYSTOP)
   for ( int i = OrdersTotal (); i > 0 ; i --)
   {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES))
      {
       if (OrderType()==OP_SELLSTOP || OrderType()==OP_BUYSTOP)
         {
           if (magic == OrderMagicNumber()) magic+= 1 ;
           else magic= 0 ;
         }
      }
   }
   return (magic);
}
 
EVGENII SHELIPOV 선택한 주문 의 스왑 값을 반환하는 OrderSwap() 함수가 있음을 알려주십시오.

주문 그리드가 있으면 어떻게 되나요???

아무도 마법 주문과 금융 상품에 대한 주문 그리드의 모든 스왑 합계를 계산하는 기능을 가지고 있지 않습니다.

도와 주셔서 감사합니다!!!

왜 그것을 원하십니까?
 
MakarFX # :
왜 그것을 원하십니까?

그리드 수명이 긴 대규모 주문 그리드를 닫을 때 스왑 주문은 이익을 먹고 결과를 크게 왜곡합니다.

이 기능이 스왑 손실을 보상하기를 원합니다.

 
EVGENII SHELIPOV # :

그리드 수명이 긴 대규모 주문 그리드를 닫을 때 스왑 주문은 이익을 먹고 결과를 크게 왜곡합니다.

이 기능이 스왑 손실을 보상하기를 원합니다.

그리드가 이익 또는 손익분기 가격으로 마감됩니까?
 
MakarFX # :

이 시도

 int GetMagic(Order &order)
{
   int magic = 0 ;
   if (order.cmd == OP_SELLSTOP || order.cmd == OP_BUYSTOP)
   for ( int i = OrdersTotal (); i > 0 ; i --)
   {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES))
      {
       if (OrderType()==OP_SELLSTOP || OrderType()==OP_BUYSTOP)
         {
           if (magic == OrderMagicNumber()) magic+= 1 ;
           else magic= 0 ;
         }
      }
   }
   return (magic);
}
그것은 해냈 지만 (order.cmd == OP_SELLSTOP || OP_BUYSTOP) 문제가 해결되지 않았습니다.
하지만 모든 명령에 통과해야 합니다. 마법 자체는 생성 시 스톱오더에만 설정됩니다. 스톱 오더가 OrderType()에 의해 생성되는 것은 아직 존재하지 않기 때문에 이해가 불가능하며, 이를 위해 order.cmd에 오더 유형의 예비 입력이 제공된다. 그리고 여기에 두 개의 루프가 필요합니다. 하나는 다른 루프에 중첩되어 마법 변수의 한 번의 반복이 OrdersTotal()의 모든 주문의 마법으로 확인되도록 합니다. 다 구현했는데 무한루프만 뜨는데 이유를 모르겠네요...
 
MakarFX # :
그리드가 이익 또는 손익분기 가격으로 마감됩니까?

네, 일정 수준의 드로다운에서 이익이 0으로 재설정되고 무손실 스왑으로 인해 추한 손실이 발생합니다.

 
Nerd Trader # :
그것은 트릭을 수행했습니다. if (order.cmd == OP_SELLSTOP || OP_BUYSTOP)
하지만 모든 명령에 통과해야 합니다. 마법 자체는 생성 시 스톱오더에만 설정됩니다. 스톱 오더가 OrderType()에 의해 생성되는 것은 아직 존재하지 않기 때문에 이해가 불가능하며, 이를 위해 order.cmd에 오더 유형의 예비 입력이 제공된다. 그리고 여기에 두 개의 루프가 필요합니다. 하나는 다른 루프에 중첩되어 마법 변수의 한 번의 반복이 OrdersTotal()의 모든 주문의 마법으로 확인되도록 합니다.
GetMagic(...)을 사용하는 위치 표시
 
void OpenOrder( int db = - 1 ){

   if (db == - 1 ){
     Print ( "'db' должен иметь корректное значение" );
     return ;
  }

  Order order;

   //Если бид в границах ДБ (его хай/лоу) то инициализируем ордер для селстопа или байстопа
   if (Bid > db_last.low && Bid < db_last.hight){
     if (db == BEAR) order.InitForSell(SELLSTOP);
     if (db == BULL) order.InitForBuy(BUYSTOP);
  }

 ...

   if (order.is_init == true )
  {
     int order_send = OrderSend ( Symbol (), order.cmd, 0.01 , order.open_price, 10 , 
    order.sl_price, order.tp_price, "" , GetMagic(order) , 0 , order.arrow_color);

     if (order_send == - 1 ){
       Print (order.error_text, " | " , GetLastError (), " db_last.third " ,db_last.third,
         " | db_last.size_open_to_low " ,db_last.size_open_to_low, " | order.sl_price: " ,
        order.sl_price, " | order.cmd " ,order.cmd);
       ResetLastError ();
       return ;
    }
  }
}

...

int GetMagic(Order &order)
{
  int magic = 0 ;
  //Если должен быть открыт стопордер и если есть уже открытые или отложенные 
   //ордера, то возможно некоторые с маджиком, это надо проверить и сгенерировать 
   //для нашего ордера уникальный маджик и отправить его на запись в массив
   if (order.cmd == OP_SELLSTOP || OP_BUYSTOP)
     if ( OrdersTotal () >= 1 )
       for (;;){
        magic++;
         for ( int i = OrdersTotal (); i > 0 ; i --)
           if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES) != false )
             if (magic != OrderMagicNumber())
               return magic;
            
      }
     //Если нет открытых или отложенных ордеров то увеличиваем значение 
     //маджика, чтобы он равнялся единице и отправляем на запись в массив
     else if ( OrdersTotal () == 0 )
       return (magic + 1 );
   return magic;
}


거기, 해설에서 마술사는 쓰기 위해 배열로 보내지는데, 이것이 오해의 소지가 없도록 하고 마술사는 retorn에 의해 돌아오는 동안 쓰여집니다.
 
EVGENII SHELIPOV # :

네, 일정 수준의 드로다운에서 이익이 0으로 재설정되고 무손실 스왑으로 인해 추한 손실이 발생합니다.

   double GetOrderSwap()
     {
       double order_swap = 0 ;
       for ( int i = OrdersTotal ()- 1 ; i>= 0 ; i--)
        {
         if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES))
           {
             if (OrderSymbol() == Symbol () && OrderMagicNumber() == Magic)
              {
               if (OrderType() == OP_BUY)
                 {
                  order_swap += OrderSwap();
                 }
              }
           }
        }
       return (order_swap);
     }