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

 
silhouette :

처음으로 다차원 배열을 다루기 때문에 브레이크를 밟지 마십시오. :)

다차원 배열을 다른 것으로 상상하면 방향이 더 쉬울 것입니다. 즉, 배열의 본질을 반영하는 모델을 찾으면 모델을 눈앞에 두기가 더 쉽습니다.

1차원 배열은 선(0에서 시작하는 좌표 광선)에 있는 객체입니다. 이러한 배열의 예는 상점의 대기열입니다. 줄의 첫 번째 사람은 지금 구매하는 사람 바로 뒤에 있는 사람입니다. 구매자는 라인의 첫 번째라고 할 수 없습니다. 그는 구매합니다. 그는 0입니다. 1차원 배열의 0 셀 내부에 있습니다.

2차원 배열은 평면(좌표 평면)에 있는 객체입니다. 그 예로 강당을 들 수 있습니다. 이런 저런 행, 이런 곳. 이 모델에 0행과 0자리를 추가하면 2차원 배열의 정확한 모델을 얻을 수 있습니다.

3차원 배열은 공간(좌표 공간)에 있는 객체입니다. 객체의 좌표는 세 개의 값으로 제공됩니다. 모서리가 잘린 큐브입니다. 모델은 입구 번호 0, 층 번호 0 및 아파트 번호 0(특히)이 있는 주거용 건물일 수 있습니다. 단, 각 입구에서 아파트 번호는 0부터 시작합니다.

4 차원 배열 은 1차원 배열과 유사합니다. 이것은 모든 점이 3차원 배열인 좌표 광선입니다. 모델 - 거리. 좌표는 집 번호, 입구 번호, 층 번호, 아파트 번호와 같은 값으로 제공됩니다.

등등 n차원에서 - 거리에서 지역으로, 도시 지역에서, 지역에서 도시로, 도시에서 국가로, 국가에서 행성으로...

 
GarKain :
열린 주문이 막대의 어느 순간에 열리고 다음 막대가 다음 막대에서만 열릴 수 있도록 만드는 방법을 설명할 수 있습니까?

주문 목록을 반복합니다. 다음 주문 시작 시간이 현재 막대의 시작 시간(Time[0])보다 크거나 같으면 이 통화 쌍에 대한 시작 주문을 금지하는 플래그를 설정합니다. 다음 촛불에서 사이클은 그러한 주문이 없음을 감지하고 금지를 설정하지 않습니다. 즉, 개시 주문을 금지하는 플래그를 제거합니다.
 
drknn :

주문 목록을 반복합니다. 다음 주문의 시작 시간이 현재 막대의 시작 시간(Time[0])보다 크거나 같으면 이 통화 쌍에 대한 시작 주문을 금지하는 플래그를 설정합니다.
아아 정말 감사합니다
 
drknn, 설명 주셔서 대단히 감사합니다. 저장할게요 ;)
 
GarKain :
아아 정말 감사합니다


코드가 하나의 통화 쌍에 대해서만 작동하는 경우 라인의 다른 쌍에 대한 주문 필터링을 설정하십시오.

 if ( OrderSymbol ()!= Symbol ()){ continue ;}
 
drknn :


코드가 하나의 통화 쌍에 대해서만 작동하는 경우 라인의 다른 쌍에 대한 주문 필터링을 설정하십시오.

문제. 코드가 여러 통화 쌍과 여러 시간대에서 동시에 작동하는 경우 다른 마법 번호를 넣고 걸러낼 수 있습니까?
 

할 수 있다.

 if ( OrderMagicNumber ()!=MAGIC) { continue ;}
 
drknn :

할 수 있다.



bool 시간 = true;
if (OrdersTotal()>0){
for(int g=OrdersTotal()-1; g>=0; g--){
날짜 시간 t;
주문 선택(g, SELECT_BY_POS );
if (OrderMagicNumber()!=MagicNumber){계속;}
if (t<OrderOpenTime() || g==OrdersTotal()-1) t=OrderOpenTime();

if (t>=시간[0]) 시간=거짓;}}


이대로 맞지?

 
GarKain :

bool 시간 = true;
if (OrdersTotal()>0){
for(int g=OrdersTotal()-1; g>=0; g--){
날짜 시간 t;
주문선택(g,SELECT_BY_POS);
if (OrderMagicNumber()!=MagicNumber){계속;}
if (t<OrderOpenTime() || g==OrdersTotal()-1) t=OrderOpenTime();

if (t>=시간[0]) 시간=거짓;}}


이대로 맞지?


아니요. 각 반복에서 루프 내부에 변수를 선언할 필요는 없습니다.

 bool Torg=true;
for ( int i= OrdersTotal ()- 1 ;i>= 0 ;i--){
     if (! OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) { Print ( "Ошибка № " , GetLastError (), " при выборе ордера № " ,i);}
     else {
      if ( OrderSymbol ()!= Symbol () || OrderMagicNumber ()!=MAGIC) { continue ;} 
      if ( OrderOpenTime ()>=Time[ 0 ]){
       Torg=false;
     }
   }  
 }


// теперь используем результат работы цикла
// Если есть сигнал и торг разрешён, то открываем ордер
 
GarKain :

bool 시간 = true;
if (OrdersTotal()>0){
for(int g=OrdersTotal()-1; g>=0; g--){
날짜 시간 t;
주문 선택(g,SELECT_BY_POS);
if (OrderMagicNumber()!=MagicNumber){계속;}
if (t<OrderOpenTime() || g==OrdersTotal()-1) t=OrderOpenTime();

if (t>=시간[0]) 시간=거짓;}}


이대로 맞지?

아니요, 오류를 발견했습니다.

bool 시간 = true;
날짜/시간 t=시간[1];
if (OrdersTotal()>0){
for(int g=OrdersTotal()-1; g>=0; g--){
주문 선택(g, SELECT_BY_POS );
if (OrderMagicNumber()!=MagicNumber){계속;}
if (t<OrderOpenTime()) t=OrderOpenTime();

if (t>=시간[0]) 시간=거짓;}}


이대로 맞지?