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

 

안녕하세요!

차트를 강제로 다시 그리는 방법(기능의 아날로그 - 차트를 마우스 오른쪽 버튼으로 클릭 - "새로 고침").

아래 코드가 작동하지 않으면 업데이트가 이루어지지 않습니다.


void OnStart()
  {
   long currChart, prevChart = ChartFirst();
   int z = 0, limit = 100;
   while(z < limit && !IsStopped())
     {
      currChart = ChartNext(prevChart);
         ChartRedraw(currChart);
      if(currChart == 0)
         break;
      prevChart = currChart;
      z++;
     };
   ChartRedraw(0);
  }
 

무료 전문가 조언을 MQL5에 다운로드하고 싶습니다. 전문가 고문으로 이동한 다음 무료 전문가 고문으로 이동합니다. 질문: "무료" 섹션에 있는 모든 Expert Advisor를 실제 계정에서 사용할 수 있나요, 아니면 제한이 있나요? Expert Advisor에 다음과 같이 표시되어 있으면

"이미 구매함"이라고 표시되어 있으면 실제 계정에 넣을 수 있나요?

 
mikhail2929 Кравченко 실제 계정의 "무료" 섹션에 있는 모든 Expert Advisor를 사용할 수 있나요, 아니면 제한이 있나요? Expert Advisor에 다음과 같이 표시되어 있는 경우

"이미 구매함"이라고 표시되어 있으면 실제 계정에 넣을 수 있나요?

안녕하세요! 무료 전문가 어드바이저를 다운로드했는데 이미 구매했다는 정보가 있으면 사용할 수 있습니다. 문제는 다른 것입니다. 얼마나 신뢰할 수 있는가? 이를 위해 실제 계정에서 사용하기 전에 Expert Advisor를 테스트하는 것이 좋습니다!

안부, 블라디미르.

 
MrBrooklin #:

안녕하세요! 무료 Expert Advisor를 다운로드하고 이미 구매했다는 정보가 있는 경우 사용할 수 있습니다. 문제는 다른 것입니다. 얼마나 신뢰할 수 있는가? 이를 위해 실제 계정에서 사용하기 전에 전문가 어드바이저를 테스트하는 것이 가장 좋습니다 !

안부, 블라디미르.

블라디미르 감사합니다. 테스트와 최적화가 필요하다는 것을 이해합니다. 즉, "무료" 섹션에 있는 모든 Expert Advisor를 다운로드하여 설치하면 제한 없이 실제 계정에서 사용할 수 있습니다. 제가 올바르게 이해했나요?

 
안녕하세요, 도움을 찾고 있습니다. MT5 Expert Advisor를 작성할 때 CTrade 클래스를 사용하여 TP와 SL을 수정합니다. 문제는 TP가 변경된 후 위치가 처음에 TP와 SL로 설정되지만 SL은 그대로 유지되어야하며 구현할 때 다음과 같이 밝혀 졌다는 것입니다:
 for(int i = 0; i <= PositionsTotal(); i++)
      if(a_position.SelectByIndex(i))
         if(a_position.Magic() == MagicNumber && a_position.Symbol() == a_symbol.Name())
            if(PositionGetString(POSITION_COMMENT) == Comment_2)
              {
                  if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY && PositionGetDouble(POSITION_TP) != TP_Buy)
                  a_trade.PositionModify(PositionGetInteger(POSITION_TICKET),PositionGetDouble(POSITION_SL),TP_Buy);

                  if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL && PositionGetDouble(POSITION_TP) != TP_Sell)
                  a_trade.PositionModify(PositionGetInteger(POSITION_TICKET),PositionGetDouble(POSITION_SL),TP_Sell);
              }

TP_Buy 및 TP_Sell이 올바르게 계산됩니다. 테스터에서는 오류 4756이 발생합니다. CTrade::OrderSend: 포지션 #4 GBPUSD 수정 (sl: 1.35950, tp: 1.34860) [잘못된 스탑] 실패 수정 #4 매도 0.05 GBPUSD sl: 1.35950, tp: 1.34860 -> sl: 1.35950, tp: 1.34860 [잘못된 스탑]. SL 설정의 오류라고 알고 있는데, 아마도 SL이 같은 위치에 있기 때문에 오류가 발생한 것 같습니다. 하지만 이것이 제가 필요한 것입니다. CTrade 매뉴얼에는 "변경이 필요하지 않은 경우 이전 값"이라고 기록되어 있습니다. 오류를 극복하는 방법을 알려주세요.

 
mikhail2929 Кравченко #:

블라디미르 감사합니다. 테스트와 최적화가 필요하다는 것을 이해합니다. 즉, "무료" 섹션에 있는 모든 Expert Advisor는 제한 없이 실제 계정에서 작업하기 위해 다운로드하여 설치할 수 있습니다. 제가 올바르게 이해했나요?

앞서 질문에 이미 답변한 것 같습니다. 예, 올바르게 이해하셨습니다.

감사합니다, 블라디미르.

 
rexMetaL Expert Advisor를 작성할 때 CTrade 클래스를 사용하여 TP와 SL을 수정합니다. 문제는 TP가 수정 된 후 처음에 위치가 TP와 SL로 설정되지만 SL은 그대로 유지되어야하며 구현할 때 :

TP_Buy 및 TP_Sell이 올바르게 계산됩니다. 테스터에서는 오류 4756이 발생합니다. CTrade::OrderSend: 포지션 #4 GBPUSD 수정 (sl: 1.35950, tp: 1.34860) [잘못된 스탑] 실패 수정 #4 매도 0.05 GBPUSD sl: 1.35950, tp: 1.34860 -> sl: 1.35950, tp: 1.34860 [잘못된 스탑]. SL 설정의 오류인 것으로 알고 있는데, 아마도 SL이 같은 위치에 있기 때문에 오류가 발생한 것 같습니다. 하지만 이것이 제가 필요한 것입니다. CTrade 매뉴얼에는 "변경이 필요하지 않은 경우 이전 값"이라고 기록되어 있습니다. 오류를 극복하는 방법을 알려주세요.

안녕하세요!

우선 루프에서 등호를 제거하여 다음과 같이됩니다:

for(int i = 0; i < PositionsTotal(); i++)

나는 당신의 코드를 더 이상 보지 않았습니다.

안부, 블라디미르.

 
MrBrooklin #:

안녕하세요!

먼저 루프에서 등호를 제거합니다:

코드를 더 자세히 살펴보지 않았습니다.

감사합니다, 블라디미르.

변경된 사항은 없으며, 특히 SL/TP에 문제가 있습니다.
 for(int i = 0; i < PositionsTotal(); i++)
      if(a_position.SelectByIndex(i))
         if(a_position.Magic() == MagicNumber && a_position.Symbol() == a_symbol.Name())
            if(PositionGetString(POSITION_COMMENT) == Comment_2)
              {
                  if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY && PositionGetDouble(POSITION_TP) != TP_Buy)
                  a_trade.PositionModify(PositionGetInteger(POSITION_TICKET),PositionGetDouble(POSITION_SL),TP_Buy);

                  if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL && PositionGetDouble(POSITION_TP) != TP_Sell)
                  a_trade.PositionModify(PositionGetInteger(POSITION_TICKET),PositionGetDouble(POSITION_SL),TP_Sell);
              }
 
MrBrooklin #:

안녕하세요!

우선, 루프에서 등호를 제거하여 다음과 같이 표시되도록 합니다:

코드를 더 이상 살펴보지 않았습니다.

감사합니다, 블라디미르.

시간 내주셔서 감사합니다. 상품별로 SL/TP를 간단히 반올림하여 문제를 해결했습니다. SL/TP를 인디케이터에서 가져왔기 때문에 오류가 발생했습니다.

감사합니다.

 
mikhail2929 크라브첸코 #:

블라디미르 감사합니다. 테스트와 최적화가 필요하다는 것을 이해합니다. 즉, "무료" 섹션에 있는 모든 전문가 어드바이저를 다운로드하여 설치하면 제한 없이 실제 계정에서 작업할 수 있습니다. 제가 올바르게 이해했나요?

하지 않는 것이 좋습니다 :)

사유: