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

 
Valeriy Yastremskiy # :
먼저 차이는 루프 전의 1000입니다. 루프에서 시작 가격에서 현재 가격 모듈로를 뺀 값이 차이보다 작으면 차이는 수신된 값과 같으며 티켓은 변수에 저장됩니다.

에, 나도 같은 생각을 했어) 그런데, 뭔가 잘못됐어. 온라인에서 현재 가격과 가장 가까운 주문의 시작 가격을 추적하는 방법의 예를 들어 주시겠습니까? 아니면 그냥 비교하고 가장 저렴한 가격을 찾으십시오)

 double FindSellOpen() 

{
   int oldticket;
   double oldopenprice= 0 ;
   ticket= 0 ;
   double Dist= 1000000.0 ;
   
   for ( int i= 1 ; i<= OrdersTotal (); i++) 
   {
       if ( OrderSelect (i- 1 ,SELECT_BY_POS)== true )
      {
         if (OrderSymbol() == Symbol () && OrderMagicNumber() == Magic && OrderType() == OP_SELL)
         {
            oldticket = OrderTicket();
             if ( NormalizeDouble ( MathAbs (oldticket), Digits ) < NormalizeDouble (Dist, Digits )) 
            {
               ticket = oldticket;
               oldopenprice = OrderOpenPrice();
            }
         }
      }
   }
   return (oldopenprice);
}
 
makssub # :

에, 나도 같은 생각을 했어) 그런데, 뭔가 잘못됐어. 온라인에서 현재 가격과 가장 가까운 주문의 시작 가격을 추적하는 방법의 예를 들어 주시겠습니까? 아니면 그냥 비교하고 가장 저렴한 가격을 찾으십시오)

확인 해봐:

 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                    |
//+----------------------------------------------------------------------------+
//|  Версия   : 05.06.2008                                                     |
//|  Описание : Возвращает тикет ближайшей к рынку позиции по цене открытия.   |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
int TicketNearPos( string sy= "" , int op=- 1 , int mn=- 1 ) {
   double mi, p;
   int     i, k= OrdersTotal (), pp= 0 , ti= 0 ;

   if (sy== "0" ) sy= Symbol ();
   for (i= 0 ; i<k; i++) {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) {
       if ((OrderSymbol()==sy || sy== "" ) && (op< 0 || OrderType()==op)) {
         if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
           if (mn< 0 || OrderMagicNumber()==mn) {
             if (OrderType()==OP_BUY)  mi=MarketInfo(OrderSymbol(), MODE_ASK);
             if (OrderType()==OP_SELL) mi=MarketInfo(OrderSymbol(), MODE_BID);
            p=MarketInfo(OrderSymbol(), MODE_POINT);
             if (p== 0 ) if ( StringFind (sy, "JPY" )< 0 ) p= 0.0001 ; else p= 0.01 ;
             if (pp== 0 || pp> MathAbs (OrderOpenPrice()-mi)/p) {
              pp= MathAbs (OrderOpenPrice()-mi)/p;
              ti=OrderTicket();
            }
          }
        }
      }
    }
  }
   return (ti);
}
 
MakarFX # :

그리고 그것을 고친다

MakarFX # :

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

당신은 확인할 수 있습니다

그리고 그렇게

좋은 하루 마카르!!!

다음은 최소 및 최대 주문을 마감하는 논리가 명확해지는 두 개의 코드 섹션입니다. 즉, "주문 그리드의 감소가 특정 수준을 초과하면 지정된 수준 이상의 이익으로 그리드의 최소 및 최대 주문을 마감합니다." .

다음글 "드로우다운이 일정 수준 이하로 떨어지면 손실이 있는 모든 주문에 대해 이익이 있는 모든 주문을 평균화하는 원칙으로 돌아간다"

다음 "드로다운이 일정 수준 이하로 내려가지 않았다면 일정 수익에 도달하면 다음 최소 주문과 최대 주문을 다시 청산합니다."

이제 어드바이저는 드로다운을 초과하면 최소 이익과 최대 주문이 채워지고 어드바이저는 첫 번째 쌍을 원래대로 마감하지만 나머지는 모두 동일한 가격으로 이익 계산을 무시한다는 것을 이해합니다.

내가 이해하는 한, OrderClose() 함수가 제 시간에 멈추도록 수정해야 합니다. 미리 감사합니다!!!!

 if (CountTrade() < MaxOrders)                                                           
       {
           int order_type = FindLastOrderType();
           if (order_type == OP_BUY)
           { 
              price = FindLastOrderPrice(OP_BUY);  
               if (Ask<= price - Step()* Point )
              {
                  lastlot = NormalizeDouble (GetMinLotOrder()* MathPow ( MultiplierParameter, OrdersTotal ()), 2 );
                  ticket = OrderSend ( Symbol (), OP_BUY, lastlot, Ask, slip, 0 , 0 , "Групповой ордер" , Magic, 0 , Blue);
                   if (ticket < 1 )
                       Print ( "Ошибка ордера на покупку" );
                  ModifyOrders(OP_BUY);
              }
           }
             if (order_type == OP_SELL)
           { 
              price = FindLastOrderPrice(OP_SELL);  
               if (Bid>= price + Step()* Point )
              {
                  lastlot = NormalizeDouble (GetMinLotOrder()* MathPow ( MultiplierParameter, OrdersTotal ()), 2 );
                  ticket = OrderSend ( Symbol (), OP_SELL, lastlot, Bid, slip, 0 , 0 , "Групповой ордер" , Magic, 0 , Red);
                   if (ticket < 1 )
                       Print ( "Ошибка ордера на продажу!" );
                  ModifyOrders(OP_SELL);
              }
           }
         } 
         double op = CalculiteProfit(); 
         if (op > ProfitMinMaxOrders && Drawdown > DrawdownClosingMinMaxOrders)
           {
           ClosseMinMaxOrders();
           } 

//+----------------------------------------------------------------------------+
//| Калькуляция профита максимального и минимального ордера в сетке            |
//+----------------------------------------------------------------------------+
double CalculiteProfit()
{
     double AmountMinMaxProfit = 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 || OrderType() == OP_SELL)
          {
            AmountMinMaxProfit = GetProfitMinOrder() + GetProfitMaxOrder();
          }
        }
      }
    }
     return (AmountMinMaxProfit);
}
//+----------------------------------------------------------------------------+
//| Закрытие минимального и максимального ордеров                              |
//+----------------------------------------------------------------------------+
void   ClosseMinMaxOrders()
{
   int slipp = ( int ) MarketInfo( _Symbol , MODE_SPREAD )* 2 ;
   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)
          {
         if (OrderClose(GetTicketMinOrder(), GetMinLotOrder(), Bid, slipp) && OrderClose(GetTicketMaxOrder(), FindLastLots(), Bid, slipp))
             Print ( "Максимальный и минимальный ордера на покупку успешно закрыты!" );
         else
               Print ( "Не удалось закрыть максимальный и минимальный ордера на покупку!" , GetLastError ());
          }   
   
         if (OrderType() == OP_SELL)
         {
         if (OrderClose(GetTicketMinOrder(), GetMinLotOrder(), Ask, slipp) && OrderClose(GetTicketMaxOrder(), FindLastLots(), Ask, slipp))
             Print ( "Максимальный и минимальный ордера на продажу успешно закрыты!" );
         else
               Print ( "Не удалось закрыть максимальный и минимальный ордера на продажу!" , GetLastError ());
         }
       } 
     }
  }
}


 
안녕하세요! 너무 원시적인 질문에 대해 죄송합니다. 하지만 세입자 고문의 연락처는 어디에서 찾을 수 있습니까? 또는 어드바이저를 구입/대여한 사람에게 연락하는 방법은 무엇입니까?
 
Oleksandr Nozemtsev # :
안녕하세요! 너무 원시적인 질문에 대해 죄송합니다. 하지만 세입자 고문의 연락처는 어디에서 찾을 수 있습니까? 또는 어드바이저를 구입/대여한 사람에게 연락하는 방법은 무엇입니까?

안 돼요. 제품 토론 탭에서 대화를 나눌 수 있습니다. 해당 탭에서 뉴스를 게시할 수 있습니다.

 
Vladimir Karputov # :

안 돼요. 제품 토론 탭에서 대화를 나눌 수 있습니다. 해당 탭에서 뉴스를 게시할 수 있습니다.

고맙습니다!

 
안녕하세요.
mt5에서 따옴표를 어디에서 청소하는지 알려주십시오.
그리고 모든 것을 지우지 않고 고대만 지울 수 있습니까?
 
Roman Kutemov # :
안녕하세요.
mt5에서 따옴표를 어디에서 청소하는지 알려주십시오.
그리고 모든 것을 지우지 않고 고대만 지울 수 있습니까?
C:\MetaTrader5\bases\MetaQuotes-Server\history
 
EVGENII SHELIPOV # :

좋은 하루 마카르!!!

나는 당신에게 다른 기능을 주었다 ... 아무것도 추가 할 필요가 없습니다

 //+----------------------------------------------------------------------------+
//| Закрытие минимального и максимального ордеров                              |
//+----------------------------------------------------------------------------+
void   ClosseMinMaxOrders()
{
   int slipp = ( int ) MarketInfo( _Symbol , MODE_SPREAD )* 2 ;
   for ( int i = OrdersTotal ()- 1 ; i>= 0 ; i--)
  {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES))
     {
       if (OrderSymbol() == Symbol () && OrderMagicNumber() == Magic)
        {
         if (OrderClose(GetTicketMinOrder(), GetMinLotOrder(), Bid, slipp) && OrderClose(GetTicketMaxOrder(), FindLastLots(), Bid, slipp))
             Print ( "Максимальный и минимальный ордера на покупку успешно закрыты!" );
         else
             Print ( "Не удалось закрыть максимальный и минимальный ордера на покупку!" , GetLastError ());
       } 
     }
  }
}

아니면 옮기셔도 되고...

 //+----------------------------------------------------------------------------+
//| Закрытие минимального и максимального ордеров                              |
//+----------------------------------------------------------------------------+
void   ClosseMinMaxOrders()
{
   int slipp = ( int ) MarketInfo( _Symbol , MODE_SPREAD )* 2 ;
   if (CalculiteProfit() > ProfitMinMaxOrders && Drawdown > DrawdownClosingMinMaxOrders)
  {   
     for ( int i = OrdersTotal ()- 1 ; i>= 0 ; i--)
     {
         if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES))
        {
           if (OrderSymbol() == Symbol () && OrderMagicNumber() == Magic)
           {
             if (OrderClose(GetTicketMinOrder(), GetMinLotOrder(), Bid, slipp) && OrderClose(GetTicketMaxOrder(), FindLastLots(), Bid, slipp))
               Print ( "Максимальный и минимальный ордера на покупку успешно закрыты!" );
             else
               Print ( "Не удалось закрыть максимальный и минимальный ордера на покупку!" , GetLastError ());
          } 
        }
     }
  }   
}
 
MakarFX # :

나는 당신에게 다른 기능을 주었다 ... 아무것도 추가 할 필요가 없습니다

아니면 옮기셔도 되고...

아무것도 바뀌지 않았다