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

 

Alexey, 답변과 도움에 감사드립니다.

새로운 질문, MT4에서 차트와 탭을 복제할 수 있습니까? 음, 즉, 템플릿을 사용하여 매번 차트 매개변수를 설정하는 것이 아니라 선택한 통화, 시간대, 차트 매개변수로 탭을 완전히 복사하는 것입니다. 그런게 아예 없는건가요?

 
Rustam Bikbulatov :

나는 노력한다)

싸우고, 찾고, 찾고, 숨기세요!


엘렌카블라디 :

새로운 질문

예, 아무 것도 아닙니다.

가장 간단한 것은 템플릿입니다. 왜 싫어요? 기간, 규모, 배경색 , 촛불 색상을 설정하고 필요한 지표를 설명하고 default.tpl로 저장했습니다. 이제 새 차트를 열면 모든 것이 준비됩니다.

 
Aleksei Stepanenko :


가장 간단한 것은 템플릿입니다. 왜 싫어요? 기간, 규모, 배경색 , 촛불 색상을 설정하고 필요한 지표를 설명하고 default.tpl로 저장했습니다. 이제 새 차트를 열면 모든 것이 준비됩니다.

아니요, 질문이 다른 것 같습니다. 차트를 열고 칠면조를 설정할 때 사용자는 TF나 기호를 모릅니다. 스크립트에는 캐릭터 선택과 TF가 필요합니다. 뭐, 칠면조를 동시에 불러올 수도 있고, 템플릿을 선택할 수도 있습니다.)

 
Aleksei Stepanenko :

싸우고, 찾고, 찾고, 숨기세요!


예, 아무 것도 아닙니다.

가장 간단한 것은 템플릿입니다. 왜 싫어요? 기간, 규모, 배경색 , 촛불 색상을 설정하고 필요한 지표를 설명하고 default.tpl로 저장했습니다. 이제 새 차트를 열면 모든 것이 준비됩니다.

아, 작동 방식은 다음과 같습니다 . default.tpl에 대한 생각은 없었습니다. :))
 

@makssub 는 PM에 MQL4 코드를 요청하고 다음 코드는 다음과 같습니다.

 #property strict
//+------------------------------------------------------------------+
void OnStart ()
{
   while (! IsStopped ())
   {
       int ticket = - 1 ;
       string ord_sym = "" ;
       int max_pips = INT_MIN ;
       for ( int i = OrdersTotal () - 1 ; i >= 0 ; i--)
      {
         if (! OrderSelect (i, SELECT_BY_POS, MODE_TRADES) || OrderType() > OP_SELL) continue ;
         string _sym      = OrderSymbol();
         double sym_point = SymbolInfoDouble (_sym, SYMBOL_POINT );
         double sym_price = OrderType() == OP_BUY ? SymbolInfoDouble (_sym, SYMBOL_BID ) : SymbolInfoDouble (_sym, SYMBOL_ASK );
         int ord_pips     = fabs (PriceToInteger(OrderOpenPrice(), sym_point) - PriceToInteger(sym_price, sym_point));
         if (max_pips < ord_pips)
         {
            max_pips = ord_pips;
            ticket = OrderTicket();
            ord_sym = _sym;
         }
      }
       if (ticket < 0 ) Comment ( "" );
       else Comment ( "Max pips in order = " , max_pips, " , Symbol = " , ord_sym, " , ticket = " , ticket);
       Sleep ( 123 );
      RefreshRates();
   }
   Comment ( "" );
}
//+------------------------------------------------------------------+
int PriceToInteger( const double Price, const double point )
{
   return (( int )(Price / point + 0.1 ));
}
//+------------------------------------------------------------------+


티켓으로 주문을 마감하는 방법은 여기를 참조하십시오: https://www.mql5.com/ru/forum/131859

Только "Полезные функции от KimIV".
Только "Полезные функции от KimIV".
  • 2011.02.18
  • www.mql5.com
Все функции взяты из этой ветки - http://forum.mql4...
 
Alexey Viktorov :

음, 간단히 말해서 다음과 같습니다.

우리는 datetime형의 변수를 만들고 그 안에 이익으로 주문을 마감할 때 현재 양초 D1의 시간을 기록합니다. 그리고 다음 주문을 열기 전에 현재 D1 캔들 의 개장 시간으로 이 변수의 값을 확인합니다. 따라서 현재 시간이 더 길면 열 수 있습니다. 그렇지 않으면 우리는 대나무를 피웁니다.

예를 들어, 당신이 말한 것을 구현하기에 충분한 경험이 없다는 것을 보여줄 수 있습니까?
 
안녕하세요 여러분! 오늘과 관련된 MQL4 교과서를 추천해주세요.
 
Nikolay Grigoryev :
안녕하세요 여러분! 오늘과 관련된 MQL4 교과서를 추천해주세요.

단 하나의 교과서, 오래된 Kovaleva가 있습니다. 부분적으로는 2016년까지 어딘가에 관련이 있습니다. 그런 다음 많은 5가 4ku로 옮겨졌습니다. 신에게 감사합니다 주문 시스템이 남았습니다. 더 이상 교과서는 없습니다. 여기에 기사만 있고 인터넷에서 검색합니다.

 
Valeriy Yastremskiy :

단 하나의 교과서, 오래된 Kovaleva가 있습니다. 부분적으로는 2016년까지 어딘가에 관련이 있습니다. 그런 다음 많은 5가 4ku로 옮겨졌습니다. 신에게 감사합니다 주문 시스템이 남았습니다. 더 이상 교과서는 없습니다. 여기에 기사만 있고 인터넷에서 검색합니다.

고맙습니다!

 

간단한 지표를 작성했습니다. 0을 통과할 때 버퍼에 값이 있지만 선을 그리지 않습니다. 무엇이 잘못되었는지 알려주세요.

 #property strict
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 clrGreen
#property indicator_color2 clrRed

//---- input parameters
extern int     FastEMA= 12 ;  
extern int     SlowEMA= 26 ;  
extern int     Signal= 9 ;  

//---- buffers
double DiffBuffer_up[];
double DiffBuffer_dn[];
//
double MainBuffer[];
double SignalBuffer[];

ENUM_TIMEFRAMES TimeFrame;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
{
   int     draw_begin= MathMax (FastEMA,SlowEMA);
   string short_name= "MACD Stephen" ;
   //---- indicators
   SetIndexStyle( 0 , DRAW_LINE );
   SetIndexBuffer ( 0 ,DiffBuffer_up);
   SetIndexStyle( 1 , DRAW_LINE );
   SetIndexBuffer ( 1 ,DiffBuffer_dn);
   short_name= StringConcatenate (short_name, " (" +( string )FastEMA+ "," +( string )SlowEMA+ "," +( string )Signal+ ")" );
   IndicatorShortName(short_name);
   SetIndexDrawBegin( 0 ,draw_begin);
   SetIndexDrawBegin( 1 ,draw_begin);
   SetIndexLabel( 0 , "Up" );
   SetIndexLabel( 1 , "Down" );
   IndicatorDigits( 6 );
   SetLevelValue( 0 , 0 );
   
   TimeFrame=GetTF();
   
   return ( 0 );
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
{

   return ( 0 );
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
{
   int limit, iChart, iTF, delta= 0 ;
   datetime TimeArray[];
   //if(TimeFrame>Period()) delta=(int)MathCeil(TimeFrame/Period());
   int counted_bars=IndicatorCounted();
   //---- check for possible errors
   if (counted_bars< 0 ) return (- 1 );
   //---- the last counted bar will be recounted
   if (counted_bars> 0 ) counted_bars--;
  limit= Bars -counted_bars+delta;

  ArrayCopySeries(TimeArray,MODE_TIME, Symbol (),TimeFrame);
   ArraySetAsSeries (MainBuffer, true );
   ArraySetAsSeries (SignalBuffer, true );
   ArrayResize (MainBuffer,   100000 );
   ArrayResize (SignalBuffer, 100000 );
  
  iTF= 0 ;
   for (iChart= 0 ; iChart<limit; iChart++)
  {
       while (Time[iChart]<TimeArray[iTF]) iTF++;
      MainBuffer[iChart]= EMPTY_VALUE ;
      SignalBuffer[iChart]= EMPTY_VALUE ;
      MainBuffer[iChart]  = iMACD ( Symbol (),TimeFrame,FastEMA,SlowEMA,Signal, PRICE_CLOSE ,MODE_MAIN,iTF);
      SignalBuffer[iChart]= iMACD ( Symbol (),TimeFrame,FastEMA,SlowEMA,Signal, PRICE_CLOSE ,MODE_SIGNAL,iTF);
       double diff=MainBuffer[iChart]-SignalBuffer[iChart];
      
       if (diff> 0 ) {
         DiffBuffer_up[iChart]=diff;
         DiffBuffer_dn[iChart]= EMPTY_VALUE ;
      }
       else {
         DiffBuffer_dn[iChart]=diff;
         DiffBuffer_up[iChart]= EMPTY_VALUE ;
      }
  }
   return ( 0 );
}

//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| Moving Averages Convergence/Divergence                           |
//+------------------------------------------------------------------+
ENUM_TIMEFRAMES GetTF() {

   switch ( Period ()) {
       case PERIOD_M1 :   return PERIOD_M5 ;
       case PERIOD_M5 :   return PERIOD_M15 ;
       case PERIOD_M15 : return PERIOD_M30 ;
       case PERIOD_M30 : return PERIOD_H1 ;
       case PERIOD_H1 :   return PERIOD_H4 ;
       case PERIOD_H4 :   return PERIOD_D1 ;
       case PERIOD_D1 :   return PERIOD_W1 ;
       case PERIOD_W1 :   return PERIOD_MN1 ;
   }
   
   return ( ENUM_TIMEFRAMES ) Period ();

}
//+------------------------------------------------------------------+