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

 
ksbr :
MT5에 주식(미래)을 넣어 내 자신을 테스트하고 싶습니다. 어떻게 합니까?
절대 안돼. 이 미래와 함께 DC를 찾아
 
sergeev :
절대 안돼. 이 미래와 함께 DC를 찾아

%)))이 미래에는 DC가 없습니다))) 함께 붙어 있어야합니다 ...

유감, 유감이지만 모든 것이 너무 아름답게 시작되었습니다 ...

 

모두를 환영합니다!

사람들을 도와주세요. 며칠 동안 나는 고문에서 두 가지 기능을 구현하려고 노력했습니다. 첫 번째는 마지막 거래의 이익을 결정하고 두 번째는 마지막 거래의 로트를 결정합니다.

이 사이트는 기사 및 기타 고문의 예에 따라 여러 기능을 뒤적거렸지만 결과가 없었습니다. 두 기능 모두 항상 0.00의 값을 제공합니다.

다음은 올바른 옵션에 가장 가깝다고 생각하지만 결과는 항상 0입니다.

 double LossLastPos(){
// --- определение границ требуемой торговой истории
   datetime end= TimeCurrent ();                 // текущее серверное время
   datetime start=end- PeriodSeconds ( PERIOD_D1 ); // установим начало на сутки назад
//--- запросим в кэш программы торговую историю за день
   HistorySelect (start,end);
//--- получим количество ордеров в истории
   int history_orders= HistoryOrdersTotal ();
//--- получим тикет ордера из истории, имеющего последний индекс в списке
   ulong order_ticket= HistoryOrderGetTicket (history_orders- 1 );
   if (order_ticket> 0 ) // получили в кэш исторический ордер, работаем с ним
     {
       //Получаем значение прибыли последнего ордера
       double   profit = HistoryDealGetDouble (order_ticket, DEAL_PROFIT );
       return (profit);
     }
}

같은 방법으로 로트 크기를 얻으려고 합니다.

 double   volume = HistoryDealGetDouble (order_ticket, DEAL_VOLUME );
       return (volume);

그리고 아무 일도 일어나지 않고 값은 항상 0입니다.

나 자신은 mql4에서 mql5로 전환하고 이러한 기능을 mql4로 구현하는 데 어려움이 없었지만 여기에서는 막다른 골목에 있습니다.

실제 작동하는 솔루션을 알려주세요.

 
karakos :

...

실제 작동하는 솔루션을 알려주세요.

HistoryDealGetTicket () 및 HistoryDealsTotal ()을 사용합니다.

그리고 다음을 확인하십시오.

   if ( HistorySelect (start,end))
     {
       // ...
     }
 

tol64 정말 감사합니다! 모든 것이 효과가 있었습니다.

100% 작동하는 솔루션을 게시합니다. 이 함수는 터미널 기록에서 마지막으로 마감된 위치의 이익 크기를 반환합니다.

 //+------------------------------------------------------------------+       
//|Функция возвращает профит последней позиции                       |
//+------------------------------------------------------------------+
double ProfitLastPos()
  {
// --- определение границ требуемой торговой истории
   datetime end= TimeCurrent ();                 // текущее серверное время
   datetime start=end- PeriodSeconds ( PERIOD_D1 ); // установим начало на сутки назад
//--- запросим в кэш программы торговую историю за день
   if ( HistorySelect (start,end))
     {
       //--- получим количество сделок в истории
       int history_orders= HistoryDealsTotal ();
       //--- получим тикет сделки из истории, имеющей последний индекс в списке
       ulong order_ticket= HistoryDealGetTicket (history_orders- 1 );

       if (order_ticket> 0 ) // получили в кэш историческую сделку, работаем с ней
        {
         profit= HistoryDealGetDouble (order_ticket, DEAL_PROFIT );
        }
     }
   return (profit);
  }

유추하여 우리는 마지막 거래의 로트 크기를 얻습니다.

 Volume = HistoryDealGetDouble (order_ticket, DEAL_VOLUME );
 
karakos :

tol64 정말 감사합니다! 모든 것이 효과가 있었습니다.

...

그리고 여전히 편집기에서 Ctrl + (영어 열기)를 누르면 깔끔한 형식의 코드를 받게 됩니다. 포럼에 예제를 업로드하기 전에 특히 중요합니다(가독성 향상). ))
 
tol64 :
그리고 여전히 편집기에서 Ctrl + (영어 열기)를 누르면 깔끔한 형식의 코드를 받게 됩니다. 포럼에 예제를 업로드하기 전에 특히 중요합니다(가독성 향상). ))
코드 양식화, 다시 한 번 감사합니다!
 

안녕하세요! 최근 MQL5를 g아 먹기 시작했습니다. 포지션을 청산하는 데 문제가 있습니다. 코드에 작성합니다. if(!m_Trade.PositionClose(_Symbol,100))//--- 현재 기호의 위치를 닫습니다. 결과 - 위치가 반대입니다! 힌트를 주시면 대단히 감사하겠습니다. 어떻게 포지션을 청산할 수 있습니까?

 
//_____________________________________________________________________________________________________________________________________________
//--------  блок работы с длинной позицией  ---------------------------------------------------------------------------------------------------
      if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
        {
                          
         if( p_close1 <  buy_stop_level   )// если бар 1 закрылся ниже уровня стоп
         {
          if(!m_Trade.PositionClose(_Symbol,100))//--- закрываем позицию по текущему символу
         {
      //--- сообщим о неудаче
      Print("Метод PositionClose() потерпел неудачу. Код возврата=",m_Trade.ResultRetcode(),
            ". Описание кода: ",m_Trade.ResultRetcodeDescription());
         }
   else
         {
       Print("Метод PositionClose() выполнен успешно. Код возврата=",m_Trade.ResultRetcode(),
            " (",m_Trade.ResultRetcodeDescription(),")");       
          }
    
     
           }          
            }
 

막대가 정지 수준 아래에서 닫힌 후 전문가 로그. 롱 포지션 = 1랏이 있었는데 숏 포지션 = 1랏이 되었습니다)

사유: