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

 
7777877 :

다시 말해서, 내가 올바르게 이해한다면: 어떤 배열(시계열 배열 포함)에 상관없이 ArrayCopy 함수를 사용하여 USER 배열에 복사합니다. 이 사용자 배열이 시계열 배열이 되려면 "처리"해야 합니다. set 매개변수 값이 true인 ArraySetAsSeries 함수로?

바로 그거죠
 

친애하는 프로그래머. 코드 작성을 도와주세요. 이 원칙에 따라 - BUY 신호 - 포지션을 엽니다 BUY 1 .SL.TP. 손익분기점으로 이전

매도 신호 - 매도 포지션을 엽니다. 1. SL.TP. 손익분기점으로 이전합니다. BUY 신호 - 열린 위치 BUY 1 및 SELL 1이 있는 경우 BUY 2를 엽니다. SELL 신호 - 열린 위치 SELL 1 및 BUY 1이 있는 경우 SELL 2를 엽니다. BUY 신호 - 열린 위치가 있는 경우 SELL 1. BUY 1. 매도 2. 그런 다음 매도 종료 2. 매수 열기 2. 매도 신호 - 열린 포지션이 있는 경우 매수 1. 매도 1. 매수 2. 매수 매도 마감 2. 매도 개시 2. 시장은 3개 이상의 주문에서 작동하지 않아야 합니다. 누군가가 도울 수 있다면. 그럼 정말 감사합니다.

 
Sepulca :

네, 걱정마세요. 미리 설정해둔 동적배열로 여백을 두는 건가요, 아니면 메모리가 부족한 건가요?

제 기억력은 괜찮지만 여기서 중요한 것은 그게 아닙니다. :)

잠재적으로 엄청난 수의 요소 배열을 설정하는 요점은 무엇입니까? 옵션으로 요소가 몇 배나 적다면?

결국 어레이를 생성하면 이미 RAM의 일부를 차지합니다.

 
ilunga :
바로 그거죠

스크립트를 약간 수정했습니다.

 //+------------------------------------------------------------------------------------------+
//|                                                                     ArraySetAsSeries.mq4 |
//+------------------------------------------------------------------------------------------+
//|                         script program start function                                    |
//+------------------------------------------------------------------------------------------+
//------------------------------------ НАЧАЛО START -------------------------------------- 1 -
int start()                                                               //функция start
  {                                                                       //начало start
   double Timestart= GetTickCount ();                                       //переменная, с помощью которой вычисляется время (в милисекундах) начала выполнения скрипта
   double array1[][ 6 ];                                                   //объявляем массив-источник (массив, из к-о будут скопированы данные)
   double array2[][ 6 ];                                                   //объявляем массив-приемник (массив, куда будут скопированы данные), к-й на
                                                                         //момент объявления заполнен некоторыми данными
   int element_1= ArrayCopyRates (array1);                                 //копируем данные баров текущего графика в массив array1 
   int element_2= ArrayCopy (array2,array1, 0 , 0 , WHOLE_ARRAY );               //копируем данные всех баров в пользовательский массив
   bool element_3= ArrayGetAsSeries (array2);                               //проверка: является ли массив array1 массивом-таймсерией
   bool try_1= ArraySetAsSeries (array2,false);                             //устанавливаем НАПРАВЛЕНИЕ индексирования массива  
   bool element_4= ArrayGetAsSeries (array2);                               //проверка: является ли массив array2 массивом-таймсерией
   double element=array2[ 0 ][ 1 ];                                           //получаем значение цены открытия нулевого бара
//----------------------------------------------------------------------------------------- 2 -
   Comment ( "\nФункция ArrayCopyRates(array1) вернула: " ,element_1,
           "\nФункция ArrayCopy(array2,array1,0,WHOLE_ARRAY) вернула: " ,element_2,
           "\nФункция ArrayGetAsSeries(array2) вернула: " ,element_3,
           "\nФункция ArraySetAsSeries(array2;false) вернула: " ,try_1,
           "\nФункция ArrayGetAsSeries(array2) вернула: " ,element_4,
           "\nЦена открытия нулевого бара (т.е. бара с ИНДЕКСОМ 0) равна: " ,element,
           "\nСкрипт выполнялся всего " , GetTickCount ()-Timestart, " миллисекунд, из них: " ,
           MathFloor (( GetTickCount ()-Timestart)/ 1000 ), " секунд " ,(( GetTickCount ()-Timestart)/ 1000 - MathFloor (( GetTickCount ()-Timestart)/ 1000 ))* 1000 ,
           " миллисекунд" ); //печать сообщения на экран
//----------------------------------------------------------------------------------------- 3 -
   return ( 0 );                                                             //выход из start
  }                                                                       //конец start
//-------------------------------------- КОНЕЦ START -------------------------------------- 4 -

결과적으로 다음과 같이 받았습니다.


당연히 바로 의문이 생겼습니다. 이 경우 ArrayCopyRates(array1) 함수를 사용하여 현재 차트의 막대 데이터를 2차원 배열 array1에 복사했습니다. 그 후 다음 줄에서 ArrayCopy(array2,array1,0,0,WHOLE_ARRAY) 함수를 사용하여 array1 배열의 데이터를 array2 배열에 복사했습니다. 그런 다음 ArrayGetAsSeries 함수를 사용하여 array2 배열이 시계열 배열인지 확인했습니다. 그리고 이전에 ArraySet etAsSeries 함수로 "처리"하지 않았지만 배열이 여전히 시계열 배열인 것으로 나타났습니다(스크린샷에서 볼 수 있듯이).

질문 : 첫 번째 경우(이전 질문) Array S etAsSeries 함수에 의한 처리가 필요한 이유(검색된 배열이 시계열 배열로 구성되도록) 이 경우에는 그러한 처리가 필요하지 않습니다.

피. 에스. 계속해서 죄송합니다. "역사에 공백"이 남지 않도록 완전히 이해하고 싶습니다. 이전의 모든 답변에 감사드립니다.

 

못알아듣거나 멍청해서....

이론상으로는 0.3이어야 하지만 어떤 이유로 0.00 ....

   Comment ( 3 / 10 );

또한 0을 제공합니다 ... 그래서 어떻게 분수를 얻습니까?????

 int start()
  {
double t;
t= 3 / 10 ;
   Comment (t);

   return ( 0 );
  }

같은 제로...

더 이상 어떤 탬버린을 가지고 뛰어야 할지 모르겠어.......

 
VOLDEMAR :

못알아듣거나 멍청해서....

이론상 0.3이어야 하지만 어떤 이유로 0.00 ....

또한 0을 제공합니다 ... 그래서 어떻게 분수를 얻습니까?????

같은 제로...

더 이상 어떤 탬버린을 가지고 뛰어야 할지 모르겠어.......

4-5시간 동안 하루에 3번 문서를 읽으십시오. 그리고 나서야 탬버린으로 점프합니다.

3.0/10.0

 

이유를 짐작할 수 없습니까???

어쩌면 적절한 튜토리얼을 만들 가치가 있습니까???

적절한 훈련을 할 수 있습니까???

일반적으로 어디에 이런 것들을 쓸 수 있나요???

그러면 질문이 사라질까요???

그리고 다음 100500 번째 어리석음에 대답하지 않아도됩니다 !!!

그런 질문이 있다면 공부하는 사람의 잘못이 아니라 당신의 잘못입니다!!! 당신은 그것을 어디에도 설명하지 않았습니다!

이것은 도움말에 작성되지 않았으며 int에서 double로 변환하는 방법도 작성되지 않았습니다.

그러나 int에 double 유형의 값을 할당하면 소수 부분이 삭제되고,

정상적인 사람은 사물의 논리에 따라 int를 double에 할당할 때 주어진 수의 0이 있는 점만 추가된다는 논리적인 아이디어를 받게 됩니다.

기본적으로 이런게....

 
Roger :

바꾸다


정말 감사합니다, 노력하겠습니다!
 
VOLDEMAR :

이유를 짐작할 수 없습니까???
어쩌면 적절한 튜토리얼을 만들 가치가 있습니까???
적절한 훈련을 할 수 있습니까???


이 질문들은 나를 위한 것이 아닙니다. 나는 사용자입니다. 너 같이.

일반적으로 어디에 이런 것들을 쓸 수 있나요???

글쎄, 나는 그것이 쓰여진 곳을 보여 주었다.

그러면 질문이 사라질까요???

아니요. 그들은 사라지지 않을 것입니다. 날 믿어.

그리고 당신은 다음 100500 번째 어리석음에 대답하지 않아도됩니다 !!!
그런 질문이 있다면 공부하는 사람의 잘못이 아니라 당신의 잘못입니다!!! 당신은 그것을 어디에도 설명하지 않았습니다!

이 질문들은 나를 위한 것이 아닙니다. 나는 사용자입니다. 너 같이.

이것은 도움말에 작성되지 않았으며 int에서 double로 변환하는 방법도 작성되지 않았습니다.
그러나 int에 double 유형의 값을 할당하면 소수 부분이 삭제되고,

정상적인 사람은 사물의 논리에 따라 int를 double에 할당할 때 주어진 수의 0이 있는 점만 추가된다는 논리적인 아이디어를 받게 됩니다.


글쎄요. 할당은 양방향으로 작동합니다.

그러나 당신은 당신의 논리를 더 이상 포함하지 않았습니다.

논리적으로 원했기 때문에 한 번에 두 가지 작업을 수행할 수 없었습니다. 그리고 먼저 더블에 숫자를 할당해야 했습니다. 그런 다음이 두 배를 다른 숫자로 나눕니다. 그러면 이 오류를 눈치채지 못할 것입니다. 그래서 그들은 그녀를 만났습니다. 하지만 그 반대입니다. 조만간 당신은 그녀에게 갔을 것입니다.

사유: