[ARCHIVE] 포럼을 어지럽히 지 않도록 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 5. - 페이지 271

 
hoz :

나는 거기에 무엇이 있는지 이해합니다. 그러나 왜 그렇게 되었는지는 분명하지 않습니다.

라이브러리의 각 개별 기능은 전체의 일부이고 별도의 라이브러리는 내 라이브러리 전체의 일부입니다. 이러한 인식 없이는 코드를 이해할 수 없습니다.

호즈 :

원래 형식에서는 여전히 라이브러리를 사용할 수 없습니다. 모든 것이 연결되어 있습니다. 다른 팩의 각 기능..

그리고 여기 당신이 틀렸습니다. "보통" Expert Advisor의 구조에 대해 생각해 본 적이 있습니까? 어드바이저의 개성은 전략의 조건(즉, 진입/퇴장 조건)에 의해 주어지며, 그 외는 모두 표준 코드입니다. 주문을 포함하여 Expert Advisors를 생성하는 방법: 템플릿(예: 네트워크 Expert Advisor가 필요한 경우 SAR을 제공할 수 있음)을 만들고 여기에 새 전략의 조건이 포함된 추가 라이브러리를 연결합니다(I 다시 생성).

호즈 :

어떤 경우에도 확인하고 싶지 않았습니다 .. 게다가 모든 것이 매우 유능하게 작성되었다는 것은 의심의 여지가 없습니다. 다만 다 잘 이해가 안가서 옳지 않다고 생각해서 말씀드린거구요.. 보고, 생각합니다.. 하지만 다 이해가 안가네요. 그것이 그가 물은 것입니다.

추신 bs_Symbol로 나는 이해하지 못했습니다.

구현을 이해하려면 기본 데이터를 이해해야 합니다. 라이브러리는 모든 상품(Forex)과 단일 및 다중 통화 모드 모두에서 작동할 수 있는 기능으로 생성되었으므로 현재 상품의 값을 포함하는 bs_Symbol 전역 변수 가 도입되었습니다.
 
IIya :

친구! 고문을 마무리하는 데 도움이 필요합니다.

특정 if 조건에서 주문을 여는 프로그램 코드가 있습니다. 조건은 int start() 의 본문에 있으므로 매 틱마다 실행할 수 있습니다.

필요:

1. 조건을 충족한 후(그리고 주문을 연 후) 일시 중지 하여 새 주문을 열고 n개의 막대를 일시 중지합니다. 예를 들어, 고문이 M30 시간대에 있고 내가 3시간을 건너뛰어야 하는 경우 일시 중지는 6마디여야 합니다.

2. 프로그램은 전략 테스터에서 작동해야 합니다.

어떤 코드가 필요합니다. 그리고 어디에 두는 것이 가장 좋을까요?

iBarShift () 함수가 도움이 될 것입니다. 먼저 마지막 주문의 시작 시간을 찾아 이 함수에 전달한 다음 이 함수에서 반환된 값을 추적하여 일부 숫자(귀하의 경우 6)와 비교해야 합니다.
 
TarasBY :
iBarShift () 함수가 도움이 될 것입니다. 먼저 마지막 주문의 시작 시간을 찾아 이 함수에 전달한 다음 이 함수에서 반환된 값을 추적하여 일부 숫자(귀하의 경우 6)와 비교해야 합니다.

함께 알아보자)

마지막 주문의 시작 시간을 함수에 전달하고 반환된 번호를 얻습니다. 대략 다음과 같습니다.

 OrderSelect ( OrdersTotal ()- 1 ,SELECT_BY_POS,MODE_TRADES);
int my_bar = iBarShift( NULL , PERIOD_M30 ,OrderOpenTime()); 

좋아, 바 번호를 얻었다. 이제 6개의 바에 대한 주문을 열기 위해 일시 중지하는 방법은 무엇입니까?

 
IIya :

함께 알아보자)

마지막 주문의 시작 시간을 함수에 전달하고 반환된 숫자는 대략 다음과 같습니다.

좋아, 바 번호를 얻었다. 이제 6개의 바에 대한 주문을 열기 위해 일시 중지하는 방법은 무엇입니까?

다음은 문맹 퇴치 방법입니다.

 OrderSelect ( OrdersTotal ()- 1 ,SELECT_BY_POS,MODE_TRADES);

그러나 이 사건과 직접적인 관련이 없기 때문에 단순히 집중하지 않는다. 그리고 스키마는 다음과 같습니다.

     if (my_bar >= 6 )
    {
         OrderSend ();
    }
 
TarasBY :
논리에 명백한 오류가 없습니다. 코드를 단계별로 인쇄하십시오. 거래 절차는 티켓 변수의 값에 연결됩니다. 우선 변경 사항을 추적하십시오. 또한 전역 터미널 변수 "TRADECONTEXT"의 값에 주의하십시오. 값은 0과 같아야 합니다.

고맙습니다! 그러나 나는 마침내 아무 것도 이해하지 못했습니다 (((, 나는 눈먼 새끼 고양이처럼이 코드 (((...
 
al7bar :

고맙습니다! 그러나 나는 마침내 아무 것도 이해하지 못했습니다 (((, 나는 눈먼 새끼 고양이처럼이 코드 (((...
당신은 이 코드의 작성자가 아닙니다. 그러면 작성자에게 더 쉽게 연락할 수 있습니다.
 
TarasBY :

라이브러리의 각 개별 기능은 전체의 일부이고 별도의 라이브러리는 내 라이브러리 전체의 일부입니다. 이러한 인식 없이는 코드를 이해할 수 없습니다.

나는 이해하려고 노력하고 그 과정에서 다양한 뉘앙스를 발견합니다. 그게 내가 당신에게 묻는 이유입니다, 왜냐하면. 네가 더 잘 알 잖아. 작가냐...

타라스BY :

그리고 여기 당신이 틀렸습니다. "보통" Expert Advisor의 구조에 대해 생각해 본 적이 있습니까? 어드바이저의 개성은 전략의 조건(즉, 진입/퇴장 조건)에 의해 주어지며, 그 외는 모두 표준 코드입니다. 주문을 포함하여 Expert Advisors를 생성하는 방법: 템플릿(예: 네트워크 Expert Advisor가 필요한 경우 SAR을 제공할 수 있음)을 만들고 여기에 새 전략의 조건이 포함된 추가 라이브러리를 연결합니다(I 다시 생성).

이해 했어요. 나는 단지 당신의 전체 라이브러리를 복사하고 싶지 않습니다. 개인적으로 작업하기에 편리한 기초를 만드는 것이 더 편리하다는 것을 이해합니다.

타라스BY :

구현을 이해하려면 기본 데이터를 이해해야 합니다. 라이브러리는 모든 상품(Forex)과 단일 및 다중 통화 모드 모두에서 작동할 수 있는 기능으로 생성되었으므로 현재 상품의 값을 포함하는 bs_Symbol 전역 변수가 도입되었습니다.

그리고 이 변수는 비밀이 아닌 경우 명시적으로 어디에 설정되어 있습니까? :) b-PSI@Base.mqh 라이브러리에서 다음과 같이 선언되었습니다.

 bs_Symbol,                             // текущий инструмент

그러나 더 이상 아무것도 없습니다. 그리고 일반적으로 현재 계측기의 값은 일반적으로 기본적으로 Symbol() 을 통해 반환됩니다. 그렇다면 여기에 변수가 있는 이유는 무엇입니까?

 
TarasBY :

문맹 퇴치 방법은 다음과 같습니다.

그러나 이 사건과 직접적인 관련이 없기 때문에 단순히 집중하지 않는다. 스키마는 다음과 같습니다.

이제 코드가 작동합니다. 내 구현에서는 다음과 같이 밝혀졌습니다.
 int start()
  {
   if ( OrdersTotal ()< 1 )                                                 //условие
      {
         OrderSend ( Symbol (),OP_BUY, 1 ,Ask, 0 , 0 , 0 , "Order BUY" , 0 , 0 );     //открытие ордера
      }
   OrderSelect ( OrdersTotal ()- 1 ,SELECT_BY_POS,MODE_TRADES);
   int my_bar = iBarShift( NULL , PERIOD_M30 ,OrderOpenTime()); 
   if (my_bar > 6 )                                                     //если прошло 6 баров с момента открытия последнего ордера
      {
         OrderSend ( Symbol (),OP_BUY, 1 ,Ask, 0 , 0 , 0 , "Order BUY" , 0 , 0 );       //открываем новый ордер
      }
   return ( 0 );
  }

:) 하지만 지금과 같은 형태로 Expert Advisor에 구현하면 모든 것이 잘못 작동하기 시작합니다.

이 항목에서 내가 이해한 것:

 OrderSelect ( OrdersTotal ()- 1 ,SELECT_BY_POS,MODE_TRADES);

뭐가 문제 야?

 
안녕하세요. 거래를 열 때 많이 증가하는 스크립트를 작성할 수 있는 모든 사람에게 응답을 요청합니다. 세부 사항 은 개인에 씁니다 . 작업 완료 시 보상 보장
 
IIya :
이제 코드가 작동합니다. 내 구현에서는 다음과 같이 밝혀졌습니다.

:) 하지만 지금과 같은 형태로 Expert Advisor에 구현하면 모든 것이 잘못 작동하기 시작합니다.

이 항목에서 내가 이해한 것:

뭐가 문제 야?

나는 단지 도표를 그렸고 당신의 임무는 더 많은 논리를 생각하는 것이었습니다.

 int start()
{
   if ( OrdersTotal ()< 1 )                                                 //условие
      {
         OrderSend ( Symbol (),OP_BUY, 1 ,Ask, 0 , 0 , 0 , "Order BUY" , 0 , 0 );     //открытие ордера
      }
   else
   {
       OrderSelect ( OrdersTotal ()- 1 ,SELECT_BY_POS,MODE_TRADES);
       int my_bar = iBarShift ( NULL , PERIOD_M30 ,OrderOpenTime()); 
       if (my_bar >= 6 )                                                     //если прошло 6 баров с момента открытия ордера
       { OrderSend ( Symbol (),OP_BUY, 1 ,Ask, 0 , 0 , 0 , "Order BUY" , 0 , 0 );}       //открываем новый ордер
   }
   return ( 0 );
}