초보자의 질문 MQL5 MT5 MetaTrader 5 - 페이지 395

 
Максим Вдовицкий :
이렇게하면 차트 AVERAGE RANGE 스크립트에 스크립트 창이 나타나지 않습니다.
일지에는 모든 것이 일반적으로 그가 부름을 받았을 때, 그가 한 일, 그가 해고 된 것 ...
 
모두 감사합니다!!!
 
친구, 바이너리 옵션 거래를 위한 주문을 여는 스크립트를 알려주세요. 그렇지 않으면 새로운 가격, 새로운 가격이 있으므로 3분 동안 찌를 수 있습니다. 그러면 당신은 할 필요가 없습니다!!!
 
Максим Вдовицкий :
친구, 바이너리 옵션 거래를 위한 주문을 여는 스크립트를 알려주세요. 그렇지 않으면 새로운 가격, 새로운 가격이 있으므로 3분 동안 찌를 수 있습니다. 그러면 당신은 할 필요가 없습니다!!!
그리고 스크립트에서도 같은 일이 일어날 것입니다. 수동 거래가 다시 인용 된다면 자동 거래가 훨씬 더 나을 것입니다.
 
Максим Вдовицкий :
친구, 바이너리 옵션 거래를 위한 주문을 여는 스크립트를 알려주세요. 그렇지 않으면 새로운 가격, 새로운 가격이 있으므로 3분 동안 찌를 수 있습니다. 그러면 당신은 할 필요가 없습니다!!!
어떤 브로커?
 
Evgeny Belyaev :
어떤 브로커?
그랜드 ... 그리고 캐피탈과 알파리, 일반적으로 사람들은 거래 패널이나 스크립트에서 모든 것이 더 재미있다고 쓰지만 바이너리 패널을 찾을 수 없습니다. 유료 만, 누군가에게 감사 할 것입니다. 누가 초보자에게 말할 것입니다.
 

모두를 환영합니다! 입찰가 배열로 MA를 계산하는 방법에 대한 질문입니다.

계산되지 않는 이유를 알려주세요.

 macurrent0 = 0 постоянно
 macurrent1 , macurrent2, macurrent3 имеют одинаковое не правильное не меняющееся значение

저것들. 주석에서 항상 0입니다.

기능

배열에 저장된 데이터에 대해 계산된 이동 평균 기술 지표 의 값반환하지 않습니다 .

이중 iMAOnArray (

...
 extern int Ma_period= 15 ;
double      xBuffer_Bid  []; // Массив значений   динамический, в котором индекс - номер тика, значение - это бид 
                            

int SIZE= 0 ;                 // Вспомогательная переменная для массива                                  
int tickCounter, tickCounter_Current; 
double MaxSpeed;       // максимальная средняя скорость тиков с запуска системы

//+------------------------------------------------------------------+
int init()
  {   
//--- устанавливаем размер динамического массива
   
   if ( ArrayResize (xBuffer_Bid, 2000000 )< 0 ) { Print ( " Ошибка в изменении размера массива " ); return ( false );}
//--- установим индексацию для буфера как в таймсерии для динамического массива
   // ArraySetAsSeries(xBuffer_Time,true);    
//---   Возвращает количество элементов указанного массива. 
   
   int S_Bid= ArraySize (xBuffer_Bid);   
   if (S_Bid>= 0 ) Print ( "Размер массива S_Бид: " ,S_Bid);
   else Print ( "Ошибка. Массив S_Time не создан " ,S_Bid);        
   ArrayInitialize (xBuffer_Bid, 0 );
   
      
   return ( 0 );
  }  
//+------------------------------------------------------------------+
int start()
  {  
   double avgBid = 0 ;     // средняя цена Бид
   int k= 0 ;               // вспомогательная переменная для цикла
   double Summ_Time = 0 ; // время поступления крайней котировки для расчёта 
   double avgTime;       // среднее время поступление тиков 
   double avgSpeed;       // средняя скорость их поступления
  

  
  
  ArrayResize (xBuffer_Bid,SIZE);                                         // увеличение размера массивов на 1
   
   if (SIZE> 0 ) 
      {
       xBuffer_Bid[SIZE- 1 ] = NormalizeDouble (MarketInfo( _Symbol , MODE_BID ), Digits );                     // заполнение массива Bid  
       if ( ArraySize (xBuffer_Bid) < 2147483647 ) //  
           Print ( " Текущее значение xBuffer_Bid [SIZE-1] = " , DoubleToStr(xBuffer_Bid[SIZE- 1 ], Digits ) );            
      } 
   Print ( " Текущее значение SIZE = " , DoubleToStr(SIZE, 2 ) );   
   SIZE ++;                                                               // счётчик индекса массивов                                                                                                      
  
...
     
       // --------------   Расчёт МА по массиву бидов  --------------------------
       
         if ( SIZE >= Ma_period)
         if ( ArraySize (xBuffer_Bid) < 2147483647 ) 
           { 
             double macurrent0=iMAOnArray(xBuffer_Bid, 0 ,Ma_period, 0 , MODE_EMA ,SIZE- 1 );
             double macurrent1=iMAOnArray(xBuffer_Bid, 0 ,Ma_period, 0 , MODE_EMA ,SIZE- 2 );
             double macurrent2=iMAOnArray(xBuffer_Bid, 0 ,Ma_period, 0 , MODE_EMA ,SIZE- 3 );
             double macurrent3=iMAOnArray(xBuffer_Bid, 0 ,Ma_period, 0 , MODE_EMA ,SIZE- 4 );
           //Print("
           }

  
     if (time_s!= 0 ) 
       Comment (
              
              
               "macurrent0 = " ,       NormalizeDouble (macurrent0, Digits ), "\n" ,
               "macurrent1 = " ,       NormalizeDouble (macurrent1, Digits ), "\n" ,
               "macurrent2 = " ,       NormalizeDouble (macurrent2, Digits ), "\n" ,
               "macurrent3 = " ,       NormalizeDouble (macurrent3, Digits ), "\n" ,              
              
           "" ) ; 
          
     
   return ( 0 );
  }
 

이전에는 "FILTER BASED ON TRADING HISTORY" 기사의 Expert Advisor ( www.mql5.com/en/articles/1441 )가 완벽하게 작동했지만 이제는 컴파일할 때 '[' - 입력을 설정할 때 잘못된 인덱스 값 오류가 발생합니다. 매개변수: 두 배 virtClosedOrders[0][5]; 이해하도록 도와주세요.

Фильтр на основании истории торговли
Фильтр на основании истории торговли
  • 2006.11.29
  • Andrey Khatimlianskii
  • www.mql5.com
В статье рассматривается использование виртуальной торговли, как составной части фильтра открытия сделок.
 
Roman Shiredchenko :

모두를 환영합니다! 입찰가 배열로 MA를 계산하는 방법에 대한 질문입니다.

계산되지 않는 이유를 알려주세요.

저것들. 주석에서 항상 0입니다.

기능

배열에 저장된 데이터에 대해 계산된 이동 평균 기술 지표 의 값반환하지 않습니다 .

이중 iMAOnArray (

...

배열이 올바르게 채워져 있습니까? 다음과 같이 작성해 보십시오.

 //+------------------------------------------------------------------+
//|                                                   FillArrays.mq4 |
//|              Copyright 2015, Artem A. Trishkin, Skype artmedia70 |
//|                       https://login.mql5.com/ru/users/artmedia70 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, Artem A. Trishkin, Skype artmedia70"
#property link        "https://login.mql5.com/ru/users/artmedia70"
#property version    "1.00"
#property strict
//+------------------------------------------------------------------+
//|   Input variables                                                |
//+------------------------------------------------------------------+
input int NumberOfStorableTicks= 20 ; // Количество сохраняемых тиков
int numberOfStorableTicks; // Количество сохраняемых тиков
input int PeriodOfMA= 5 ;             // Период сглаживания
int periodOfMA; // Период сглаживания
//+------------------------------------------------------------------+
//|   Global variables                                               |
//+------------------------------------------------------------------+
string symbol;     // Symbol()
int digits;       // Digits
//+------------------------------------------------------------------+
//|   Arrays                                                         |
//+------------------------------------------------------------------+
double       Mass_ticks[];
double       Mass_smoothed_values[];
//+------------------------------------------------------------------+
//|   Structures                                                     |
//+------------------------------------------------------------------+
   MqlTick struct_tick;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//---
   symbol= Symbol ();
   digits=( int ) SymbolInfoInteger (symbol, SYMBOL_DIGITS );
   //---
   numberOfStorableTicks=(NumberOfStorableTicks< 2 )? 2 :NumberOfStorableTicks;
   periodOfMA=(PeriodOfMA< 1 )? 1 :PeriodOfMA;
   //---
   ArrayResize (Mass_ticks,numberOfStorableTicks);
   ArrayInitialize (Mass_ticks, 0.0 );
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//---
   Comment ( "" );
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
//---
   if ( SymbolInfoTick (symbol,struct_tick)) {
       double tick_bid=struct_tick.bid;
      FillArrays(numberOfStorableTicks,tick_bid,Mass_ticks);
      }
   string txt= "" ;
   for ( int i=numberOfStorableTicks- 1 ; i>= 0 ; i--) {
      txt+= "\nmass[" + IntegerToString (i)+ "]: " + DoubleToString (Mass_ticks[i],digits);
      }
   Comment (txt);
  }
//+------------------------------------------------------------------+
void FillArrays( int array_size, double price, double &mass_price[]) {
   //--- сместим данные в массиве влево
   for ( int i=array_size- 1 ; i> 0 ; i--) {
      mass_price[i]=mass_price[i- 1 ];
      }
   //--- запишем новый тик в массив
   mass_price[ 0 ]=price;
}
//+------------------------------------------------------------------+

먼저 배열이 틱으로 올바르게 채워져 있는지 확인한 다음 틱으로 매끄럽게 처리해야 합니다.

 

즉, 어떤 상황입니까?

iMAonArray로 작업하는 방법???

사진은 다음과 같습니다.


코드는 다음과 같습니다.

여기에서 동일한 값이 여기에서 정확하지 않은 이유를 알 수 없습니다.

 Alert ( " macurrent0 = " ,      DoubleToStr(macurrent0, Digits ));
             Alert ( " macurrent1 = " ,      DoubleToStr(macurrent1, Digits ));
             Alert ( " macurrent2 = " ,      DoubleToStr(macurrent2, Digits ));


여기에서는 모든 것이 올바르게 계산되고 표시됩니다. 1차원 배열의 세 극단 셀의 내용에 대해 이야기하고 있습니다.

 Alert ( " Текущее значение xBuffer_Bid [SIZE-1] = " , DoubleToStr(xBuffer_Bid[SIZE- 1 ], Digits ) );        
           if (SIZE> 1 )   Alert ( " Предыдущее значение xBuffer_Bid [SIZE-2] = " , DoubleToStr(xBuffer_Bid[SIZE- 2 ], Digits ) );    
           if (SIZE> 2 )   Alert ( " Предпредыдущее значение xBuffer_Bid [SIZE-3] = " , DoubleToStr(xBuffer_Bid[SIZE- 3 ], Digits ) );                
          } 
ArrayResize (xBuffer_Time,SIZE); ArrayResize (xBuffer_Bid,SIZE);                                         // увеличение размера массивов на 1
   
   if (SIZE> 0 ) 
      {
       xBuffer_Bid[SIZE- 1 ] = NormalizeDouble (MarketInfo( _Symbol , MODE_BID ), Digits );                     // заполнение массива Bid  
       if ( ArraySize (xBuffer_Bid) < 2147483647 ) 
          {  
           Alert ( " Текущее значение xBuffer_Bid [SIZE-1] = " , DoubleToStr(xBuffer_Bid[SIZE- 1 ], Digits ) );        
           if (SIZE> 1 )   Alert ( " Предыдущее значение xBuffer_Bid [SIZE-2] = " , DoubleToStr(xBuffer_Bid[SIZE- 2 ], Digits ) );    
           if (SIZE> 2 )   Alert ( " Предпредыдущее значение xBuffer_Bid [SIZE-3] = " , DoubleToStr(xBuffer_Bid[SIZE- 3 ], Digits ) );                
          } 
     
      } 
   Alert ( " Текущее значение SIZE = " , DoubleToStr(SIZE, 2 ) );  
   if ( SIZE >= Ma_period)
       if ( ArraySize (xBuffer_Bid) < 2147483647 ) 
           { 
             double macurrent0=iMAOnArray(xBuffer_Bid, 0 ,Ma_period, 0 , MODE_EMA ,SIZE- 1 );
             double macurrent1=iMAOnArray(xBuffer_Bid, 0 ,Ma_period, 0 , MODE_EMA ,SIZE- 2 );
             double macurrent2=iMAOnArray(xBuffer_Bid, 0 ,Ma_period, 0 , MODE_EMA ,SIZE- 3 );
          
                 
           
             Alert ( " macurrent0 = " ,      DoubleToStr(macurrent0, Digits ));
             Alert ( " macurrent1 = " ,      DoubleToStr(macurrent1, Digits ));
             Alert ( " macurrent2 = " ,      DoubleToStr(macurrent2, Digits ));
            
           }           
  
  
    SIZE ++;                                                               // счётчик индекса массивов для их заполнения необходимо его увеличение
   
사유: