초보자의 질문 MQL4 MT4 MetaTrader 4 - 페이지 214

 
Aleksandr Martynov :

이런, 내가 찾은 것 같아:

문서에 따르면:

함수를 사용하여 사용자 지정 표시기를 호출하는 경우   iCustom() , 이 표시기는 호출한 프로그램의 스레드에서 실행됩니다. 라이브러리(가져온) 함수는 호출 프로그램의 스레드에서도 실행됩니다.

요약하면 MQL4 의 경우 프로그램의 단일 스레드와 프로그램에서 사용하는 표시기에 대해 리소스가 할당되기 때문에 계산 위치는 중요하지 않습니다.

이 경우 가능하면 표시기 코드를 Expert Advisor에게 전달하고 배열의 깊이와 "버퍼"의 수에 따라 계산된 값의 수를 최적화하는 것이 좋습니다. 재귀 알고리즘 - 프로그램에서 자동으로 인덱싱된 버퍼는 가격 데이터 전용이기 때문에 표시기에서 계산하기가 더 쉽습니다...

문제는 코드를 읽고 편집할 수 있는 편의성이므로 MT4는 하나의 창에서 단일 스레드입니다. 칠면조의 계산된 부분을 고문으로 가져가는 것이 더 쉽습니다. 그러나 항상 좋은 것은 아닙니다. 코드가 깁니다. 포함 또는 아이큐스트는 동일합니다. 속도를 높이면 MT5. 포럼 참가자들의 피드백에 따르면 MT4는 속도가 떨어집니다.

 
Valeriy Yastremskiy :

문제는 코드를 읽고 편집할 수 있는 편의성이므로 MT4는 하나의 창에서 단일 스레드입니다. 칠면조의 계산된 부분을 고문으로 가져가는 것이 더 쉽습니다. 그러나 항상 좋은 것은 아닙니다. 코드가 깁니다. 포함 또는 아이큐스트는 동일합니다. 속도를 높이면 MT5. 포럼 참가자들의 피드백에 따르면 MT4는 속도가 떨어집니다.

EA에서 계산된 버퍼의 관리는 지표보다 더 비쌉니다... 평균화, 지그재그와 같은 간단한 공식은 물론이고 아무 것도 아닙니다. 5는 확실히 좋지만 지금까지 모든 사람이 제공하는 것은 아니므로 마스터해야 합니다.

 
Aleksandr Martynov :

EA에서 계산된 버퍼의 관리는 지표보다 더 비쌉니다... 평균화, 지그재그와 같은 간단한 공식은 물론이고 아무 것도 아닙니다. 5는 확실히 좋지만 지금까지 모든 사람이 제공하는 것은 아니므로 마스터해야 합니다.

이에 대해 원하는 깊이까지 막대로 표시기 논리를 계산하면 표시기의 ikyust보다 저렴합니다. 그러나 이를 위해서는 표시기 논리의 코드를 가져와야 하며 이는 항상 쉽지는 않습니다.

 
개발자의 요청에 따라 전문가 및 터미널 로그를 개발자에게 제공하는 것이 얼마나 안전한가요?그가 내 계정이나 컴퓨터로 무언가를 할 수 있습니까?

 
Alexander Kovalev :
개발자의 요청에 따라 전문가 및 터미널 로그를 개발자에게 제공하는 것이 얼마나 안전한가요?그가 내 계정이나 컴퓨터로 무언가를 할 수 있습니까?

예, 또한 집에서 상자에서 모든 금 장신구를 꺼냅니다.

 

친구들이여, 내가 어디를 엉망으로 만들고 있는지 알려주세요(너무 많이 죽이지 마세요. 3일차에 MQL4를 이해합니다).


이전에 기록된 값(이전 주문을 열 때 취하는 값)에서 델타 포인트 상쇄(60)가 있는 가격으로 시장에서 SELL 주문을 열려고 합니다.

그러나 스크립트는 적절한 조건(60포인트 가격 하락)을 기다리지 않고 현재 가격으로 이전 주문으로 즉시 새 주문을 엽니다. 나 자신이 어딘가에서 망쳐 놓은 것을 이해하지만 정확히 어디에서 따라 잡을 수는 없습니다.

나는 매우 감사 할 것입니다!


이상한 발견

 

이해를 도와주세요!!!

내가 어디에 있는지 알 수 없습니다. EA에는 볼륨의 EMA가 필요합니다. iMAonArray를 사용했습니다.

그러나 계산은 실제와 유사하지 않습니다.

코드는 다음과 같습니다.

***

파일:
 
Aleksandr Martynov :
좋은 질문입니다. 차에 무언가가 덜걱거립니다. 어떤 볼트를 조여야 할까요? 얼마나 많은 팁이 가능한지 상상할 수 있습니까? 그러나 결국 너트를 조여야하기 때문에 결국 모두 쓸모가 없습니다 ...
스튜디오에는 코드만 있고 다른 것은 없습니다.

금이 열리지 않는 이유를 찾으십시오 ??

***

Документация по MQL5: Дата и время / TimeCurrent
Документация по MQL5: Дата и время / TimeCurrent
  • www.mql5.com
Возвращает последнее известное время сервера, время прихода последней котировки по одному из выбранных в "Обзоре рынка" символов. В обработчике OnTick() данная функция вернет время пришедшего обрабатываемого тика. В других случаях (например, вызов в обработчиках OnInit(), OnDeinit(), OnTimer() и так далее) это –...
 
Наджибулло Хабибов :

금이 열리지 않는 이유를 찾으십시오 ??

***

코드 붙여넣기   오른쪽: 버튼 사용   암호 또는 다른 옵션: 버튼을 사용하여 파일 첨부 파일을 첨부
MQL5.community - Памятка пользователя
MQL5.community - Памятка пользователя
  • www.mql5.com
Теперь вы можете не только читать статьи и скачивать программы на языке MQL5, но и участвовать в обсуждении интересующих вас тем на Форуме, оставлять комментарии к статьям и опубликованным кодам. Кроме того, вы можете не только выкладывать собственные разработки в Code Base, но и публиковать Статьи, за которые мы предлагаем вознаграждение...
 
Наджибулло Хабибов :

금이 열리지 않는 이유를 찾으십시오 ??

***

 //--- Inputs
extern double Lots       = 0.1 ;       // лот
extern double KLot       = 1 ;         // умножение лота
extern double MaxLot     = 5 ;         // максимальный лот
extern double Profit     = 0 ;         // Профит в валюте
extern int StopLoss      = 0 ;         // Стоп Лось
extern int TakeProfit    = 0 ;         // ТейкПрофит
extern int BULevel       = 0 ;         // уровень БУ
extern int BUPoint       = 30 ;       // пункты БУ
extern int TrailingStop  = 0 ;         // трал
extern int StartHour     = 0 ;         // час начала торговли
extern int StartMin      = 30 ;       // минута начала торговли
extern int EndHour       = 23 ;       // час окончания торговли
extern int EndMin        = 30 ;       // минута окончания торговли
extern int Reverse       = 0 ;         // 1-реверс
extern int CloseSig      = 0 ;         // 1-закрытие по сигналу
extern int Slip          = 30 ;       // реквот
extern int Shift         = 1 ;         // на каком баре сигнал индикатора
extern int Magic         = 123 ;       // магик

extern string IndName    = "Aroow" ;
extern int SignalPeriod  = 9 ;

datetime t= 0 ;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//---
   Comment ( "" );
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
   Comment ( "" );
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool TimeSession( int aStartHour, int aStartMinute, int aStopHour, int aStopMinute, datetime aTimeCur)
  {
//--- время начала сессии
   int StartTime= 3600 *aStartHour+ 60 *aStartMinute;
//--- время окончания сессии
   int StopTime= 3600 *aStopHour+ 60 *aStopMinute;
//--- текущее время в секундах от начала дня
   aTimeCur=aTimeCur% 86400 ;
   if (StopTime<StartTime)
     {
       //--- переход через полночь
       if (aTimeCur>=StartTime || aTimeCur<StopTime)
        {
         return ( true );
        }
     }
   else
     {
       //--- внутри одного дня
       if (aTimeCur>=StartTime && aTimeCur<StopTime)
        {
         return ( true );
        }
     }
   return ( false );
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutOrder( int type, double price)
  {
   int r= 0 ;
   color clr=Green;
   double sl= 0 ,tp= 0 ;

   if (type== 1 || type== 3 || type== 5 )
     {
      clr=Red;
       if (StopLoss> 0 )
         sl= NormalizeDouble (price+StopLoss* _Point , _Digits );
       if (TakeProfit> 0 )
         tp= NormalizeDouble (price-TakeProfit* _Point , _Digits );
     }

   if (type== 0 || type== 2 || type== 4 )
     {
      clr=Blue;
       if (StopLoss> 0 )
         sl= NormalizeDouble (price-StopLoss* _Point , _Digits );
       if (TakeProfit> 0 )
         tp= NormalizeDouble (price+TakeProfit* _Point , _Digits );
     }

   r= OrderSend ( NULL ,type,Lot(), NormalizeDouble (price, _Digits ),Slip,sl,tp, "" ,Magic, 0 ,clr);
   return ;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CountTrades()
  {
   int count= 0 ;
   for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--)
     {
       if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES))
        {
         if (OrderSymbol()== Symbol () && OrderMagicNumber()==Magic)
           {
             if (OrderType()< 2 )
               count++;
           }
        }
     }
   return (count);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Lot()
  {
   double lot=Lots;
   
   if (CountTrades()> 0 )
     {
      lot= NormalizeDouble (lot* MathPow (KLot,CountTrades()), 2 );
     }
   if (lot>MaxLot)
      lot=Lots;
   return (lot);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Trailing()
  {
   bool mod;
   for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--)
     {
       if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES))
        {
         if (OrderSymbol()== Symbol () && OrderMagicNumber()==Magic)
           {
             if (OrderType()==OP_BUY)
              {
               if (Bid-OrderOpenPrice()>TrailingStop* _Point )
                 {
                   if (OrderStopLoss()<Bid-TrailingStop* _Point )
                    {
                     mod=OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop* _Point ,OrderTakeProfit(), 0 ,Yellow);
                     return ;
                    }
                 }
              }

             if (OrderType()==OP_SELL)
              {
               if ((OrderOpenPrice()-Ask)>TrailingStop* _Point )
                 {
                   if ((OrderStopLoss()>(Ask+TrailingStop* _Point )) || (OrderStopLoss()== 0 ))
                    {
                     mod=OrderModify(OrderTicket(),OrderOpenPrice(),Ask+TrailingStop* _Point ,OrderTakeProfit(), 0 ,Yellow);
                     return ;
                    }
                 }
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void BU()
  {
   bool m;
   for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--)
     {
       if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES))
        {
         if (OrderSymbol()== Symbol () && OrderMagicNumber()==Magic)
           {
             if (OrderType()==OP_BUY)
              {
               if (OrderOpenPrice()<=(Bid-(BULevel+BUPoint)* _Point ) && OrderOpenPrice()>OrderStopLoss())
                 {
                  m=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+BUPoint* _Point ,OrderTakeProfit(), 0 ,Yellow);
                   return ;
                 }
              }

             if (OrderType()==OP_SELL)
              {
               if (OrderOpenPrice()>=(Ask+(BULevel+BUPoint)* _Point ) && (OrderOpenPrice()<OrderStopLoss() || OrderStopLoss()== 0 ))
                 {
                  m=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-BUPoint* _Point ,OrderTakeProfit(), 0 ,Yellow);
                   return ;
                 }
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CloseAll( int ot=- 1 )
  {
   bool cl;
   for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--)
     {
       if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES))
        {
         if (OrderSymbol()== Symbol () && OrderMagicNumber()==Magic)
           {
             if (OrderType()== 0 && (ot== 0 || ot==- 1 ))
              {
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots(), NormalizeDouble (Bid, _Digits ),Slip,White);
              }
             if (OrderType()== 1 && (ot== 1 || ot==- 1 ))
              {
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots(), NormalizeDouble (Ask, _Digits ),Slip,White);
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double AllProfit( int ot=- 1 )
  {
   double pr= 0 ;
   for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--)
     {
       if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES))
        {
         if (OrderSymbol()== Symbol () && OrderMagicNumber()==Magic)
           {
             if (OrderType()== 0 && (ot== 0 || ot==- 1 ))
              {
               pr+=OrderProfit()+OrderCommission()+OrderSwap();
              }

             if (OrderType()== 1 && (ot== 1 || ot==- 1 ))
              {
               pr+=OrderProfit()+OrderCommission()+OrderSwap();
              }
           }
        }
     }
   return (pr);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
   double blu = iCustom ( NULL , 0 ,IndName,SignalPeriod, 4 ,Shift);
   double red = iCustom ( NULL , 0 ,IndName,SignalPeriod, 5 ,Shift);
   double blu2 = iCustom ( NULL , 0 ,IndName,SignalPeriod, 4 ,Shift+ 1 );
   double red2 = iCustom ( NULL , 0 ,IndName,SignalPeriod, 5 ,Shift+ 1 );

   bool buy = blu< 1000 && red2< 1000 ;
   bool sell = red< 1000 && blu2< 1000 ;

   if (Reverse> 0 )
     {
      buy = red< 1000 && blu2< 1000 ;
      sell = blu< 1000 && red2< 1000 ;
     }

   if (BULevel> 0 )
      BU();
   if (TrailingStop> 0 )
      Trailing();
   if (AllProfit()>Profit && Profit> 0 )
      CloseAll();

   if (TimeSession(StartHour,StartMin,EndHour,EndMin, TimeCurrent ()) && t!=Time[ 0 ])
     {
       if (buy)
        {
         PutOrder( 0 ,Ask);
        }
       if (sell)
        {
         PutOrder( 1 ,Bid);
        }
      t=Time[ 0 ];
     }

   if (CountTrades()> 0 && CloseSig> 0 )
     {
       if (sell)
        {
         CloseAll( 0 );
        }
       if (buy)
        {
         CloseAll( 1 );
        }
     }

   Comment ( "\n blu: " ,blu,
           "\n red: " ,red,
           "\n All Profit: " ,AllProfit());
  }
//+------------------------------------------------------------------+