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

 
Youri Lazurenko :


완전한 코드가 없으면 도와드릴 수 없습니다. 전체 코드를 첨부하십시오(버튼을 사용하여 첨부   파일을 첨부 )

 
함수가 void OnTick()이면 다음과 같습니다.
   if (currentTime >= OpenTrade && currentTime < CloseTrade)
   {
       if (SignalBuy1() || SignalBuy2())
      { 
         if (timeBarInside != iTime ( NULL , 0 , 1 ))
         {
            OpenOrderBuy();
            PositionModifiBuy();
            CandleColor(ColorCandleBuy);
            timeBarInside = iTime ( NULL , 0 , 1 );
         }
      }
      
       if (SignalSell1() || SignalSell2()) 
      {
         if (timeBarInside != iTime ( NULL , 0 , 1 ))
         {
            OpenOrderSell();
            PositionModifiSell();
            CandleColor(ColorCandleSell);
            timeBarInside = iTime ( NULL , 0 , 1 );
         }
      }  
   }
완전한 코드는 무엇을 의미합니까? 전체 고문? 상당히 번거롭고 나머지 기능은 수정과 관련이 없습니다. 포지션을 열 때 즉시 SL과 TP를 설정할 수 있다는 것을 이해하지만, 나는 이것을 원하는데 왜 작동하지 않는지 벌써부터 궁금합니다. mql4에서 이것은 두 개의 손가락처럼 수행됩니다... 하지만 여기서는 골치 아픈 일입니다.
 

그리고 추세선 그리기로 돌아갑니다. 코드가 필요한 경우.

 bool CreateLine( string name, datetime time1, double price1, datetime time2, double price2, color clr)
{
   ObjectDelete ( 0 , name);  
      
   if ( ObjectCreate ( 0 , name, OBJ_TREND , 0 , time1, price1, time2, price2))
   {
       ObjectSetInteger ( 0 , name, OBJPROP_COLOR , clr); 
       ObjectSetInteger ( 0 , name, OBJPROP_STYLE , TrendStyle); 
       ObjectSetInteger ( 0 , name, OBJPROP_WIDTH , TrendWidth); 
      
       ChartRedraw (); 
       Sleep ( 10 );
      
       return ( true );
   }
   else 
   {
       Print ( "Ошибка в создании линии" ); 
       return ( false );
   }
}
파일:
1.png  82 kb
2.png  36 kb
 
Youri Lazurenko :

그리고 추세선 그리기로 돌아갑니다. 코드가 필요한 경우.

문서를 읽으십시오!!!

OBJ_TREND

메모

추세선의 경우 오른쪽 및/또는 왼쪽으로 연속 모드를 지정할 수 있습니다(각각 OBJPROP_RAY_RIGHT 및 OBJPROP_RAY_LEFT 속성).

이러한 속성은 기본적으로 false로 설정됩니다.

질문은 다음과 같습니다. 객체를 삭제하고 다시 생성하는 이유는 무엇입니까? 차트에 그런 개체가 없을 때만 만들기가 더 쉽겠죠? 그리고 앵커 좌표를 변경해야 하는 경우에도 개체를 삭제하고 다시 만들 필요가 없습니다.

 
Youri Lazurenko :


세 번째이자 마지막으로: 전체 코드를 첨부하십시오.

 
Alexey Viktorov :

문서를 읽으십시오!!!

이러한 속성은 기본적으로 false로 설정됩니다.

질문은 다음과 같습니다. 객체를 삭제하고 다시 생성하는 이유는 무엇입니까? 차트에 그런 개체가 없을 때만 만들기가 더 쉽겠죠? 그리고 앵커 좌표를 변경해야 하는 경우에도 개체를 삭제하고 다시 만들 필요가 없습니다.

감사합니다. 지금 살펴보겠습니다. 그리고 소중한 의견 감사합니다. 저는 프로그래머가 아니기 때문에 다른 사람의 작업을 자주 사용합니다.

 
Vladimir Karputov :

세 번째이자 마지막으로: 전체 코드를 첨부하십시오.

이미 문제를 해결했습니다. Symbol이 아닌 Ticket을 통해 수정하고 있습니다. 전체 코드가 무엇을 위한 것인지 이해가 되지 않습니다. 예를 들어 포지션을 여는 조건이 수정과 어떤 관련이 있습니까?

이제 이렇게 생겼습니다. 누군가가 도움이 될 것입니다.

 void PositionModifiSell()
{
   int     i;
   ulong   ticket;
   double sl    = 0 ; 
   double tp    = 0 ;  
   int     total = PositionsTotal ();
   
   for (i = total- 1 ; i >= 0 ; i--)
   {
       if (m_position.SelectByIndex(i))                            
      {
         if (m_position. Symbol () == Symbol () && m_position.Magic() == Magic)
         {
             if (m_position.PositionType() == POSITION_TYPE_SELL )
            {               
               if (m_position.StopLoss() == 0 && m_position.TakeProfit() == 0 )
               {
                  ticket = m_position.Ticket();
                  
                  sl = NormalizeDouble ( iHigh ( NULL , 0 , ExtrimUp()) + VS* _Point , _Digits );
                   
                   if (PriceCurrentDw1() - PriceDwHigh() < LastPriceOpenOrder() - (sp+PW)* _Point )
                  {
                     tp = NormalizeDouble (PriceCurrentDw1() - PriceDwHigh(), _Digits );
                  }
                   else
                     tp = NormalizeDouble (bid - TP* _Point , _Digits );
                  }
                  
                   if (!m_trade.PositionModify(ticket, sl, tp))
                  {
                     Print ( "Метод PositionModify() потерпел поражение. Код возврата = " , m_trade.ResultRetcode(),
                           ". Описание кода: " , m_trade.ResultRetcodeDescription());
                  }
                   else
                  {
                     Print ( "Метод PositionModify() исполнен успешно. Код возврата = " , m_trade.ResultRetcode(),
                           " (" , m_trade.ResultRetcodeDescription(), ")" );
                  }
               }
            }
         }
      }
   }
}
 
Youri Lazurenko :


도움말을 살펴보세요. 티켓과 기호로 포지션을 선택하는 것의 차이점은 무엇인가요? 실수를 피하는 데 유용합니다.

위치선택

 bool    PositionSelect (
   string   symbol     // имя инструмента
   );

메모

"상계" 위치 회계 사용( ACCOUNT_MARGIN_MODE_RETAIL_NETTING   그리고   ACCOUNT_MARGIN_MODE_EXCHANGE ) 각   상징   주어진 시간에 하나만 열 수 있습니다.   하나 이상의 결과인 위치   거래 . 현재 위치와 혼동해서는 안 됩니다.   "도구" 패널의 "거래" 탭에도 표시되는 보류 중인 주문 .

위치( ACCOUNT_MARGIN_MODE_RETAIL_HEDGING ) 의 독립적인 표시를 통해 각 기호에 대해 여러 위치를 동시에 열 수 있습니다 . 이 경우 PositionSelect는 티켓이 가장 작은 위치를 선택합니다 .

Документация по MQL5: Торговые функции / PositionSelect
Документация по MQL5: Торговые функции / PositionSelect
  • www.mql5.com
PositionSelect - Торговые функции - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Alexey Viktorov :

문서를 읽으십시오!!!

이러한 속성은 기본적으로 false로 설정됩니다.

질문은 다음과 같습니다. 객체를 삭제하고 다시 생성하는 이유는 무엇입니까? 차트에 그런 개체가 없을 때만 만들기가 더 쉽겠죠? 그리고 앵커 좌표를 변경해야 하는 경우에도 개체를 삭제하고 다시 만들 필요가 없습니다.

다시 한 번 감사합니다. 이제 선이 선처럼 되어 보기 좋습니다. 그것은 단지 ObjectDelete (0, 이름)입니다. 그렇지 않으면 그려진 선이 다시 그려지지 않으면 필요합니다. 또한 mql4에서 방금 잊었습니다.

 
Youri Lazurenko :

다시 한 번 감사합니다. 이제 선이 선처럼 되어 보기 좋습니다. 그것은 단지 ObjectDelete (0, 이름)입니다. 그렇지 않으면 한 번 그린 선은 다시 그려지지 않습니다 . 또한 mql4에서 방금 잊었습니다.

말도 안되는 소리야. 그려진 그래픽 개체가 조용히 움직입니다. 각 개체에 대한 도움말에 예가 나와 있습니다(가로선 OBJ_HLINE ).

색상, 스타일, 냄새 등 이미 그려진 개체의 속성을 변경할 수도 있습니다.
Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Типы объектов / OBJ_HLINE
Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Типы объектов / OBJ_HLINE
  • www.mql5.com
OBJ_HLINE - Типы объектов - Константы объектов - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
사유: