MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 1949

 
Alexandr Sokolov # :


2) 배열에 역 인덱싱이 있는 경우 이론상 배열의 시작 부분에 새 셀이 나타나야 합니다. 이는 관찰되지 않습니다.

배열의 시작 부분에 새 셀이 나타나는 이유는 무엇입니까? - 내가 틀리지 않았다면 ArraySetAsSeries()를 사용할 때 배열이 메모리에 물리적으로 재배포되지 않고 배열 요소에 액세스할 때 역 인덱싱만 사용된다는 도움말을 작성해야 합니다.

추신 : 귀하의 예는 복잡하므로 스케치했습니다.

 #property strict
//+------------------------------------------------------------------+
void OnStart ()
{
   int arr1[] = { 1 , 2 , 3 , 4 , 5 };
   int arr2[] = { 1 , 2 , 3 , 4 , 5 };
   ArraySetAsSeries (arr2, true );
   Print ( "Start size : " , ArraySize (arr1), " , " , ArraySize (arr2));
   Print ( "Resize : " , ArrayResize (arr1, 10 ), " , " , ArrayResize (arr2, 10 ));
   string s1 = "" , s2 = "" ;
   for ( int i = 0 , j = 0 ; i < ArraySize (arr1) && j < ArraySize (arr2); i++, j++)
   {
      s1 += ( string )arr1[i] + " , " ;
      s2 += ( string )arr2[j] + " , " ;
   }
   Print ( "arr1 = " , s1);
   Print ( "arr2 = " , s2);
}

2022.04.18 21:31:59.223 tst EURUSD,H1: arr2 = 5 , 4 , 3 , 2 , 1 , 0 , 0 , 0 , 0 , 0 ,

2022.04.18 21:31:59.223 tst EURUSD,H1: arr1 = 1 , 2 , 3 , 4 , 5 , 0 , 0 , 0 , 0 , 0 ,

2022.04.18 21:31:59.223 tst EURUSD,H1: 크기 조정: 10 , 10

2022.04.18 21:31:59.223 tst EURUSD,H1: 시작 크기: 5 , 5

 
말하다. MT5에서 작동하는 방법
 iClose ( NULL , PERIOD_CURRENT ,shift)

' iClose ' 오류가 발생합니다. 오버로드된 함수에 대한 모호한 호출입니다.

일반적으로 목표는 TF를 선택하는 것입니다.

MT4부터 습관처럼 이렇게 선택하고 싶었어

 if ( iClose ( NULL , TF(), 1 ) < iOpen ( NULL , TF(), 1 ))

int TF()
  {
   int tf;
   switch (TF)
     {
       case 1 :
         tf = 1 ;
         break ;
       case 2 :
         tf = 5 ;
         break ;
       case 3 :
         tf = 15 ;
         break ;
       case 4 :
         tf = 30 ;
         break ;
       case 5 :
         tf = 60 ;
         break ;
       case 6 :
         tf = 240 ;
         break ;
       case 7 :
         tf = 1440 ;
         break ;
       case 8 :
         tf = 10080 ;
         break ;
       case 9 :
         tf = 43200 ;
         break ;
       default :
         tf = 10 ;
         Print (tf);
     }
   return (tf);
  }

하지만 헤어졌다.(

 
Александр iClose ' 오류가 발생합니다. 오버로드된 함수에 대한 모호한 호출입니다.

일반적으로 목표는 TF를 선택하는 것입니다.

MT4부터 습관처럼 이렇게 선택하고 싶었어

하지만 헤어졌다.(

MT5의 기간

if(Period()==1) "M1"을 반환합니다.

if(Period()==2) "M2"를 반환합니다.

if(Period()==3) 반환 "M3";

if(Period()==4) "M4"를 반환합니다.

if(Period()==5) "M5"를 반환합니다.

if(Period()==6) "M6"을 반환합니다.

if(Period()==10) "M10"을 반환합니다.

if(Period()==12) "M12"를 반환합니다.

if(Period()==15) "M15"를 반환합니다.

if(Period()==20) "M20"을 반환합니다.

if(Period()==30) "M30"을 반환합니다.

if(Period()==16385) 반환 "H1";

if(Period()==16386) 반환 "H2";

if(Period()==16387) 반환 "H3";

if(Period()==16388) 반환 "H4";

if(Period()==16390) 반환 "H6";

if(Period()==16392) 반환 "H8";

if(Period()==16396) 반환 "H12";

if(Period()==16408) "매일"을 반환합니다.

if(Period()==32769) "매주"를 반환합니다.

if(Period()==49153) "매월"을 반환합니다.

 
Andrei Sokolov # :

MT5의 기간

if(Period()==1) "M1"을 반환합니다.

if(Period()==2) "M2"를 반환합니다.

if(Period()==3) 반환 "M3";

if(Period()==4) "M4"를 반환합니다.

if(Period()==5) "M5"를 반환합니다.

if(Period()==6) "M6"을 반환합니다.

if(Period()==10) "M10"을 반환합니다.

if(Period()==12) "M12"를 반환합니다.

if(Period()==15) "M15"를 반환합니다.

if(Period()==20) "M20"을 반환합니다.

if(Period()==30) "M30"을 반환합니다.

if(Period()==16385) 반환 "H1";

if(Period()==16386) 반환 "H2";

if(Period()==16387) 반환 "H3";

if(Period()==16388) 반환 "H4";

if(Period()==16390) 반환 "H6";

if(Period()==16392) 반환 "H8";

if(Period()==16396) 반환 "H12";

if(Period()==16408) "매일"을 반환합니다.

if(Period()==32769) "매주"를 반환합니다.

if(Period()==49153) "매월"을 반환합니다.

고맙습니다!

 
Александр # :

고맙습니다!

ENUM_TIMEFRAMES 이(가) 마음에 들지 않습니까?

그리고 입력 변수에서 원하는 대로 열거형으로 설정하고 선택할 수 있습니다... 왜 탬버린과 함께 춤을 춥니까? 예, 이 열거형은 mql4에서 오랫동안 사용할 수 있었습니다...

Документация по MQL5: Константы, перечисления и структуры / Константы графиков / Периоды графиков
Документация по MQL5: Константы, перечисления и структуры / Константы графиков / Периоды графиков
  • www.mql5.com
Периоды графиков - Константы графиков - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Alexey Viktorov # :

ENUM_TIMEFRAMES 이(가) 마음에 들지 않습니까?

그리고 입력 변수에서 원하는 대로 열거형으로 설정하고 선택할 수 있습니다... 왜 탬버린과 함께 춤을 춥니까? 예, 이 열거형은 mql4에서 오랫동안 사용할 수 있었습니다...

+

 
Alexey Viktorov # :

ENUM_TIMEFRAMES 이(가) 마음에 들지 않습니까?

그리고 입력 변수에서 원하는 대로 열거형으로 설정하고 선택할 수 있습니다... 왜 탬버린과 함께 춤을 춥니까? 예, 이 열거형은 mql4에서 오랫동안 사용할 수 있었습니다...

고맙습니다! 몰랐다.

 

동료 여러분, 현재 가격에 가장 가까운 이전 지정가 주문의 가격을 찾기 위한 최적의 알고리즘을 알려주실 수 있습니까?

다음 낮은 구매 한도.

여기에서 숫자를 세지만 이전에 설정된 한도의 PRICE가 필요하므로 함수가 반환됩니다.


매도 한도에 대한 최소 가격 지식과 매수 한도에 대한 최대 지식을 하면서....

 int Price_of_orders( int Magic_) // цена ближайшего ордера к цене по магику
  {
//--- получим общее количество ордеров
   int ord = 0 ; // итоговое значение кол-ва ордеров
   int orders= OrdersTotal ();
//--- пробежим по списку ордеров
   for ( int i= 0 ;i<orders;i++)
     {
       ResetLastError ();
       //--- скопируем в кэш ордер по его номеру в списке
       ulong ticket= OrderGetTicket (i);
       if (ticket!= 0 ) // если ордер успешно скопирован в кэш, работаем с ним
        {
         double price_open  = OrderGetDouble ( ORDER_PRICE_OPEN );
         datetime time_setup= OrderGetInteger ( ORDER_TIME_SETUP );
         string symbol      = OrderGetString ( ORDER_SYMBOL );
         long magic_number  = OrderGetInteger ( ORDER_MAGIC );
         if (magic_number==Magic_)
           {
             //  обработаем ордер с заданным ORDER_MAGIC - посчитаем
            ord++;
           }
         PrintFormat ( "Ордер #%d по %s был выставлен %s, ORDER_MAGIC=%d" ,ticket,symbol, TimeToString (time_setup),magic_number);
        }
       else          // вызов OrderGetTicket() завершился неудачно
        {
         PrintFormat ( "Ошибка при получении ордера из списка в кэш. Код ошибки: %d" , GetLastError ());
        }

     }
   return (ord);   
  }
 
Roman Shiredchenko # :

동료 여러분, 현재 가격에 가장 근접한 이전 지정가 주문의 가격을 찾기 위한 최적의 알고리즘을 알려주실 수 있습니까?

다음 낮은 구매 한도.

여기에서 숫자를 세지만 이전에 설정된 한도의 PRICE가 필요하므로 함수가 반환됩니다.


매도 한도에 대한 최소 가격 지식과 매수 한도에 대한 최대 지식을 하면서....

구조에 저장하거나 필요한 가격을 티켓과 함께 배열하고 예를 들어 시간과 같이 필요한 기타 사항을 배열하고 가격별로 추가한 후 즉시 정렬합니다. 자원별로는 자주 검색하지 않으면 같거나 조금 더 비싸고 자주 검색하면 기억하는 것이 좋습니다. 글쎄요, 물론 100500개의 주문이 있는 경우가 아니라면요) 그러면 가격도 비쌀 수 있습니다. 일반적으로 구조나 다차원 배열에서 정렬을 하면 불행히도 첫 번째 인덱스에 대해서만 문제가 해결됩니다.

때로는 인덱스, 티켓, 시간, 가격이 동일한 여러 1차원 배열을 사용합니다. 그리고 필요한 속성의 인덱스에서 검색하십시오. 예를 들어 더 짧은 시간 또는 더 높은 가격의 인덱스를 얻고 필요한 주문의 티켓을 얻습니다. 물론 목발이지만 분명히 작동합니다.

 

질문이 생겼습니다. 검색에서 찾지 못했습니다. EA에서 알고 거래를 활성화할 수 있습니까? 터미널 속성 가져오기, 활성화 여부는 확인되지 않습니다.

그리고 하나의 터미널에서 허용된 알고리즘 거래로 하나의 어드바이저를 실행할 수 있고 다른 하나는 그렇지 않습니다.

사유: