찻주전자의 질문 - 페이지 200

 

그래서 바의 영업시간을 판단하는 기능이 있습니다(바가 미래일 경우 포함)

 //+---------------------------------------------------------------------------+
//| Получение точного времени открытия                                        |
//|Input:                                                                     |
//|1) Время, которое необходимо округлить до ближайшего времени открытия бара |
//|2) Переменная для вывода результата                                        |
//|3) Период ТФ                                                               |
//|4) Отклонение влево-вправо                                                 |
//|Возврат: количество элементов(1), 0 если не скопировано, (-1) если ошибка  |
//+---------------------------------------------------------------------------+
int GetSingleBarOpenTime( datetime Time, datetime &Output, ENUM_TIMEFRAMES nPeriod, int Shift= 0 ) export
  {
   datetime OpenTime[ 1 ];
   int Count= 0 ;
// если бар существует то используем стандартную процедуру поиска времени открытия
   if (Time<= TimeCurrent () && Shift== 0 )
     {
      Count= CopyTime ( Symbol (),nPeriod,Time, 1 ,OpenTime);
       if (Count== 0 )
        {
         Print ( "GetCorrectOpenTime CopyTime elements=0" );
         return ( 0 );
        }
       else if (Count< 0 )
        {
         Print ( "GetCorrectOpenTime error " +( string ) GetLastError ());
         return (Count);
        }
       else
        {
         Output=OpenTime[ 0 ];
         return (Count);
        }
     }
//если бар находится в будущем то используем следующую процедуру
   else
     {
       MqlDateTime sTime;
       // NumOfUnits - количество стандартных единиц
       int NumOfUnits= 0 ; 
       int ToRnd;
       TimeToStruct (Time,sTime);
       //Единица измерения(1-минута, 2 - час, 3 - день, 4 - неделя(но используются дни), 5 - месяц)
       short Unit= 0 ;
       //в зависимости от ТФ инициализируются параметры
       switch (nPeriod)
        {
         case PERIOD_M1 :   {Unit= 1 ;NumOfUnits= 1 ; break ;}
         case PERIOD_M2 :   {Unit= 1 ;NumOfUnits= 2 ; break ;}
         case PERIOD_M3 :   {Unit= 1 ;NumOfUnits= 3 ; break ;}
         case PERIOD_M4 :   {Unit= 1 ;NumOfUnits= 4 ; break ;}
         case PERIOD_M5 :   {Unit= 1 ;NumOfUnits= 5 ; break ;}
         case PERIOD_M6 :   {Unit= 1 ;NumOfUnits= 6 ; break ;}
         case PERIOD_M10 :  {Unit= 1 ;NumOfUnits= 10 ; break ;}
         case PERIOD_M12 :  {Unit= 1 ;NumOfUnits= 12 ; break ;}
         case PERIOD_M15 :  {Unit= 1 ;NumOfUnits= 15 ; break ;}
         case PERIOD_M20 :  {Unit= 1 ;NumOfUnits= 20 ; break ;}
         case PERIOD_M30 :  {Unit= 1 ;NumOfUnits= 30 ; break ;}
         case PERIOD_H1 :   {Unit= 2 ;NumOfUnits= 1 ; break ;}
         case PERIOD_H2 :   {Unit= 2 ;NumOfUnits= 2 ; break ;}
         case PERIOD_H3 :   {Unit= 2 ;NumOfUnits= 3 ; break ;}
         case PERIOD_H4 :   {Unit= 2 ;NumOfUnits= 4 ; break ;}
         case PERIOD_H6 :   {Unit= 2 ;NumOfUnits= 6 ; break ;}
         case PERIOD_H8 :   {Unit= 2 ;NumOfUnits= 8 ; break ;}
         case PERIOD_H12 :  {Unit= 2 ;NumOfUnits= 12 ; break ;}
         case PERIOD_D1 :   {Unit= 3 ;NumOfUnits= 1 ; break ;}
         case PERIOD_W1 :   {Unit= 4 ;NumOfUnits= 7 ; break ;}
         case PERIOD_MN1 :  {Unit= 5 ;NumOfUnits= 1 ; break ;}
         default :         {Print( "Period is unknown" ); break ;}
        }
       // Если ТФ - минуты, то
       if (Unit== 1 )
        {
         sTime.sec= 0 ;
         //Остаток от деления
         ToRnd=( int ) fmod (sTime.min,NumOfUnits);
         Time= StructToTime (sTime);
         // Округление до ближайшего времени открытия(пример: если сейчас 14:25, и тф 2min, то ближайщее время открытия бара - 14:24)
         Time-=(ToRnd* 60 );
         Time+=(NumOfUnits*Shift* 60 );

        }
       else if (Unit== 2 )
        {
         sTime.sec= 0 ;
         sTime.min= 0 ;
         ToRnd=( int ) fmod (sTime.hour,NumOfUnits);
         Time= StructToTime (sTime);
         Time-=(ToRnd* 60 * 60 );
         Time+=(NumOfUnits*Shift* 60 * 60 );
        }
       else if (Unit== 3 )
        {
         sTime.hour= 0 ;
         sTime.min= 0 ;
         sTime.sec= 0 ;
         ToRnd=( int ) fmod (sTime.day,NumOfUnits);
         Time= StructToTime (sTime);
         int hds;
         hds=sTime.day_of_week;
         if (hds== 0 ) hds= 7 ;
         hds= floor ((hds+Shift)/ 7 )* 2 ;
         int ti=Shift+hds;
         while (hds> 7 )
         {
            hds=( floor (hds/ 7 ))* 2 ;
            ti+=hds;
         }
         Print (ti);
         Time-=(ToRnd* 60 * 60 * 24 );
         Time+=(NumOfUnits*Shift* 60 * 60 * 24 );
        }
       else if (Unit== 4 )
        {
         sTime.hour= 0 ;
         sTime.min= 0 ;
         sTime.sec= 0 ;
         ToRnd=( int ) fmod (sTime.day,NumOfUnits);
         Time= StructToTime (sTime);
         Time-=(ToRnd* 60 * 60 * 24 );
         Time+=(NumOfUnits*Shift* 60 * 60 * 24 );
        }
       else if (Unit== 5 )
        {
         sTime.sec= 0 ;
         sTime.min= 0 ;
         sTime.hour= 0 ;
         sTime.day= 1 ;
         sTime.mon=sTime.mon-( int ) fmod (sTime.mon,NumOfUnits)+(NumOfUnits*Shift);
         while (sTime.mon< 1 )
           {
            sTime.year--;
            sTime.mon= 12 +sTime.mon;
           }
         while (sTime.mon> 12 )
           {
            sTime.year++;
            sTime.mon=sTime.mon- 12 ;
           }
         if (sTime.sec< 0 )
             Print ( " GetSingleBarOpenTime seconds error" );
         if (sTime.min< 0 )
             Print ( " GetSingleBarOpenTime minutes error" );
         if (sTime.hour< 0 )
             Print ( " GetSingleBarOpenTime hours error" );
         if (sTime.day< 1 )
             Print ( "GetSingleBarOpenTime days error" );
         if (sTime.mon< 0 )
             Print ( " GetSingleBarOpenTime months error" );
         if (sTime.year< 1970 )
             Print ( "Year < 1970" );
         Time= StructToTime (sTime);
        }
      Output=Time;
       return ( 1 );
     }
  }

Shift의 문제 - 이제 이동은 막대 수가 아니라 일 수를 기준으로 합니다(D1에서 나머지는 중요하지 않음 - D1이 알아낼 주요 사항임). 일반적으로 나는 앉아 있고, 교대 (평일 수)와 현재 요일에 따라 총 일 수를 알 수 있다는 것이 내 머리 속에 떠오른 것 같지만 나는 어떤 공식을 사용할지 결정할 수 없습니다.

참고: Unit=3에서 이것을 시도하십시오(지금까지는 실패했습니다)

도와주세요, 제발.

 
victorva : 거래 요청이 오류 10016("잘못된 중지")을 반환합니다. 그들은 무엇에 대해 잘못 알고 있습니까?

1. 코드를 올바르게 붙여넣습니다 (Ctrl+Alt+M).

 void OnTick ()
  {
   MqlTick last_tick={ 0 };                       // предопределенная структура для получения текущих данных рынка
   SymbolInfoTick ( "EURUSD" ,last_tick);           // инструмент: указывать обязательно
   double Bid = last_tick.bid;                         // Текущая цена Bid
   MqlTradeRequest request={ 0 };                 
   MqlTradeResult result={ 0 };                 
   request.action= TRADE_ACTION_DEAL ;           
   request.magic= 555 ;                          
   request.symbol= "EURUSD" ;
   request.volume= 1.0 ;                  
   request.deviation= 0 ;                 
   request.type= ORDER_TYPE_BUY ;                        
   request.sl=Bid- 300 * _Point ;                         // Уровень Stop Loss ордера
   request.tp=Bid+ 1000 * _Point ;                     // Уровень Take Profit ордера
   OrderSend (request,result);
   Comment ( "retcode = " ,result.retcode);
  }
2. 요청에 request.price 필수 필드가 포함되어 있지 않다는 사실부터 시작하겠습니다(이러한 필드가 없으면 시장 실행 모드에서만 허용됨). 따라서 while request.price == 0임을 알 수 있습니다.
MQL5.community - Памятка пользователя
MQL5.community - Памятка пользователя
  • 2010.02.23
  • MetaQuotes Software Corp.
  • www.mql5.com
Вы недавно зарегистрировались и у вас возникли вопросы: Как вставить картинку в сообщение на форуме, как красиво оформить исходный код MQL5, где находятся ваши Личные сообщения? В этой статье мы подготовили для вас несколько практических советов, которые помогут быстрее освоиться на сайте MQL5.community и позволят в полной мере воспользоваться доступными функциональными возможностями.
 
victorva :

거래 요청에 오류 10016("잘못된 중지")이 표시됩니다. 그들은 무엇에 대해 잘못 알고 있습니까?


request.sl=입찰가-300*_포인트; // 손절매 주문 수준
request.tp=입찰가+1000*_포인트; // 주문 이익 실현 수준

정규화되지 않았기 때문입니다. (SRC 버튼을 사용하여 코드를 붙여넣습니다).

  request.sl= NormalizeDouble (Bid- 300 * _Point , _Digits );   // Уровень Stop Loss ордера
  request.tp= NormalizeDouble (Bid+ 1000 * _Point , _Digits );   // Уровень Take Profit ордера
 

자동 링크 삽입 기능 확인

1. Вставляйте код правильно (Ctrl+Alt+M).

 
Yedelkin :

1. 코드를 올바르게 붙여넣습니다 (Ctrl+Alt+M).

2. 요청에 request.price 필수 필드가 포함되어 있지 않다는 사실부터 시작하겠습니다(이러한 필드가 없으면 시장 실행 모드에서만 허용됨). 따라서 while request.price == 0임을 알 수 있습니다.

고맙습니다. 나는 가격을 설정했고 효과가 있었다.

 

도와주세요. 한 가지를 알 수 없습니다.

|9|8|7|6|5|4|3|2|1|0| <--시계열 요금

CopyRates(Symbol(),Period(),시간,2,결과);

예를 들어, 나는 촛불 번호 3의 시간을 표시했습니다. 이 경우 3번, 4번 양초의 요금은 나에게 반환됩니다. 그리고 3번 양초 가 열리는 시간이 3번, 2번 양초를 얻는 방법입니다. 음수는 소화되지 않습니다

인덱스를 찾을 생각이 있었는데 이를 위해서는 현재 요소부터 시작하여 모든 요소를 복사해야 합니다. 하지만 젠장, 10년 전에 M1과 막대가 있다면 배열도 너무 큽니다.

미리 감사드립니다

 

안녕하세요!

MetaTrader 5 Strategy Tester 프로그램(MetaTester 5 Agents Managers 빌드 712)의 "서비스" 탭에서 트래픽이 측정되는 단위를 알려주실 수 있습니까? 킬로바이트|메가바이트 또는 킬로BITS|메가비트로?

고맙습니다.

 

얘들 아, 데이터베이스에 다른 통화 차트를 표시기 또는 개체의 형태로 기본 차트에 표시할 수 있는 칠면조가 있는지 말해 주세요.

추신 MT4용으로 직접 작성했지만 여기에서는 이미 준비가 되어 있을 수 있습니다.

 
storm :

얘들 아, 데이터베이스에 다른 통화 차트를 표시기 또는 개체의 형태로 기본 차트에 표시할 수 있는 칠면조가 있는지 알려주십시오.

추신 MT4용으로 직접 작성했지만 여기에서는 이미 준비가 되어 있을 수 있습니다.

찾았습니다. 이미 작성했습니다. s ****, 직접 작성할 필요도 없습니다. https://www.mql5.com/ru/code/1055
MultiCurrency
MultiCurrency
  • 투표: 9
  • 2012.09.14
  • Nikolay Kositsin
  • www.mql5.com
Индикатор MultiCurrency позволяет анализировать одновременно до восьми графиков валют.
 
storm :
찾았습니다. 이미 작성했습니다. s ****, 직접 작성할 필요도 없습니다. https://www.mql5.com/ru/code/1055
그것의 반전은 저자에 의해 구상되었지만 구현되지 않았고, 나는 그것을 조정해야 했고, 그래서 저자!