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

 
Link_x :

그리고 실제로 기능을 뼈대로 분해하면 헛되이 기능 헤더를 자르면 중요한 정보가 있습니다.

마지막 열린 위치 또는 -1의 유형을 반환합니다. 즉, 닫힌 위치 가 없는 경우 함수가 호출될 때 해당 값은 = -1이 됩니다.

sy - 상품 이름(통화 쌍)

mn은 마법의 숫자입니다. -1을 설정하면 함수는 어떤 마술이든 마지막으로 닫힌 주문의 유형을 반환합니다.

 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает тип последней открытой позиции или -1               |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
 
Link_x :
한 점 한 점, 죄송합니다.
1 - 프로그래밍 천재?
2 - 솔직히 말해서, 대변 및 기타 부패 제품을 제외하고 불필요한 것은 없습니다(솔직한 의견, 논의를 시작할 준비가 되었지만 다른 주제에서 :)).
3 - 이제 모든 것이 명확해졌습니다. :)
4가 딱 맞습니다. 알아요. 나는 약간 "잘못" 말하고 "OrderSend" 기능으로 텍스트를 입력했습니다.

"Bricks of Functions Parsing" 템플릿 생성에 기여해주셔서 감사합니다. :)

1. 비꼬지 말고 하자 응? 그는 당신의 학습을 편안하고 쉽게 만들었습니다. 거기에 천재가 어디 있어?
2. 논쟁의 여지가 있습니다.
3. Nifiga는 코드의 주석으로 판단할 때 명확하지 않습니다.
4. 일어난다.

 int GetTypeLastClosePos( string sy= "" , int mn=- 1 ) {    
   datetime t;                                         // Переменная хранит время закрытия
   int       i, k= OrdersHistoryTotal (), r=- 1 ;           // Объявление переменных i - индекс k - количество ордеров в истории r - будет хранить тип ордера
   if (sy== "0" ) sy= Symbol ();                           // Если в функцию в качестве значения символа передан NULL, то будет использоваться текущий символ графика
   for (i= 0 ; i<k; i++) {                               // Цикл по истории от нуля до OrdersHistoryTotal()
       if ( OrderSelect (i, SELECT_BY_POS , MODE_HISTORY )) { // Если ордер с индексом i выбран в истории
// ---------------------- определение нужного нам ордера ордера ---------------------               
         if (( OrderSymbol ()==sy || sy== "" ) &&         // если переданный символ совпадает с символом ордера или передано значение по-умолчанию
             (mn< 0 || OrderMagicNumber ()==mn)) {       // если передано значение по-умолчанию или магик ордера равен переданному в функцию значению
             if ( OrderType ()== OP_BUY || OrderType ()== OP_SELL ) { // если это или Buy или Sell
// --------------------- определение последнего закрытого ордера --------------------               
               if (t< OrderCloseTime ()) {                       // если значение, записанное в t меньше времени закрытия ордера
                  t= OrderCloseTime ();                           // запоминаем значение времени закрытия выбранного ордера для следующего сравнения
                  r= OrderType ();                               // запоминаем тип ордера
                  }                                             // Конец блока определения времени закрытия.
               }                                               // Конец блока обработки найденного нужного ордера по типу (одного из возможных)
            }                                                   // Конец блока проверки по символу и магику
         }                                                     // Конец блока обработки выбранного ордера
      }                                                         // Идём проверять следующий ордер (если i всё ещё меньше k)
// -- после прохода в цикле по всей истории в r будет лежать тип ордера или -1 (если не нашли ничего) --               
   return (r);                                                   // возвращаем результат поиска (либо тип ордера, либо -1)
}                                                               // Аминь. 

포인트 2의 경우 예:

 int GetTypeLastClosePos( string sy, int mn) {    
   datetime t;                                         // Переменная хранит время закрытия
   int       i, k= OrdersHistoryTotal ()- 1 , r=- 1 ;         // Объявление переменных i - индекс k - количество ордеров в истории r - будет хранить тип ордера
   for (i=k; i>= 0 ; i--) {                             // Обратный цикл по истории от OrdersHistoryTotal()-1 до нуля 
       if ( OrderSelect (i, SELECT_BY_POS , MODE_HISTORY )) { // Если ордер с индексом i выбран в истории
// ---------------------- определение нужного нам ордера ордера ---------------------               
         if ( OrderMagicNumber ()!=mn) continue ;         // если магик не тот - идём выбирать следующий ордер в истории
         if ( OrderSymbol ()!=sy)       continue ;         // если переданный символ не равен символу ордера - идём выбирать следующий ордер в истории
         if ( OrderType ()> 1 )         continue ;         // если это не Buy и не Sell - идём выбирать следующий ордер в истории
// --------------------- дальше имеем выбранный нужный нам ордер --------------------        
// -------------------------- определяем время его закрытия -------------------------               
         if (t< OrderCloseTime ()) {                     // если значение, записанное в t меньше времени закрытия ордера
            t= OrderCloseTime ();                       // запоминаем значение времени закрытия выбранного ордера для следующего сравнения
            r= OrderType ();                             // запоминаем тип ордера
            }                                         // Конец блока определения времени закрытия.
         }                                             // Конец блока обработки выбранного ордера
      }                                               // Идём проверять следующий ордер (если i всё ещё больше k)
// -- после прохода в цикле по всей истории в r будет лежать тип ордера или -1 (если не нашли ничего) --               
   return (r);                                         // возвращаем результат поиска (либо тип ордера, либо -1)
}                                                     // Аминь. 

여기에는 불필요한 것이 적습니다.

 
Link_x :

다음은 사용자 정의 함수의 실제 사용 예입니다.

.
고맙습니다.
따라서 이 함수를 사용하려면 이름을 적용해야 하며 변수 "r" 자체가 이 함수의 값을 결정하도록 설정됩니다!
여기 나를 위한 작은 발견이 있습니다! ^^
다시 한 번 감사합니다, 유리님. :)


최종 설명을 위해 다음이 가능합니다.

?


귀하의 예는 정확하지 않습니다. 매개변수가 있는 함수를 호출 할 때 이러한 매개변수의 값을 쉼표로 구분된 괄호 안에 제공해야 합니다. 또한 모든 기능에 값이 할당되는 것은 아닙니다. 함수 유형이 void이면 값을 전달하지 않으며 일부 작업을 수행하거나 일부 변수를 계산하기 위한 것입니다. 후자의 경우 이 함수의 결과를 사용하려면 이러한 변수의 이름을 알아야 합니다.

 
Link_x :

if(GetTypeLastClosePos == OP_BUY)

컴파일러는 이 줄에 변수가 선언되지 않았다는 오류를 표시합니다.

최소한 다음이 필요합니다.

if(GetTypeLastClosePos() == OP_BUY)
 
artmedia70 :

포인트 2의 경우 예:

여기에는 불필요한 것이 적습니다.



어리석은 질문에 죄송하지만 마지막으로 마감된 주문을 찾기 위해 전체 기록을 삽질하는 이유는 무엇입니까? 우리는 끝에서 첫 번째를 발견하고 내가 이해하는 대로 즉시 떠났습니다.
 
Roger :


어리석은 질문에 죄송하지만 마지막으로 마감된 주문을 찾기 위해 전체 기록을 삽질하는 이유는 무엇입니까? 우리는 끝에서 첫 번째를 발견하고 내가 이해하는 대로 즉시 떠났습니다.
히스토리가 사용자가 정렬한 형식으로 저장되었을 때 여기에서 어떻게든 문제에 대한 논의가 있었습니다. 따라서 (신뢰성을 위해) 검색이 바로 그러한 것입니다.
 
artmedia70 :
히스토리가 사용자가 정렬한 형식으로 저장되었을 때 여기에서 어떻게든 문제에 대한 논의가 있었습니다. 따라서 (신뢰성을 위해) 검색이 바로 그것입니다.

사용자는 시각적 인식을 위해서만 이력을 정렬할 수 있으며, 이력의 위치 번호는 변경할 수 없습니다.
 
Roger :
사용자는 시각적 인식을 위해서만 이력을 정렬할 수 있으며, 이력의 위치 번호는 변경할 수 없습니다.

이것은 좋은 것입니다. 하지만 이곳은 한때 달랐다. 이제 나는 포럼에서 정보를 찾기 위해 올라가지 않을 것입니다. 그것은 오래전 일입니다. 그래서 나는 이런 일이 다시 일어나면 어떻게 하느냐고 자문했다. 잘못된 결과를 얻는 것보다 명령을 실행하는 것이 좋습니다.
 
Roger :
사용자는 시각적 인식을 위해서만 이력을 정렬할 수 있으며, 이력의 위치 번호는 변경할 수 없습니다.

실은 테스터에서만 100배 정도 희망할 수 있습니다.
 
TheXpert :
실은 테스터에서만 100배 정도 희망할 수 있습니다.


나는 눈치 채지 못했지만 좋아, 나는 논쟁하지 않을 것이다. 10-20의 깊이를 만드십시오. 충분해야 합니다. 그러나 전체 이야기는 ... 제 생각에는 이것은 너무 많습니다.