MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 817

 
Seric29:

一つの式に対して、等式、減法、加算、不等式、乗法などをチェックするような小さな関数をたくさん追加すればいいのです。

比較のためには CompareDoublesWithEpsilon(double d1,d2,epsilon) のような関数があるはずです。


PS/「引き算、足し算、掛け算のチェック」ってなんだよ、わかんねーよ :-(

 

M1のバーのオープンタイムを 上位のタイムフレームから見るにはどうしたらいいですか?

低いバーから高いバーを見たい場合は

   int limit=rates_total-prev_calculated;
   if(limit>1)
     {
      limit=rates_total-2;
      ArrayInitialize(BufferUP,EMPTY_VALUE);
      ArrayInitialize(BufferDN,EMPTY_VALUE);
     }
   for(int i=limit; i>=0; i--)
     {
   int yy=  iBarShift(Symbol(),PERIOD_H1,time[i]);
     Print("iTime: ", iTime(Symbol(),PERIOD_H1,yy));
     }
 
yiduwi:

M1のバーオープン 時間を上位のタイムフレームから見るにはどうしたらよいですか?

低いバーから高いバーを見たい場合は

ということです。

datetime time_h1=iTime(_Symbol,PERIOD_H1,1);  // время открытия прошлого бара H1

int bar_m1=iBarShift(_Symbol,PERIOD_M1,time_h1); // соотв. ему бар периода M1

datetime time_m1=iTime(_Symbol,PERIOD_M1,bar_m1); // время его открытия

//追記 - 違いはh2からで、月曜日の朝だけです :-)

 
Maxim Kuznetsov:

私の理解が正しければ、では。

datetime time_h1=iTime(_Symbol,PERIOD_H1,1);  // время открытия прошлого бара H1

int bar_m1=iBarShift(_Symbol,PERIOD_M1,time_h1); // соотв. ему бар периода M1

datetime time_m1=iTime(_Symbol,PERIOD_M1,bar_m1); // время его открытия

//追記 - 違いはh2からで、月曜日の朝だけです :-)

最後のバーH 1の開始時刻が 01:00:00だとすると、01:01:00に開始したバーM1からtime_m1変数に時刻を取得 するにはどうすればよいでしょうか

 
yiduwi:

最後のH1バーが01:00:00に開いたと すると、01:01:00に開いたM1バーから時間をtime_m1変数に取得 するにはどうすればよいでしょうか

time_m1_plus_1=time_h1 + 1 * PeriodSeconds(PERIOD_M1); // 突然ですが :-) 1 分 = 60 秒を足すだけです。

しかし、あなたは日/セッション/週またはエキゾチックな通貨/インデックス/ファンドの変更を危険にさらす場合は、確実にするために、iBarShift、iTimeを使用する - まともな場所でバーが最初の取引(ボリュームなしでバーがない)で形成されているので、取引がない場合は、 "クイック "になります。

 
Maxim Kuznetsov:

time_m1_plus_1=time_h1 + 1 * PeriodSeconds(PERIOD_M1); // 突然ですが :-) 1 分 = 60 秒を足すだけです。

さて、これは貴重なものです。指定した時間が任意の時間枠のバーの中にあることを知るには、次のようにします。

   for(int i=limit; i>=0; i--)
     {
      if(time[i]<=StringToTime("2019.04.23 01:01:00") && time[i]+Period()*PeriodSeconds(PERIOD_M1)>=StringToTime("2019.04.23 01:01:00")
        {
         BufferUP[i]=low[i]-10*Point;//
         }
        }

しかし、時間が偶数で、分なし"2019.04.23 01:00:00" の 場合、矢印は2つのバーにあります、 01:00:00 のバーと 00:00:00 の前のバーに 余分なものを入れない方法は?

 


一日のすべての部分と季節に良い))

七面鳥によって書かれました。それは機能しますが、エキスパートセクションにエラーを永続的に書き込みます。

問題を解決しようとしています...「何を一番上に」..)))

教えてください、プリズ、私が経験不足で台無しにしたところ...。

コード内の問題のある場所を赤で強調表示しました...または緑の方が良いでしょう!?)))

PS MT5のハンドルの動作条件のため、原則としてハンドルオプションを拒否します

コードに重大なバグがある場合は、いくらかの賃金を支払う用意があります。

しかし、私は問題の本質に到達したいと思います!!!!

 //+------------------------------------------------------------------+
//|                                   Ind Sliding Line Level MT5.mq5 |
//|                        Copyright 2019, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots    1
//+----------------------------------------------+
//|  Параметры отрисовки индикатора 1            |
//+----------------------------------------------+
#property indicator_type1    DRAW_LINE
#property indicator_color1    clrRed
#property indicator_width1    1    
//----
enum method
  {
   Simple= MODE_SMA ,
   Exponential= MODE_EMA ,
  };
//----
enum applied
  {
   CLOSE= PRICE_CLOSE ,
   OPEN= PRICE_OPEN ,
   HIGH= PRICE_HIGH ,
   LOW= PRICE_LOW
  };
//--- входные параметры
input int     InpMAPeriod = 10 ;                       // Период мультитаймфреймовой линии
input int     InpBars = 50 ;                           // Расчитать баров (Период линии х 5)
input int     InpMAShift = 0 ;                         // Сдвиг линии
//--- параметры для выбранного таймфрема
input string TimeBar = "2019.04.19 00:00" ;           //Дата начала отсчета
input bool DataBars = false ;                         //Считать по дате (true)
input int MAShift = 2 ;                               //Сдвиг бара таймфрема 
input ENUM_TIMEFRAMES Timeframes = PERIOD_D1 ;       //Таймфрейм скользящей
input method  MethodLine = Simple;                   //Метод  расчета скользящей
input applied AppliedPrice = CLOSE;                 //Расчет цены скользящей
input ENUM_LINE_STYLE MAStyle = STYLE_DASH ;         //Стиль всех скользящих линий
input color ColorLine = clrRed ;                     //Цвет скользящей и таймфрейма
input int maWidthAll = 0 ;                           //Толщина всех скользящих линий
input bool Ray = true ;                               //Сдвиг тренда вправо до шкалы
input bool LineTrend = true ;                         //Выбор Линия(true) Отрезок(false)
input bool HLines = false ;                       //Выключатель горизонтального уровня 
//----
int     i,period_ma,beginbar,nn,BigPeriod;
double ExtLineBuffer[],ArrayPrice[];
double SMA= 0.0 ,EMA= 0.0 ;
double bp,bp1,bp2,bp3;
datetime time_1,time_2;
string smaname= "" ,emaname= "" ;
string tooltipsma= "" ,tooltipema= "" ;
string type_ma= "" ,pr= "" ;
bool    sma= false ,ema= false ,ok;
//+------------------------------------------------------------------+
//|   simple moving average multytimeframes                          |
//+------------------------------------------------------------------+
void CalculateSimpleMA( int rates_total, int prev_calculated, int begin, const double &price[])
  {
   int j,limit;
//--- first calculation or number of bars was changed
   if (prev_calculated== 0 ) // first calculation
     {
      limit=period_ma+begin;
       //--- set empty value for first limit bars
       for (j= 0 ;j<limit- 1 ;j++) ExtLineBuffer[j]= 0.0 ;
       //--- calculate first visible value
       double fvalue= 0 ;
       for (j=begin;j<limit;j++)
         fvalue+=price[j];
      fvalue/=period_ma;
      ExtLineBuffer[limit- 1 ]=fvalue;
     }
   else limit=prev_calculated- 1 ;
//--- main loop
   for (j=limit;j<rates_total && ! IsStopped ();j++)
      ExtLineBuffer[j]=ExtLineBuffer[j- 1 ]+(price[j]-price[j-period_ma])/period_ma;
//---
  }
//+------------------------------------------------------------------+
//|  exponential moving average multytimeframes                      |
//+------------------------------------------------------------------+
void CalculateExponentialMA( int rates_total, int prev_calculated, int begin, const double &price[])
  {
   int     q,limit;
   double SmoothFactor= 2.0 /( 1.0 +period_ma);
//--- first calculation or number of bars was changed
   if (prev_calculated== 0 )
     {
      limit=period_ma+begin;
      ExtLineBuffer[begin]=price[begin];
   for (q=begin+ 1 ;q<limit;q++)
         ExtLineBuffer[q]=price[q]*SmoothFactor+ExtLineBuffer[q- 1 ]*( 1.0 -SmoothFactor);
     }
   else limit=prev_calculated- 1 ;
//--- main loop
   for (q=limit;q<rates_total && ! IsStopped ();q++)
      ExtLineBuffer[q]=price[q]*SmoothFactor+ExtLineBuffer[q- 1 ]*( 1.0 -SmoothFactor);
  }
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {
  period_ma= int (InpMAPeriod< 1 ? 1 : InpMAPeriod);
  smaname= "Ind SMA " + string (InpMAPeriod);
  emaname= "Ind EMA " + string (InpMAPeriod);
//---
   SetIndexBuffer ( 0 ,ExtLineBuffer, INDICATOR_DATA );
   switch (Timeframes)
     {
       case PERIOD_MN1 : BigPeriod= PERIOD_MN1 ; ok= true ;  pr= "MN1" ;   break ;
       case PERIOD_W1 :  BigPeriod= PERIOD_MN1 ; ok= true ;  pr= "W1" ;   break ;
       case PERIOD_D1 :  BigPeriod= PERIOD_W1 ;  ok= true ;  pr= "D1" ;   break ;
       case PERIOD_H12 : BigPeriod= PERIOD_D1 ;  ok= true ;  pr= "H12" ;   break ;
       case PERIOD_H8 :  BigPeriod= PERIOD_D1 ;  ok= true ;  pr= "H8" ;   break ;
       case PERIOD_H4 :  BigPeriod= PERIOD_D1 ;  ok= true ;  pr= "H4" ;   break ;
       case PERIOD_H3 :  BigPeriod= PERIOD_H4 ;  ok= true ;  pr= "H3" ;   break ;
       case PERIOD_H2 :  BigPeriod= PERIOD_H4 ;  ok= true ;  pr= "H2" ;   break ;
       case PERIOD_H1 :  BigPeriod= PERIOD_H4 ;  ok= true ;  pr= "H1" ;   break ;
       case PERIOD_M30 : BigPeriod= PERIOD_H1 ;  ok= true ;  pr= "M30" ;   break ;
       case PERIOD_M20 : BigPeriod= PERIOD_H1 ;  ok= true ;  pr= "M20" ;   break ;
       case PERIOD_M15 : BigPeriod= PERIOD_M30 ; ok= true ;  pr= "M15" ;   break ;
       case PERIOD_M12 : BigPeriod= PERIOD_M15 ; ok= true ;  pr= "M12" ;   break ;
       case PERIOD_M10 : BigPeriod= PERIOD_M15 ; ok= true ;  pr= "M10" ;   break ;
       case PERIOD_M6 :  BigPeriod= PERIOD_M15 ; ok= true ;  pr= "M6" ;   break ;
       case PERIOD_M5 :  BigPeriod= PERIOD_M15 ; ok= true ;  pr= "M5" ;   break ;
       case PERIOD_M4 :  BigPeriod= PERIOD_M15 ; ok= true ;  pr= "M4" ;   break ;
       case PERIOD_M3 :  BigPeriod= PERIOD_M15 ; ok= true ;  pr= "M3" ;   break ;
       case PERIOD_M2 :  BigPeriod= PERIOD_M15 ; ok= true ;  pr= "M2" ;   break ;
       case PERIOD_M1 :  BigPeriod= PERIOD_M15 ; ok= true ;  pr= "M1" ;   break ;
     }
   switch (MethodLine)
     {
       case Simple:       sma= true ;  type_ma= "SMA " ;   break ;
       case Exponential:  ema= true ;  type_ma= "EMA " ;   break ;
     }
//--- set accuracy
   IndicatorSetInteger ( INDICATOR_DIGITS , _Digits );
//--- sets first bar from what index will be drawn
   PlotIndexSetInteger ( 0 , PLOT_DRAW_BEGIN ,period_ma);
//---- line shifts when drawing
   PlotIndexSetInteger ( 0 , PLOT_SHIFT ,InpMAShift);
//---
   PlotIndexSetInteger ( 0 , PLOT_LINE_COLOR ,ColorLine);
//---
   IndicatorSetString ( INDICATOR_SHORTNAME ,type_ma+ " " + string (period_ma));
//---- sets drawing line empty value--
   PlotIndexSetDouble ( 0 , PLOT_EMPTY_VALUE , 0.0 );
//----
   ChartRedraw ( 0 );
//---- initialization done
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 | 
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
   ObjectsDeleteAll ( 0 ,smaname);
   ObjectsDeleteAll ( 0 ,emaname);
   ObjectsDeleteAll ( 0 , "No Period " );
   Comment ( "" ); 
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate ( const int rates_total,
                 const int prev_calculated,
                 const int begin,
                 const double &price[])
  {
//--- минимальное количество баров
   if (rates_total<period_ma- 1 +begin)
   return ( 0 );
//--- Количество начальных баров без отрисовки и значений 
       PlotIndexSetInteger ( 0 , PLOT_DRAW_BEGIN ,period_ma- 1 +begin);
   if (prev_calculated== 0 )
     {
       ArrayInitialize (ExtLineBuffer, 0 );
       ArrayInitialize (ArrayPrice, 0 );
     }
//--- calculation
   switch (MethodLine)
     {
       case Simple:       CalculateSimpleMA(rates_total,prev_calculated,begin,price);       break ;
       case Exponential:  CalculateExponentialMA(rates_total,prev_calculated,begin,price);   break ;
     }
//считаем количество элементов буфера
int size= ArraySize (ExtLineBuffer);
         ArrayResize (ArrayPrice,size, 100000 );
//---- Расчет и построение горизонтального уровня выбранного таймфрейма
 if (DataBars== false )
    beginbar=MAShift;
 if (DataBars== true )
    beginbar= iBarShift ( _Symbol ,Timeframes, StringToTime (TimeBar));
    time_1= iTime ( _Symbol ,Timeframes,beginbar);
    time_2= iTime ( _Symbol ,Timeframes, 0 );

 if (HLines== true )
  {
//+------------------------------------------------------------------+
//|   Simple Moving Average                                          |
//+------------------------------------------------------------------+
 if (sma== true && ok== true && Period ()<=BigPeriod)   //SMA
   {
int   lim=period_ma+beginbar;
double firstValue= 0.0 ;
   for (i=beginbar;i<lim;i++)
   switch (AppliedPrice)
     {
       case 1 : firstValue+= iClose ( _Symbol ,Timeframes,i); break ;
       case 2 : firstValue+= iOpen ( _Symbol ,Timeframes,i);   break ;
       case 3 : firstValue+= iHigh ( _Symbol ,Timeframes,i);   break ;
       case 4 : firstValue+= iLow ( _Symbol ,Timeframes,i);   break ;
   default :  firstValue+= iClose ( _Symbol ,Timeframes,i); break ;
     }
      firstValue/=period_ma;
//-----
      SMA= NormalizeDouble (firstValue, _Digits );
   if (LineTrend== true )
      tooltipsma= "Line " +type_ma+ string (InpMAPeriod)+ "  " +pr+ "\n" + TimeToString ( iTime ( _Symbol ,Timeframes,beginbar), TIME_DATE | TIME_MINUTES )+ "\n" + DoubleToString (SMA, _Digits );
   else
      tooltipsma= "Trend " +type_ma+ string (InpMAPeriod)+ "  " +pr+ "\n" + TimeToString ( iTime ( _Symbol ,Timeframes,beginbar), TIME_DATE | TIME_MINUTES )+ "\n" + "Original Price: " + DoubleToString (SMA, _Digits );
   if (LineTrend== true )
      HLine( 0 ,smaname,tooltipsma,time_1,SMA,MAStyle,maWidthAll,ColorLine);
   else
      PlotTrend( 0 ,smaname,tooltipsma, 0 ,time_1,SMA,time_2,SMA,ColorLine,MAStyle,maWidthAll, true , false , false , true );
//----
   } //sma==true 
//----------------------------------------------------------------------------------------------------------------
//+------------------------------------------------------------------+
//|   Exponential Moving Average                                       |
//+------------------------------------------------------------------+
 if (ema== true && ok== true && Period ()<=BigPeriod)   //EMA
   {
int p,lmt;
double    SmoothFactor= 2.0 /( 1.0 +period_ma);
   if (prev_calculated== 0 )
       lmt= 0 ;
   else 
       lmt=InpBars;
   for (p=lmt;p>=beginbar;p--)
     {
   switch (AppliedPrice)
     {
       case 1 : ArrayPrice[lmt]= iClose ( _Symbol ,Timeframes,lmt); break ;
       case 2 : ArrayPrice[lmt]= iOpen ( _Symbol ,Timeframes,lmt); break ;
       case 3 : ArrayPrice[lmt]= iHigh ( _Symbol ,Timeframes,lmt); break ;
       case 4 : ArrayPrice[lmt]= iLow ( _Symbol ,Timeframes,lmt); break ;
   default :  ArrayPrice[lmt]= iClose ( _Symbol ,Timeframes,lmt); break ;
     }
   switch (AppliedPrice)
     {
       case 1 : ArrayPrice[p]= iClose ( _Symbol ,Timeframes,p)*SmoothFactor+ArrayPrice[p+ 1 ]*( 1.0 -SmoothFactor); break ;
       case 2 : ArrayPrice[p]= iOpen ( _Symbol ,Timeframes,p)*SmoothFactor+ArrayPrice[p+ 1 ]*( 1.0 -SmoothFactor);   break ;
       case 3 : ArrayPrice[p]= iHigh ( _Symbol ,Timeframes,p)*SmoothFactor+ArrayPrice[p+ 1 ]*( 1.0 -SmoothFactor);   break ;
       case 4 : ArrayPrice[p]= iLow ( _Symbol ,Timeframes,p)*SmoothFactor+ArrayPrice[p+ 1 ]*( 1.0 -SmoothFactor);   break ;
   default :  ArrayPrice[p]= iClose ( _Symbol ,Timeframes,p)*SmoothFactor+ArrayPrice[p+ 1 ]*( 1.0 -SmoothFactor); break ;
     }
     } //for
/ /------------------------------------------------------------------------------------------------------------- 
      EMA= NormalizeDouble (ArrayPrice[beginbar], _Digits );
   if (LineTrend== true )
      tooltipema= "Line " +type_ma+ string (InpMAPeriod)+ "  " +pr+ "\n" + TimeToString ( iTime ( _Symbol ,Timeframes,beginbar), TIME_DATE | TIME_MINUTES )+ "\n" + DoubleToString (EMA, _Digits );
   else
      tooltipema= "Trend " +type_ma+ string (InpMAPeriod)+ "  " +pr+ "\n" + TimeToString ( iTime ( _Symbol ,Timeframes,beginbar), TIME_DATE | TIME_MINUTES )+ "\n" + "Original Price: " + DoubleToString (EMA, _Digits );
   if (LineTrend== true )
      HLine( 0 ,smaname,tooltipema,time_1,EMA,MAStyle,maWidthAll,ColorLine);
   else
      PlotTrend( 0 ,smaname,tooltipema, 0 ,time_1,EMA,time_2,EMA,ColorLine,MAStyle,maWidthAll, true , false , false , true );
       ArrayFree (ArrayPrice);
//----
   }   //ema==true
   }   //if(HLines==true)
      
//--- return value of prev_calculated for next call
   return (rates_total);
  }
//+------------------------------------------------------------------+
//| Вывод горизонтальной линии на график                             |
//+------------------------------------------------------------------+
bool HLine( const long               chart_ID= 0 ,
           string                   name= "" ,
           string                   tooltip= "" ,
           datetime                 time= 0 ,
           double                   price= 0 ,
           int                      style= STYLE_SOLID ,
           int                      width= 1 ,
           color                    clr= clrBlack )
  {
//--- сбросим значение ошибки 
   ResetLastError (); 
//---
 if (! ObjectCreate (chart_ID,name, OBJ_HLINE , 0 , 0 ,price)) 
     { 
       Print ( __FUNCTION__ , ": не удалось создать горизонтальную линию! Код ошибки = " , GetLastError ()); 
   return ( false ); 
     }       
       ObjectSetInteger (chart_ID,name, OBJPROP_STYLE , style);
       ObjectSetInteger (chart_ID,name, OBJPROP_WIDTH , width);
       ObjectSetInteger (chart_ID,name, OBJPROP_COLOR , clr);
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектов 
       ObjectSetInteger (chart_ID,name, OBJPROP_HIDDEN , true ); 
       ObjectSetString (chart_ID,name, OBJPROP_TOOLTIP ,tooltip);
//----
   return ( true );
  }
//+------------------------------------------------------------------+
//|  Построение трендовой линии на графике                           |
//+------------------------------------------------------------------+
bool PlotTrend( const long               chart_ID= 0 ,
               string                   name= "" ,
               string                   tooltip= "" ,
               const int                subwindow= 0 ,
               datetime                 time1= 0 ,
               double                   price1= 0 ,
               datetime                 time2= 0 ,
               double                   price2= 0 ,
               const color              clr= clrBlack ,
               const ENUM_LINE_STYLE    style= STYLE_SOLID ,
               const int                width= 2 ,
               const bool               back= true ,
               const bool               selection= false ,
               const bool               ray= false ,
               const bool               hidden= true )
  {
//----
   ResetLastError ();
 if ( ObjectFind (chart_ID,name)!=subwindow)
   {
 if (! ObjectCreate (chart_ID,name, OBJ_TREND ,subwindow,time1,price1,time2,price2))
   {
   Print ( __FUNCTION__ , ": не удалось создать трендовую линию! Код ошибки = " , GetLastError ()); 
   return ( false );
   }
   }
 else
   {
   ObjectMove (chart_ID,name, 0 ,time1,price1);
   ObjectMove (chart_ID,name, 1 ,time2,price2);
   }
   ObjectSetInteger (chart_ID,name, OBJPROP_COLOR ,clr);
   ObjectSetInteger (chart_ID,name, OBJPROP_STYLE ,style);
   ObjectSetInteger (chart_ID,name, OBJPROP_WIDTH ,width);
   ObjectSetInteger (chart_ID,name, OBJPROP_BACK ,back);
   ObjectSetInteger (chart_ID,name, OBJPROP_SELECTABLE ,selection);
   ObjectSetInteger (chart_ID,name, OBJPROP_SELECTED ,selection);
   ObjectSetInteger (chart_ID,name, OBJPROP_RAY ,ray);
   ObjectSetInteger (chart_ID,name, OBJPROP_HIDDEN ,hidden);
   ObjectSetString (chart_ID,name, OBJPROP_TOOLTIP ,tooltip);
//----
   return ( true );
  }
//+------------------------------------------------------------------+
 
kopeyka2:

インディーズを書きました。動作はするが、Expertsセクションにしつこくエラーを書き込む。

私のログはクリーンで、任意にモードを切り替えています(EMAもテスト済み)。エラーが表示される可能性のある設定のバリエーションを教えてください。

動作とエラーが同時に発生するのはどうなんだろうと考えていました。

 
yiduwi:

これは貴重なもので、何が必要なのか)与えられた時間が任意の時間枠のバーの内側にあることを知るために、次のことを行う必要があります。

しかし、時間が偶数で、分なし"2019.04.23 01:00:00" 場合、矢印は、01:00:00 のバーと 00:00:00 の前のバーの2つのバーにある 余分なものを入れない方法は?

if (time[i]>=time_m1 && time[i]<time_m1+PeriodSeconds(PERIOD_M1) {

  // время time[i] попало внутрь бара открытого в time_m1

}

 
Igor Zakharov:

ログはきれいで、任意にモードを切り替えています(EMAもテスト済み)。エラーが発生する可能性のある設定値のオプションを指定します。

動作と同時にエラーも出るのが面白かったです。

絵馬20 2019.04.23 10:00


EMAライン20 2019.04.23 00:00

オンライン接続がない状態でMT5を起動すると、すぐに「array out...」と表示される。

エラーは様々ですが、常に存在します。オンラインでも再現可能だが、MTのスイッチが入っている時の方が多い。


そんな "バミューダパラレップス "の謎に迫ります。