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

 

... 계속...

아래에서 StringSubstr 함수 하위 섹션 의 끝에 다음 구문이 대괄호 묶여 있습니다. 다른 곳 에서) 객체는 삭제할 수 없습니다. t .이 경우 각 삭제 후 객체의 총 수와 번호 매기기가 변경되어 일부 객체 이름을 건너뛸 수 있기 때문 입니다. 그러나 Expert Advisor의 위 텍스트에는 두 번째 for 루프가 전혀 없습니다. 또한 for 루프 이전에 deinit () 함수에서 선언한 Quant_Del 변수는 0으로 초기화되고 변수 ifor 루프 이전 어디에도 선언되지 않았습니다. 그리고 for 루프가 다음과 같이 보이기 때문에

   for ( int k= 0 ; k<=Quant_Del; i++)     // Удаляем объекты с именами,.. 
         ObjectDelete (Name_Del[i]);       // .. имеющимися в массиве

Expert Advisor의 위 텍스트에서 프로그램의 여러 행이 단순히 약간 생략되어 있음이 밝혀졌습니다.

따라서 첫 번째 질문 은 다음과 같습니다. 여기에서 몇 줄을 건너뛸 수 있습니까? 아니면 초보자가 외부의 도움 없이 그 의미를 이해할 수 없을 정도로 영리한 프로그램입니까?

더 나아가... 같은 절의 같은 장에서 Expert Advisor의 텍스트 앞에 같은 Expert Advisor에 대한 링크가 있고(첨부 파일에 제공), 클릭하면 동일한 Expert Advisor가 MetaElitor에서 열립니다 . 그러나 이 EA의 텍스트는 이미 다릅니다 . 여기서 deinit () 함수는 이미 다음과 같습니다.

 //--------------------------------------------------------------- 9 --
int deinit()                           // Спец. функция deinit()
  {
   string Name_Del[ 1 ];                 // Объявление массива
   int Quant_Del= 0 ;                     // Количество удаляемых объекто
   int Quant_Objects= ObjectsTotal ();   // Cтолько всего ВСЕХ объектов
   ArrayResize (Name_Del,Quant_Objects); // Необходимый размер массива
   for ( int k= 0 ; k<Quant_Objects; k++)   // По количеству объектов 
     {
       string Obj_Name= ObjectName (k);   // Запрашиваем имя объекта
       string Head= StringSubstr (Obj_Name, 0 , 6 ); // Извлекаем первые 6 сим
       if (Head==Prefix)                 // Найден объект, ..
        {                               // .. начинающийся с Paint_
         Quant_Del=Quant_Del+ 1 ;         // Колич имён к удалению
         Name_Del[Quant_Del- 1 ]=Obj_Name; //Запоминаем имя удаляемого
        }
     }
   for ( int i= 0 ; i<=Quant_Del; i++)     // Удаляем объекты с именами,.. 
       ObjectDelete (Name_Del[i]);       // .. имеющимися в массиве
   return ;                             // Выход из deinit()
  }
//-------------------------------------------------------------- 10 --

그런 다음 " 를 개별적으로 "결합" 하면 첫 번째 for 루프에서 개체를 삭제할 수 없다는 점에 유의해야 합니다. 일부 객체 이름은 생략됩니다 " 그리고 마지막 옵션 의 텍스트 함수 deinit (), 두 번째 질문이 있었습니다.

질문 . 함수를 배치하여 첫 번째 for 루프에서 객체를 삭제할 수 없는 이유 다음과 같은 if ?... 문 내부의 ObjectDelete(Obj_Name):

 int deinit()                           // Спец. функция deinit()
  {
   int Quant_Objects= ObjectsTotal ();   // Cтолько всего ВСЕХ объектов
   for ( int k= 0 ; k<Quant_Objects; k++)   // По количеству объектов 
     {
       string Obj_Name= ObjectName (k);   // Запрашиваем имя объекта
       string Head= StringSubstr (Obj_Name, 0 , 6 ); // Извлекаем первые 6 сим
       if (Head==Prefix)                 // Если найден объект, …
        {                              // ... начинающийся с Paint_,
         ObjectDelete (Obj_Name);       // … то его и удаляем
        }                              //конец if
     }                                 //конец for
   return ;                             // Выход из deinit()
  }                                    //конец deinit
//-------------------------------------------------------------- 10 --

개체의 총 수가 "... 각 삭제 후 변경"되는 이유는 무엇입니까?... 결국, 이 경우 개체의 총 수를 결정하는 Quant_Objects 변수는 해당 값이 개체의 ObjectsTotal() OUTSIDE 와 같게 됩니다. 루프 를 위해 ?

피. 에스. 포럼을 어지럽히지 않기 위해 답변에 미리 감사드립니다.

파일:
strings_1.mq4  7 kb
 

안녕하세요! 오픈 매직 바이 포지션을 계산하기 위해 블록을 만들었지만 문제는 블록이 다른 통화 쌍에서 작동하는 경우 블록이 하나의 통화 베팅(마지막 오픈 포지션 )에 대해서만 결과를 제공한다는 것입니다. 블록이 각 통화 베팅에 대한 결과를 제공하도록 코드를 수정하는 방법(마법을 변경하지 않고)?

 int OpenMagicOrderCount_buy() 
{
   int OpenBuyOrdersCount = 0 ;
   int OpenOrders = 0 ;
   int cnt = 0 ;
   OpenOrders= OrdersTotal ();
   for (cnt= 0 ;cnt<OpenOrders;cnt++)   // scan all orders and positions. ..
   {
     OrderSelect (cnt, SELECT_BY_POS);
           if ( OrderSymbol ()== Symbol () && OrderMagicNumber ()==magic &&   OrderType () == OP_BUY )
          {                             
                  OpenBuyOrdersCount ++;
          }
   } 
   Print ( "+++++++++++++++++++++++OpenBuyOrdersCount: " + OpenBuyOrdersCount, "   OrderSymbol()= " , OrderSymbol ());
   return (OpenBuyOrdersCount); 
}
 
int OpenMagicOrderCount_buy() 
{
   int OpenBuyOrdersCount = 0 ;
   int OpenOrders = 0 ;
   int cnt = 0 ;
   OpenOrders= OrdersTotal ();
   for (cnt= 0 ;cnt<OpenOrders;cnt++)   // scan all orders and positions. ..
   {
     OrderSelect (cnt, SELECT_BY_POS);
           if ( OrderMagicNumber ()==magic &&   OrderType () == OP_BUY )
          {                             
                  OpenBuyOrdersCount ++;
          }
   } 
   Print ( "+++++++++++++++++++++++OpenBuyOrdersCount: " + OpenBuyOrdersCount, "   OrderSymbol()= " , OrderSymbol ());
   return (OpenBuyOrdersCount); 
}
так все " OP_BUY" 마법이 계산됩니다.
 
7777877 :

... 계속...

아래에서 StringSubstr 함수 하위 섹션 의 끝에 다음 구문이 대괄호 묶여 있습니다. 다른 곳 에서) 객체는 삭제할 수 없습니다. t .이 경우 각 삭제 후 객체의 총 수와 번호 매기기가 변경되어 일부 객체 이름을 건너뛸 수 있기 때문 입니다. 그러나 Expert Advisor의 위 텍스트에는 두 번째 for 루프가 전혀 없습니다. 또한 for 루프 이전에 deinit () 함수에서 선언한 Quant_Del 변수는 0으로 초기화되고 변수 ifor 루프 이전 어디에도 선언되지 않았습니다. 그리고 for 루프가 다음과 같이 보이기 때문에

Expert Advisor의 위 텍스트에서 프로그램의 여러 행이 단순히 약간 생략되어 있음이 밝혀졌습니다.

따라서 첫 번째 질문 은 다음과 같습니다. 여기에서 몇 줄을 건너뛸 수 있습니까? 아니면 초보자가 외부의 도움 없이 그 의미를 이해할 수 없을 정도로 영리한 프로그램입니까?

더 나아가... 같은 절의 같은 장에서 Expert Advisor의 텍스트 앞에 같은 Expert Advisor에 대한 링크가 있고(첨부 파일에 제공), 클릭하면 동일한 Expert Advisor가 MetaElitor에서 열립니다 . 그러나 이 EA의 텍스트는 이미 다릅니다 . 여기서 deinit () 함수는 이미 다음과 같습니다.

그런 다음 " 를 개별적으로 "결합" 하면 첫 번째 for 루프에서 개체를 삭제할 수 없다는 점에 유의해야 합니다. 일부 객체 이름은 생략됩니다 " 그리고 마지막 옵션 의 텍스트 함수 deinit (), 두 번째 질문이 있었습니다.

질문 . 함수를 배치하여 첫 번째 for 루프에서 객체를 삭제할 수 없는 이유 다음과 같은 if ?... 문 내부의 ObjectDelete(Obj_Name):

개체의 총 수가 "... 각 삭제 후 변경"되는 이유는 무엇입니까?... 실제로 이 경우 개체의 총 수를 결정하는 Quant_Objects 변수는 해당 값 for 고리?

피. 에스. 포럼을 어지럽히지 않기 위해 답변에 미리 감사드립니다.

루프를 반대로 하여 원하는 만큼 제거합니다.
 
FAQ :
루프를 반대로 하여 원하는 만큼 제거합니다.

내가 당신을 올바르게 이해 했습니까? deinit 함수(특히 루프)를 다음과 같이 표현해야 합니다.

 int deinit()                           // Спец. функция deinit()
  {
   int Quant_Objects= ObjectsTotal ();   // Cтолько всего ВСЕХ объектов
   for ( int k= Quant_Objects ; k>=0; k--) // По количеству объектов 
     {
       string Obj_Name= ObjectName (k);   // Запрашиваем имя объекта
       string Head= StringSubstr (Obj_Name, 0 , 6 ); // Извлекаем первые 6 сим
       if (Head==Prefix)                 // Если найден объект, …
        {                              // ... начинающийся с Paint_,
         ObjectDelete (Obj_Name);       // … то его и удаляем
        }                              //конец if
     }                                 //конец for
   return ;                             // Выход из deinit()
  }                                    //конец deinit
//-------------------------------------------------------------- 10 --
 
Elektronik :


이 데이터는 매수 주문과 매도 주문 간의 차이를 계산하는 데 필요합니다.

거래량이 0.09랏인 하나의 매수 주문과 총 거래량이 0.11인 두 개의 매도 주문이 개설되었다고 가정해 보겠습니다. 이들 사이의 차이는 0.09-0.11=-0.02이거나 가능하다면 두 값의 차이가 됩니다.


그렇다면 OrderLots 기능입니다.
 
abeiks :

안녕하세요! 오픈 매직 바이 포지션을 계산하기 위해 블록을 만들었지만 문제는 블록이 다른 통화 쌍에서 작동하는 경우 블록이 하나의 통화 베팅(마지막 오픈 포지션)에 대해서만 결과를 제공한다는 것입니다. 블록이 각 통화 베팅에 대한 결과를 제공하도록 코드를 수정하는 방법(마법을 변경하지 않고)?

변화:

 if ( OrderSymbol ()== Symbol () && OrderMagicNumber ()==magic &&   OrderType () == OP_BUY )

에:

 if ( OrderMagicNumber ()==magic &&   OrderType () == OP_BUY )
 
Expert Advisor에서 포인트의 손절매를 마지막 캔들 위의 손절매 로 교체하는 방법은 무엇입니까?
 
Neo777 :
Expert Advisor에서 포인트의 손절매를 마지막 캔들 위의 손절매로 교체하는 방법은 무엇입니까?
 double x = ... // Задаем на сколько пипсов выше
double sl = NormalizeDouble (High[ 1 ] + x * Point , Digits ); // Задаем значение стоплосс на x пипсов выше предпоследней свечи
 

Reshetov :спасибо
извиняюсь за то что не в SRC

여기에 삽입하는 방법