[경고, 주제 닫힘!] 포럼을 어지럽히지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 당신 없이는 어디에도 없습니다. - 페이지 667

 
artmedia70 :

친구, 왜 작동하지 않는지 이해할 수 없습니다.

루프에서 매직 5100이 있는 위치가 발견되면 루프는 새 반복으로 이동해야 합니다.

...하지만 이것은 일어나지 않고 매직 5100으로 선택된 위치는 가장 수익성이없는 것으로 추가 계산에 참여하기 시작합니다 ...

그리고 이것은 단지 잠금 장치입니다 ... 그리고 그에 따라 다른 잠금 장치가 설치됩니다 ...

개가 어디를 뒤졌는지 이해하는 데 도움이 ...

필요없어요. 강아지를 찾았습니다...
 

지금까지 단일 출력 값을 생성하는 간단한 함수로 작업했습니다.

함수가 여러 변수의 값을 반환할 수 있습니까? 예: Time_1, High_1, Low_1, Time_2, High_2, Low_2.

고맙습니다!

 
chief2000 :

함수가 여러 변수의 값을 반환할 수 있습니까?


함수는 하나의 매개변수만 반환할 수 있지만 아무도 함수가 start() 함수 외부에서 선언된 변수( 전역 변수 )로 작업하는 것을 금지하지 않습니다.
 
DDFedor :

함수는 하나의 매개변수만 반환할 수 있지만 아무도 함수가 start() 함수 외부에서 선언된 변수(전역 변수)로 작업하는 것을 금지하지 않습니다.


간단한 예를 들어 보겠습니다. [MA_1>=Ma_2]이면 Time_1, High_1, Low_1 값을 반환해야 합니다.

이동 평균이 교차하는 막대에 대해. start()의 이 모듈은

 
chief2000 :


오른쪽?


오른쪽. 그러나 그러한 변수의 값은 함수가 다시 호출될 때까지 관련이 있음을 명심하십시오. 따라서 변수는 함수 호출 후에 즉시 사용해야 합니다. 그러면 변수에는 이 함수 호출에 대해 계산된 값이 포함됩니다.
 
DDFedor :

오른쪽. 그러나 그러한 변수의 값은 함수가 다시 호출될 때까지 관련이 있음을 명심하십시오. 따라서 변수는 함수 호출 후에 즉시 사용해야 합니다. 그러면 변수에는 이 함수 호출에 대해 계산된 값이 포함됩니다.

네, 이해할 수 있습니다. 고맙습니다!

 
chief2000 :

지금까지 단일 출력 값을 생성하는 간단한 함수로 작업했습니다.

함수가 여러 변수의 값을 반환할 수 있습니까? 예: Time_1, High_1, Low_1, Time_2, High_2, Low_2.

그리고 함수 선언에서 값이 아닌 참조로 전달되는 매개변수를 사용하지 못하게 하는 것은 무엇입니까? 예(언어 기본/변수/형식 매개변수):

참조로 매개변수를 전달할 수 있습니다. 이 경우 이러한 매개변수의 수정은 참조로 전달된 호출된 함수의 해당 변수에 반영됩니다. 배열 요소는 참조로 전달할 수 없습니다. 참조에 의한 매개변수는 단일 모듈 내에서만 전달할 수 있으며 이 가능성은 라이브러리 함수에 대해 제공되지 않습니다. 매개변수가 참조로 전달되었음을 나타내려면 데이터 유형 뒤에 & 수정자를 배치해야 합니다.

예시:

 무효 함수(int& x, double& y, double& z[])
  {
   이중 계산된_tp;
   ...
   for(int i=0; i<OrdersTotal(); i++)
     {
      if(i==ArraySize(z)) 중단;
      if(OrderSelect(i)==false) 중단;
      z[i]=OrderOpenPrice();
     }
   x=나;
   y=calculated_tp;
  }

배열은 참조로 전달할 수도 있으며 모든 변경 사항은 원래 배열에 반영됩니다. 단순 매개변수와 달리 배열은 참조 및 라이브러리 함수에 전달할 수 있습니다.

func() 함수는 void 유형이지만 실행 결과 외부에 선언된 세 매개변수 모두 변경됩니다. 세 가지 모두 & 수정자와 함께 제공됩니다. 덧붙여서 z[] 배열이 완전히 변경되었습니다.
 
Mathemat :

그리고 함수 선언에서 값이 아닌 참조로 전달되는 매개변수를 사용하지 못하게 하는 것은 무엇입니까? 예(언어 기본/변수/형식 매개변수):

func() 함수는 void 유형이지만 실행 결과로 외부에 선언된 세 매개변수가 모두 변경됩니다. 세 가지 모두 & 수정자와 함께 제공됩니다. 덧붙여서 z[] 배열이 완전히 변경되었습니다.

매우 감사합니다!

 
그렇게 하는 방법! 마지막 거래가 수익성이 없으면 로트를 변경해야합니다. 그렇지 않은 경우 아니요)?
 
rovlent :
그렇게 하는 방법! 마지막 거래가 수익성이 없으면 로트를 변경해야합니다. 그렇지 않은 경우 아니요)?


예를 들어 다음과 같이

 //=================================================
// Расчет размера позиции
//==================================================
double CalculateLots(){
   double Res=dLots;
   bool bProfit= true ;
   int PrevTime=- 1 ;
   double tmpLots;
   for ( int i= 0 ;i<OrdersHistoryTotal();i++){
       if (!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) continue ;
       if (OrderSymbol()!=Symbol())                     continue ;
       if (OrderMagicNumber()!=MAGIC)                   continue ;
       if (OrderCloseTime()<PrevTime)                   continue ;
      PrevTime=OrderCloseTime();
       if (OrderProfit()> 0 ) bProfit= true ; else bProfit= false ;
      tmpLots=OrderLots();
   }
   double Lots_Step=MarketInfo(Symbol(), MODE_LOTSTEP);
   if (!bProfit) Res=tmpLots+Lots_Step;
   return (Res);
}

DC에서 설정한 스텝만큼 증가합니다. 옵션이 다를 수 있지만

dLots - 기본 위치 크기