초보자의 질문 MQL5 MT5 MetaTrader 5 - 페이지 899

 
lil_lil :
고맙습니다.

또는 iHighest() - 이미 최신 빌드에 있습니다.

 
Ihor Herasko :

Netting 유형의 계정에서 위치와 거래는 다른 개념입니다. 이제 위치 선택을 보여주었습니다.

그리고 이 포지션에 포함된 거래를 선택하는 방법

 long ID= PositionGetInteger ( POSITION_IDENTIFIER );

 
Sile Si :

그리고 이 포지션에 포함된 거래를 선택하는 방법



 bool    HistoryDealSelect (
   ulong   ticket     // тикет сделки
   );
Документация по MQL5: Торговые функции / HistoryDealSelect
Документация по MQL5: Торговые функции / HistoryDealSelect
  • www.mql5.com
Выбирает в истории сделку для дальнейших обращений к ней  через соответствующие функции. Возвращает true при успешном завершении функции. Возвращает false при неудачном завершении функции. Чтобы получить информацию об ошибке, необходимо вызвать функцию GetLastError(). Не следует путать между собой ордера, сделки и позиции. Каждая сделка...
 
Alexey Viktorov :


감사합니다. 여러 거래가 있으므로 HistoryDealGetTicket() 을 사용 하기로 결정했습니다.

제가 다 댓글을 달았는데 이해가 안되는 부분이 있으면 알려주세요. 내가 어디에서 잘못 되었습니까?

 double Aver_Pr_nett()
  {
   double total_price_multiply_volume_sell   = 0.0 ;
   double total_volume_sell                  = 0.0 ;
   double net_price_sell_= 0.0 ;
   string symb= _Symbol ;
   int     total       = 0 ;   // 
   for ( int i= 0 ; i< PositionsTotal (); i++)
     {
       ulong pt= PositionGetTicket (i); //  тикет позиции
       long ID= PositionGetInteger ( POSITION_IDENTIFIER ); //id позиции
       if ( PositionGetString ( POSITION_SYMBOL )==symb && //символ позиции
       HistorySelect ( PositionGetInteger ( POSITION_TIME ), TimeCurrent ()+ 60 )) //промежуток времени для поиска сделок
        {
         total= HistoryDealsTotal (); //количество сделок
         
         for ( int i= 0 ; i<total; i++) // цикл по всем сделкам
           {
             ulong dt = HistoryDealGetTicket (i); //тикет сделки, возможно нужно использовать HistoryDealSelect()
             long did = HistoryDealGetInteger (dt, DEAL_POSITION_ID ); //id сделки
             ENUM_DEAL_ENTRY in_out= HistoryDealGetInteger (dt, DEAL_ENTRY ); //
             if (did==pt &&           //id сделки равно тикету позиции
            in_out== DEAL_ENTRY_IN ) //сделка открыла позицию либо добавила объём
              {
               if ( HistoryDealGetString (dt, DEAL_SYMBOL )==symb) //символ сделки равен текущему графику
                 { //дальше нахожу среднюю цену сделок
                  total_price_multiply_volume_sell+= HistoryDealGetDouble (dt, DEAL_PRICE )* HistoryDealGetDouble (dt, DEAL_VOLUME );
                  total_volume_sell+= HistoryDealGetDouble (dt, DEAL_VOLUME );
                   if (total_price_multiply_volume_sell!= 0 && total_volume_sell!= 0 )
                    {
                    net_price_sell_=total_price_multiply_volume_sell/total_volume_sell;
                    };
                 }
              }
           }
        }
     }
//---
   return (net_price_sell_);
  }

 
Sile Si :

감사합니다. 여러 거래가 있으므로 HistoryDealGetTicket() 을 사용 하기로 결정했습니다.

제가 다 댓글을 달았는데 이해가 안되는 부분이 있으면 알려주세요. 내가 어디에서 잘못 되었습니까?


내가 많이 틀렸어. 급하게 링크를 잘못올렸습니다. 나는 한 가지를 생각하고 당신에게 필요한 것을 전혀 선택하지 않았습니다.

여기에 올바른 링크가 있습니다.

Документация по MQL5: Торговые функции / HistorySelectByPosition
Документация по MQL5: Торговые функции / HistorySelectByPosition
  • www.mql5.com
Не следует путать между собой ордера из торговой истории и действующие отложенные ордера, которые отображаются на вкладке "Торговля" в панели "Инструменты". Список ордеров, которые были отменены или привели к проведению торговой операции, можно посмотреть  в закладке "История" на панели "Инструменты" клиентского терминала. Функция...
 
Alexey Viktorov :

내가 많이 틀렸어. 급하게 링크를 잘못올렸습니다. 나는 한 가지를 생각하고 당신에게 필요한 것을 전혀 선택하지 않았습니다.

여기에 올바른 링크가 있습니다.

고맙습니다.

 
그리고 iAO, iDem과 같은 표시기에 2포인트로 선을 그리는 방법은 무엇입니까? 점 X에서 선의 값을 얻습니까?
 
Сергей :
그리고 iAO, iDem과 같은 표시기에 2포인트로 선을 그리는 방법은 무엇입니까? 점 X에서 선의 값을 얻습니까?

각 표시기는 주 창 또는 하위 창에 그려집니다. 따라서 1단계: 표시기가 그려지는 하위 창의 번호를 찾습니다. 그래프 작업 을 살펴보십시오.

2단계: 하위 창 번호가 있으면 선을 그리기 쉽습니다. OBJ_TREND 도움말 및 " TrendCreate " 기능의 매개변수를 참조하십시오.

 //+------------------------------------------------------------------+ 
//| Создает линию тренда по заданным координатам                     | 
//+------------------------------------------------------------------+ 
bool TrendCreate( const long             chart_ID= 0 ,         // ID графика 
                 const string           name= "TrendLine" ,   // имя линии 
                 const int              sub_window= 0 ,       // номер подокна 
                 datetime               time1= 0 ,           // время первой точки 
                 double                 price1= 0 ,           // цена первой точки 
                 datetime               time2= 0 ,           // время второй точки 
                 double                 price2= 0 ,           // цена второй точки 
                 const color            clr= clrRed ,         // цвет линии 
                 const ENUM_LINE_STYLE style= STYLE_SOLID , // стиль линии 
                 const int              width= 1 ,           // толщина линии 
                 const bool             back= false ,         // на заднем плане 
                 const bool             selection= true ,     // выделить для перемещений 
                 const bool             ray_left= false ,     // продолжение линии влево 
                 const bool             ray_right= false ,   // продолжение линии вправо 
                 const bool             hidden= true ,       // скрыт в списке объектов 
                 const long             z_order= 0 )         // приоритет на нажатие мышью 
  { 
 
Artyom Trishkin :

또는 iHighest() - 이미 최신 빌드에 있습니다.

아, 이 새 기능이 드디어 도움말에 추가되었습니다.

 

의심할 여지 없이 si에 첨부된 EA는 vtbr을 수정합니다. 그의 악기 "si"의 따옴표에 T/P 위치를 배치합니다.

ㅋㅋㅋ

vtbr에 어드바이저를 연결하면 si를 수정하지 않고 자체 도구에서만 작동합니다.

ppv

이에 대한 설명이 있습니까?

다음을 제외하고 코드에 수정 사항이 없습니다.

   if (TakeProfit> 0 )
     {
     if (! RefreshRates ())
             return ;
       int total= PositionsTotal ();
       for ( int i=total- 1 ;i>= 0 ;i--)
        {
         if (m_position.SelectByIndex(i)) // selects the position by index for further access to its properties
           {
             if (m_position. Symbol ()== Symbol ())
              {
               //if(m_position.PositionType()==POSITION_TYPE_BUY)
               if ( PositionGetInteger ( POSITION_TYPE )== POSITION_TYPE_BUY )
                 {
                   if (m_symbol.NormalizePrice(Aver_Pr_sell_nett()+ExtTakeProfit)!=m_position.TakeProfit())
                    {
                     m_trade.PositionModify(m_position.Ticket(),
                                            m_position.StopLoss(),
                                            m_symbol.NormalizePrice(Aver_Pr_sell_nett()+ExtTakeProfit)
                                            );
                     Sleep ( 300 );

                    }
                 }
               //==//
               //if(m_position.PositionType()==POSITION_TYPE_SELL)
               else if ( PositionGetInteger ( POSITION_TYPE )== POSITION_TYPE_SELL )
                 {
                   if (m_symbol.NormalizePrice(Aver_Pr_sell_nett()-ExtTakeProfit)!=m_position.TakeProfit())
                    {
                       {
                        m_trade.PositionModify(m_position.Ticket(),
                                               m_position.StopLoss(),
                                               m_symbol.NormalizePrice(Aver_Pr_sell_nett()-ExtTakeProfit)
                                               );
                         Sleep ( 300 );
                       }
                    }
                 }
              }
           }
        }
     }
사유: