차이 미적분, 예. - 페이지 8

 
유리 아사울렌코 :


RU의 장점은 무엇입니까?

저는 이점을 전혀 주장하지 않습니다.

제 생각에는:

처음에 시뮬레이션된 시스템의 이미지(복잡한 시스템: 비행기, 자동차)를 어느 정도 확실하게 나타내면 즉시 공간을 표시하고(예: 데카르트 시스템으로) 시스템을 모델링하는 것이 더 편리합니다. 전체 수학적 장치를 사용합니다. "위로부터의 디자인" 접근 방식 .

시스템에 대한 완전한 이해가 없다면(그들은 숲, 늪 또는 외환에 접근했습니다 :) 나는 나 자신에게 말하고 있습니다), 그들은 이미 취한 단계와 다소 좁은 개요에 의존할 수밖에 없습니다. 이것은 차이(반복) 미적분에 더 가깝습니다. 상향식 연구 접근 방식. 알고리즘을 사용하면 여러 단계를 기반으로 하여 "최상위에서 설계" 접근 방식의 관점에서 무슨 일이 일어나고 있는지 이해할 수 있습니다.

이 비유에서 신경망은 탐색하고 경로 및 전체 그림을 제공하는 프로브인 드론이 있는 시스템입니다. 연구 과정 에서 그녀는 관찰된 것과 선택의 중요성에 대해 프로그래밍된 많은 결정을 내릴 것입니다 . 개인적으로, 나는 항상 다른 사람들의 결정에 의존할 준비가 되어 있지 않습니다. :))))))


그가 어떻게 대답할 수 있었을까? )) 우리는 다시 philo_Sofia에서 한 발짝 떨어져 있습니다. 나는 거기에 가고 싶지 않아. ))

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

차이 미적분, 예.

알렉세이 판필로프 , 2018.01.10 16:51


나는 철학 없이 이 스레드에서 제안합니다. 수학, 프로그래밍, 테스트, 최적화만 합시다.


 
니콜라이 셈코 :

SMA의 SMA는 내 생각에 "눈썹이 아니라 눈"이며 푸리에에 관한 것입니다. 어쩌면 우리는 더 많은 것을 얻을 것입니다.

P/S 02/01/2018 차이가 있다고 생각합니다 . 이 라인에서 Banzai.mq4 표시기를 반복해 보십시오.

SMA는 본질적으로 매우 작은 톱에 불과하므로 두 번째 차이를 취할 때 지표의 톱니 선을 가정합니다.

 
알렉세이 판필로프 :

물론 이후의 차이점도 새로운 정보로 간주될 수 있습니다.

사실, 이미 첫 번째 차이점에서 우리가 구성을 그리는 대수 라인이 완전히 명확하지 않습니다. 그리고 "어깨"가 증가하면 모든 것이 혼란스러워집니다. ))))

예를 들어, 새로운 정보로서 가격 인상을 위한 또 다른 사용 사례가 있습니다. 그 안에서 증분은 명시적으로 차이로 읽혀집니다.

1*Y1 -1*Y2-2*Y2 +3*Y3-1*Y4 =0

1*Y1 -1*Y2-3*Y2 +6*Y3-4*Y4 + 1*Y5 =0

1*Y1 -1*Y2-4*Y2 +10*Y3-10*Y4 + 5*Y5 -1*Y6=0

1*Y1 -1*Y2-5*Y2 +15*Y3-20*Y4 + 15*Y5 -6*Y6 + 1*Y7=0

1*Y1 -1*Y2-6*Y2 +21*Y3-35*Y4 + 35*Y5 -21*Y6 + 7*Y7 -1*Y8=0


2*Y2 =1*Y1 -1*Y2 +3*Y3-1*Y4

3*Y2 =1*Y1 -1*Y2 +6*Y3-4*Y4 + 1*Y5

4*Y2 =1*Y1 -1*Y2 +10*Y3-10*Y4 + 5*Y5 -1*Y6

5*Y2 =1*Y1 -1*Y2 +15*Y3-20*Y4 + 15*Y5 -6*Y6 + 1*Y7

6*Y2 =1*Y1 -1*Y2 +21*Y3-35*Y4 + 35*Y5 -21*Y6 + 7*Y7 -1*Y8

      a1_Buffer[i]=(open[i]-open[i+ 1 ]   + 3 *a1_Buffer[i+ 1 ]   - 1 *a1_Buffer[i+ 2 ]  )/ 2 ;
      a2_Buffer[i]=(open[i]-open[i+ 1 ]   + 6 *a2_Buffer[i+ 1 ]   - 4 *a2_Buffer[i+ 2 ]   + 1 *a2_Buffer[i+ 3 ]  )/ 3 ;
      a3_Buffer[i]=(open[i]-open[i+ 1 ]   + 10 *a3_Buffer[i+ 1 ]  - 10 *a3_Buffer[i+ 2 ]  + 5 *a3_Buffer[i+ 3 ]  - 1 *a3_Buffer[i+ 4 ])/ 4 ;
      a4_Buffer[i]=(open[i]-open[i+ 1 ]   + 15 *a4_Buffer[i+ 1 ]  - 20 *a4_Buffer[i+ 2 ]  + 15 *a4_Buffer[i+ 3 ]  - 6 *a4_Buffer[i+ 4 ]  + 1 *a4_Buffer[i+ 5 ])/ 5 ;
      a5_Buffer[i]=(open[i]-open[i+ 1 ]   + 21 *a5_Buffer[i+ 1 ]  - 35 *a5_Buffer[i+ 2 ]  + 35 *a5_Buffer[i+ 3 ]  - 21 *a5_Buffer[i+ 4 ]  + 7 *a5_Buffer[i+ 5 ]  - 1 *a5_Buffer[i+ 6 ])/ 6 ;
그림은 5차 다항식(연결된 점의 수에 따라)에 의해 조건부로 구성된 선(빨간색)도 그래프 근처에 자신 있게 머물기 시작했음을 보여줍니다.


말하자면, 우리는 첫 번째 차이(가격 증분)에 대한 4차 다항식을 희생하여 5차로 차수(포인트 수 측면에서)를 증가시켰습니다.

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

차이 미적분, 예.

막심 드미트리예프 스키 , 2018.01.31 05:37

거기에서 행렬은 단순히 이미 퇴화합니다. :) 이러한 경우 정규화가 적용 되고 차수가 감소합니다.
정규화인가?



 
IMHO, 퍼셉트론은 최고의 미적분학입니다. 내가 사용하는 것입니다.
 

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

차이 미적분, 예.

알렉세이 판필로프 , 2018.01.10 18:34

나는 우리가 전문가와 최적화에 도달할 것이라고 생각합니다.

최적화를 위해 메시지 51 의 표시기에 외삽 암을 변경할 수 있는 기능을 추가해 보겠습니다. 3차 다항식에 의한 외삽.

 //|                                Copyright 2018, Aleksey Panfilov. |
//|                                                filpan1@yandex.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2018, Aleksei Panfilov. filpan1@yandex.ru"
#property link        "filpan1@yandex.ru"
#property version    "1.2"
#property description      "2018_01_10_Polynom_s4_s2_p72"
#property strict

#include <MovingAverages.mqh>


#property indicator_chart_window
#property indicator_buffers 6
#property indicator_plots    2
//--- plot a1_
#property indicator_label1    "MACD"
#property indicator_type1    DRAW_LINE
#property indicator_color1    clrSilver
#property indicator_style1    STYLE_SOLID
#property indicator_width1    2
//--- plot a2_
#property indicator_label2    "Signal"
#property indicator_type2    DRAW_LINE
#property indicator_color2    clrYellow
#property indicator_style2    STYLE_SOLID
#property indicator_width2    3
//--- plot a3_
#property indicator_label3    "Fast_line_1"
#property indicator_type3    DRAW_LINE
#property indicator_color3    clrSilver
#property indicator_style3    STYLE_SOLID
#property indicator_width3    8
//--- plot a4_
#property indicator_label4    "Fast_line_2"
#property indicator_type4    DRAW_LINE
#property indicator_color4    clrBlue
#property indicator_style4    STYLE_SOLID
#property indicator_width4    3
//--- plot a5_
#property indicator_label5    "Slow_line_1"
#property indicator_type5    DRAW_LINE
#property indicator_color5    clrDarkGreen
#property indicator_style5    STYLE_SOLID
#property indicator_width5    3
//--- plot a6_
#property indicator_label6    "Slow_line_2"
#property indicator_type6    DRAW_LINE
#property indicator_color6    clrRed
#property indicator_style6    STYLE_SOLID
#property indicator_width6    3 //--- input parameters

//         int   LIN_1_STEP    =4; //line_1_power
//input int      LIN_1_PLECHO  =72; //Fast_line_1_leverage
//         int   LIN_2_STEP    =2;//line_2_power
//input int      LIN_2_PLECHO  =78; //Fast_line_2_leverage
//         int   LIN_3_STEP    =4;//line_3_power
//input int      LIN_3_PLECHO  =72; //Slow_line_1_leverage
//         int   LIN_4_STEP    =2;//Slow_line_4_power
//input int      LIN_4_PLECHO  =72;//Slow_line_2_leverage
input          int leverage = 72 ;
input          int TOCHKA_VHODA = 300 ; // start_point
//input int           base  =450;
       int    point_shift_1 = 0 ;
       int    point_shift_2 = 0 ;
//input int   Multiplikator = 10;
//input int   InpSignalSMA  = 9;  // Signal SMA Period



//--- indicator buffers

double a1_Buffer[];
double a2_Buffer[];
double a3_Buffer[];
double a4_Buffer[];
double a5_Buffer[];
double a6_Buffer[];
//double a7_Buffer[];
//double a8_Buffer[];
/**/


//===========================================================================================
   double Znach;


//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {
 
//--- indicator buffers mapping
   SetIndexBuffer ( 0 ,a5_Buffer, INDICATOR_DATA );
   SetIndexBuffer ( 1 ,a6_Buffer, INDICATOR_DATA );
   SetIndexBuffer ( 2 ,a1_Buffer, INDICATOR_DATA );
   SetIndexBuffer ( 3 ,a2_Buffer, INDICATOR_DATA );
   SetIndexBuffer ( 4 ,a3_Buffer, INDICATOR_DATA );
   SetIndexBuffer ( 5 ,a4_Buffer, INDICATOR_DATA );
//----
//----
   SetIndexShift ( 2 , 0 );
   SetIndexShift ( 0 , 20 );
   SetIndexShift ( 3 , 92 -leverage);
   SetIndexShift ( 4 , 38 );
   SetIndexShift ( 5 , 56 );
   SetIndexShift ( 1 , 74 );

//    if(TOCHKA_VHODA <= (LIN_1_PLECHO+25)*LIN_1_INTERVAL) TOCHKA_VHODA=(LIN_1_PLECHO+25)*LIN_1_INTERVAL;  
//    if(TOCHKA_VHODA <= (LIN_2_PLECHO+25)*LIN_2_INTERVAL) TOCHKA_VHODA=(LIN_2_PLECHO+25)*LIN_2_INTERVAL;  
//    if(TOCHKA_VHODA <= (LIN_3_PLECHO+25)*LIN_3_INTERVAL) TOCHKA_VHODA=(LIN_3_PLECHO+25)*LIN_3_INTERVAL;  
//    if(TOCHKA_VHODA <= (LIN_4_PLECHO+25)*LIN_4_INTERVAL) TOCHKA_VHODA=(LIN_4_PLECHO+25)*LIN_4_INTERVAL;  
//    if(TOCHKA_VHODA <= (base*2+25))                      TOCHKA_VHODA=(base*2+25);  

//------
//===========================================================================================
//===========================================================================================

   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate ( const int rates_total,
                 const int prev_calculated,
                 const datetime &time[],
                 const double &open[],
                 const double &high[],
                 const double &low[],
                 const double &close[],
                 const long &tick_volume[],
                 const long &volume[],
                 const int &spread[])
  {

   int i,z,limit;
//   int Bars=Bars(_Symbol,_Period);

   if (prev_calculated== 0 ) // first calculation    
     {
      limit=rates_total-TOCHKA_VHODA;
       //--- set empty value for first limit bars
//Print("Bars=",Bars," rates_total=",rates_total," TOCHKA=",TOCHKA_VHODA," limit=",limit);
       if (limit< 1 ) return ( 0 );
       for (i=rates_total- 1 ;i>=limit;i--)
      {
       a1_Buffer[i]=open[limit+ 1 ];
       a2_Buffer[i]=open[limit+ 1 ];
       a3_Buffer[i]=open[limit+ 1 ];
       a4_Buffer[i]=open[limit+ 1 ];
       a5_Buffer[i]=open[limit+ 1 ];
       a6_Buffer[i]=open[limit+ 1 ];
      }

     }
   else limit=rates_total-prev_calculated;
//--- main loop
   for (i=limit;i>= 0 && ! IsStopped ();i--)
   {
//===========================================================================================
   Znach = 0 ; //iMA(NULL,0,base*2,0,MODE_SMA,PRICE_OPEN,i);
//===========================================================================================

 
      a1_Buffer[i]=((open[i] - Znach)    + 5061600 *a1_Buffer[i+ 1 ]- 7489800     *a1_Buffer[i+ 2 ]+ 4926624 *a1_Buffer[i+ 3 ]- 1215450 *a1_Buffer[i+ 4 ])/ 1282975 ;

      a5_Buffer[i+ 92 ]=a1_Buffer[i];   if (i>= 0 ) { for (z= 92 - 1 ;z>= 0 ;z--){        a5_Buffer[i+ 0 +z]=   4 *a5_Buffer[i+ 1 +z]  -   6 *a5_Buffer[i+ 2 +z]  +   4 *a5_Buffer[i+ 3 +z]  - 1 *a5_Buffer[i+ 4 +z];  }}


      a2_Buffer[i+ 92 -leverage]=a5_Buffer[i+ 92 -leverage]; 
      
//      a3_Buffer[i+38]=a5_Buffer[i+38]; 
      
//      a4_Buffer[i+56]=a5_Buffer[i+56];
        
//      a6_Buffer[i+74]=a5_Buffer[i+74];
      
 //     a4_Buffer[i+92]=a1_Buffer[i];   if(i<=1) { for(z=92-1;z>=0;z--){        a4_Buffer[i+0+z]=  5*a4_Buffer[i+1+z]  -  10*a4_Buffer[i+2+z]   +   10*a4_Buffer[i+3+z]  -  5*a4_Buffer[i+4+z]  +  1*a4_Buffer[i+5+z];  }}

 //     a3_Buffer[i+292]=a2_Buffer[i];   if(i<=1) { for(z=292-1;z>=0;z--){         a3_Buffer[i+0+z]=  2.998096443*a3_Buffer[i+1+z]  -  2.998096443*a3_Buffer[i+2+z]   +   1*a3_Buffer[i+3+z]   ;  }}

 //     a5_Buffer[i+92]=a2_Buffer[i];   if(i<=1) { for(z=92-1;z>=0;z--){        a5_Buffer[i+0+z]=  3*a5_Buffer[i+1+z]  -  3*a5_Buffer[i+2+z]   +   1*a5_Buffer[i+3+z]   ;  }}

 //     a6_Buffer[i+292]=a2_Buffer[i];   if(i<=1) { for(z=292-1;z>=0;z--){         a6_Buffer[i+0+z]=  3.998096443*a6_Buffer[i+1+z]  -  5.996192886*a6_Buffer[i+2+z]   +   3.998096443*a6_Buffer[i+3+z]  -  1*a6_Buffer[i+4+z] ;  }}


//      a3_Buffer[i]=((open[i] - Znach)    +5061600*a3_Buffer[i+1 ]-7489800    *a3_Buffer[i+2 ]+4926624*a3_Buffer[i+3 ]-1215450*a3_Buffer[i+4 ])/1282975;

//      a4_Buffer[i]=  2701*a3_Buffer[i]   -5328   *a3_Buffer[i+1 ]    +  2628 *a3_Buffer[i+2 ];



//================================================================================================================================================================================================
//================================================================================================================================================================================================

//   a5_Buffer[i] = (a2_Buffer[i+point_shift_1] - a4_Buffer[i+point_shift_2])* Multiplikator;

   } 
//----
//--- signal line counted in the 2-nd buffer

//     ExponentialMAOnBuffer(rates_total,prev_calculated,0,InpSignalSMA,a5_Buffer,a6_Buffer);

//--- done

//--- return value of prev_calculated for next call
   return (rates_total);
  }
//+------------------------------------------------------------------+


Разностное исчисление, примеры.
Разностное исчисление, примеры.
  • 2018.01.18
  • www.mql5.com
Предлагаю собрать в эту ветку индикаторы и эксперты на разностном исчислении, в открытом коде...
 

지표의 기능을 보기 위해 잘 알려진 사내 이동 평균 .mq4 Expert Advisor를 사용해 보겠습니다.

두 곡선의 교차점을 유일한 신호로 사용합니다. 변경해 보겠습니다.

 //+------------------------------------------------------------------+
//|                                               Moving Average.mq4 |
//|                   Copyright 2005-2014, MetaQuotes Software Corp. |
//|                                              http://www.mql4.com |
//+------------------------------------------------------------------+
#property copyright    "2005-2014, MetaQuotes Software Corp."
#property link          "http://www.mql4.com"
#property description "Moving Average sample expert advisor"

#define MAGICMA   20131111
//--- Inputs
input double Lots          = 0.1 ;
input double MaximumRisk   = 0.02 ;
input double DecreaseFactor= 3 ;
input int     leverage_1  = 72 ;
input int     leverage_2  = 56 ;
//input int    MovingPeriod  =12;
//input int    MovingShift   =6;
//+------------------------------------------------------------------+
//| Calculate open positions                                         |
//+------------------------------------------------------------------+
int CalculateCurrentOrders( string symbol)
  {
   int buys= 0 ,sells= 0 ;
//---
   for ( int i= 0 ;i< OrdersTotal ();i++)
     {
       if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )== false ) break ;
       if ( OrderSymbol ()== Symbol () && OrderMagicNumber ()==MAGICMA)
        {
         if ( OrderType ()== OP_BUY )  buys++;
         if ( OrderType ()== OP_SELL ) sells++;
        }
     }
//--- return orders volume
   if (buys> 0 ) return (buys);
   else        return (-sells);
  }
//+------------------------------------------------------------------+
//| Calculate optimal lot size                                       |
//+------------------------------------------------------------------+
double LotsOptimized()
  {
   double lot=Lots;
   int     orders= HistoryTotal ();     // history orders total
   int     losses= 0 ;                   // number of losses orders without a break
//--- select lot size
   lot= NormalizeDouble ( AccountFreeMargin ()*MaximumRisk/ 1000.0 , 1 );
//--- calcuulate number of losses orders without a break
   if (DecreaseFactor> 0 )
     {
       for ( int i=orders- 1 ;i>= 0 ;i--)
        {
         if ( OrderSelect (i, SELECT_BY_POS , MODE_HISTORY )== false )
           {
             Print ( "Error in history!" );
             break ;
           }
         if ( OrderSymbol ()!= Symbol () || OrderType ()> OP_SELL )
             continue ;
         //---
         if ( OrderProfit ()> 0 ) break ;
         if ( OrderProfit ()< 0 ) losses++;
        }
       if (losses> 1 )
         lot= NormalizeDouble (lot-lot*losses/DecreaseFactor, 1 );
     }
//--- return lot size
   if (lot< 0.1 ) lot= 0.1 ;
   return (lot);
  }
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |2018_02_02_EMA_Polynom_s4_s3_p72_v.2
//+------------------------------------------------------------------+
void CheckForOpen()
  {
   double ma_1,ma_2,ma_1_P,ma_2_P;
   int     res;
//--- go trading only for first tiks of new bar
//   if(Volume[0]>1) return;
//--- get Moving Average 
//   ma=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0);
 ma_1= iCustom ( NULL , 0 , "2018_02_02_EMA_Polynom_s4_s3_p72_v.2" ,leverage_1, 300 , 3 , 0 );
 ma_2= iCustom ( NULL , 0 , "2018_02_02_EMA_Polynom_s4_s3_p72_v.2" ,leverage_2, 300 , 3 , 0 );
 ma_1_P= iCustom ( NULL , 0 , "2018_02_02_EMA_Polynom_s4_s3_p72_v.2" ,leverage_1, 300 , 3 , 1 );
 ma_2_P= iCustom ( NULL , 0 , "2018_02_02_EMA_Polynom_s4_s3_p72_v.2" ,leverage_2, 300 , 3 , 1 );
//--- sell conditions
   if (ma_2_P < ma_1_P && ma_1 < ma_2)
     {
      res= OrderSend ( Symbol (), OP_SELL ,LotsOptimized(), Bid , 3 , 0 , 0 , "" ,MAGICMA, 0 ,Red);
       return ;
     }
//--- buy conditions
   if (ma_2_P > ma_1_P && ma_1 > ma_2)
     {
      res= OrderSend ( Symbol (), OP_BUY ,LotsOptimized(), Ask , 3 , 0 , 0 , "" ,MAGICMA, 0 ,Blue);
       return ;
     }
//---
  }
//+------------------------------------------------------------------+
//| Check for close order conditions                                 |
//+------------------------------------------------------------------+
void CheckForClose()
  {
   double ma_1,ma_2,ma_1_P,ma_2_P;
//--- go trading only for first tiks of new bar
//   if(Volume[0]>1) return;
//--- get Moving Average 
//   ma=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0);
 ma_1= iCustom ( NULL , 0 , "2018_02_02_EMA_Polynom_s4_s3_p72_v.2" ,leverage_1, 300 , 3 , 0 );
 ma_2= iCustom ( NULL , 0 , "2018_02_02_EMA_Polynom_s4_s3_p72_v.2" ,leverage_2, 300 , 3 , 0 );
 ma_1_P= iCustom ( NULL , 0 , "2018_02_02_EMA_Polynom_s4_s3_p72_v.2" ,leverage_1, 300 , 3 , 2 );
 ma_2_P= iCustom ( NULL , 0 , "2018_02_02_EMA_Polynom_s4_s3_p72_v.2" ,leverage_2, 300 , 3 , 2 );
//---
   for ( int i= 0 ;i< OrdersTotal ();i++)
     {
       if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )== false ) break ;
       if ( OrderMagicNumber ()!=MAGICMA || OrderSymbol ()!= Symbol ()) continue ;
       //--- check order type 
       if ( OrderType ()== OP_BUY )
        {
         if (ma_2_P <= ma_1_P && ma_1 < ma_2)
           {
             if (! OrderClose ( OrderTicket (), OrderLots (), Bid , 3 ,White))
               Print ( "OrderClose error " , GetLastError ());
           }
         break ;
        }
       if ( OrderType ()== OP_SELL )
        {
         if (ma_2_P >= ma_1_P && ma_1 > ma_2)
           {
             if (! OrderClose ( OrderTicket (), OrderLots (), Ask , 3 ,White))
               Print ( "OrderClose error " , GetLastError ());
           }
         break ;
        }
     }
//---
  }
//+------------------------------------------------------------------+
//| OnTick function                                                  |
//+------------------------------------------------------------------+
void OnTick ()
  {
//--- check for history and trading
   if ( Bars < 100 || IsTradeAllowed ()== false )
       return ;
//--- calculate open orders by current symbol
   if (CalculateCurrentOrders( Symbol ())== 0 ) CheckForOpen();
   else                                     CheckForClose();
//---
  }
//+------------------------------------------------------------------+
 


파일:
2018_02_02.zip  523 kb
 

EURUSD, M15, 2포인트의 동일한 스프레드 사용 가능:

죄송하지만 코드를 넣을 수 없습니다

파일:
 
레나트 아크티아모프 :

죄송하지만 코드를 넣을 수 없습니다

어쨌든 마지막 몇 개의 막대가 다시 그려지며 이는 코드 값 = 0을 의미합니다.
 
레나트 아크티아모프 :

EURUSD, М15, 2포인트의 동일한 스프레드를 사용할 수 있습니다.

죄송하지만 코드를 넣을 수 없습니다

" 네 자리 "에서?

사유: