포럼을 어지럽히 지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 6. - 페이지 899

 
동료 프로그래머 여러분, 로봇을 위한 코드 작성을 도와달라는 매우 큰 요청입니다! 로봇은 두 가지 이동 평균에서 거래합니다. 크로싱은 포지션을 열고 역 크로싱에서 포지션 을 닫습니다. 그러나 반대 교차로에서 필요합니다. 닫는 것, 다른 것을 여는 것. 즉, 매수를 마감한 후 즉시 매도를 개시해야 하며 그 반대도 마찬가지입니다!!!
파일:
 
lufer :
감사합니다. 하지만 Mas[N]과 함께; OnInit()에서 작동하지 않음, 이미 시도됨
글쎄요, 죄송합니다. 어제 제 정신이 아니었어요. 또는 매우 냉정하지 않습니다.
 
AlexeyVik :
글쎄요, 죄송합니다. 어제 제 정신이 아니었어요. 또는 매우 냉정하지 않습니다.
)), 그것은 일어난다
 

또 다른 질문이 있습니다. 첫 번째 형성된 막대(1번)부터 시작하여 각 막대의 표시기(예: ATR)에서 가져온 데이터로 배열을 채우고 싶다고 가정해 보겠습니다. 즉, 배열이 선언되고 이미 시작 함수에서 초기화가 수행되고 있습니다. 제대로 하는 방법?

이 같은?:

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

{

매스[i]=iATR(NULL,0,1,i+1);

}

또는 다음을 통해 수행하십시오.

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

{

배열 채우기(Mas,i,1, iATR (NULL,0,1,i+1));

}

아니면 완전히 다른 방식으로?, 내가 어떤 식으로든 성공하지 않을 때까지(, 어떤 식으로든 내가 엉망이 되고, 말해줘, 미리 감사합니다.

 
lufer :

또 다른 질문이 있습니다. 첫 번째 형성된 막대(1번)부터 시작하여 각 막대의 표시기(예: ATR)에서 가져온 데이터로 배열을 채우고 싶다고 가정해 보겠습니다. 즉, 배열이 선언되고 이미 시작 함수에서 초기화가 수행되고 있습니다. 제대로 하는 방법?

이 같은?:

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

{

Mas[i]=iATR(NULL,0,1, i+1 );

}


첫 번째 옵션으로 충분합니다. 그러나 첫 번째 막대부터 시작하는 값이 필요한 경우 1부터 주기를 계산하는 것이 더 합리적입니다.
 
evillive :
첫 번째 옵션으로 충분합니다. 그러나 첫 번째 막대부터 시작하는 값이 필요한 경우 1부터 주기를 계산하는 것이 더 합리적입니다.
예, 1과 0을 모두 시도했지만 여전히 문제가 있습니다. 값이 기록되지 않고 일부를 표시하도록 요청할 때 0만 표시됩니다.
 
lufer :
예, 1과 0을 모두 시도했지만 여전히 문제가 있습니다. 값이 기록되지 않고 일부를 표시하도록 요청할 때 0만 표시됩니다.
출금 요청 코드를 보여주세요.
 
evillive :
출금 요청 코드를 보여주세요.

만일을 대비하여 전체 코드를 보여드리겠습니다.

 //+------------------------------------------------------------------+

extern int     N        = 100 ;                       // Количество баров

       int     Mas[];                             // Объявление массива

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+

int OnInit ()
  { 
     ArrayResize (Mas,N, 0 );                 // Установка размера массива      
  }

//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+

void OnDeinit ( const int reason)
  {

  }

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+

void OnTick ()
  {                                       
   for ( int i= 0 ; i<N; i=i++)                     // Цикл записи данных
     {                      

          Mas[i]= iATR ( NULL , 0 , 1 ,i+ 1 );           // Вычисление значений          
     }
       Alert (Mas[ 0 ], "," ,Mas[ 50 ], "," ,Mas[ 99 ]);       // Вывод на экран
   return ;                                           // Выход из start
  }
//+------------------------------------------------------------------+

 

SRC를 사용하여 코드 붙여넣기

 
lufer :

만일을 대비하여 전체 코드를 보여드리겠습니다.


double 형식의 배열을 만듭니다.
 
evillive :
double 형식의 배열을 만듭니다.
이것은 문제를 해결하지 못합니다. 이제 OnTick ()에서 뭔가 잘못된 것을 보는 것이 이상합니다. 어드바이저를 터미널 창에 로드할 때 아무 일도 일어나지 않고 삭제하려고 할 때 터미널이 매우 오랫동안 죽습니다. 시간이 지난 후에야 삭제됩니다. 여러 요소에 수동으로 값을 할당 하려고 시도했지만 모든 것이 정상입니다. 분명히 배열 초기화 주기와 관련된 것입니다.