포럼을 어지럽히 지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 6. - 페이지 913

[Deleted]  

어레이에 작성하여 알려주십시오. plz.

플러그. 예를 들어 5 개와 같은 양으로 신선한 시간을 기록해야합니다. 예를 들어 5틱의 경우 평균 틱/초 값을 계산하기 위해 정적 배열 에 틱이 도착합니다.

저것들. 배열에 5틱의 도착 시간을 기록했습니다. 다음으로 평균 틱 속도/초를 계산합니다.

터미널에서 마지막으로 들어오는 틱의 시간을 기록하기 위해 각 틱에서 배열의 데이터를 이동하는 방법은 무엇입니까? 틱 도착 시간으로 1차원 정적 배열을 채우는 방법은 무엇입니까? 배열의 인덱싱은 시계열 배열과 같이 구성됩니다. 텍스트 또는 코드로 메시지를 표시할 수 있습니다. 이해합니다. 덕분에.

작동하지 않습니다. 배열이 틱 도착 시간으로 제대로 채워지지 않았습니다.

 int limit; //pBars;  
   int counted_bars=IndicatorCounted(); 
     //ArraySetAsSeries
 //---- последний посчитанный бар будет пересчитан
   if (counted_bars> 0 ) counted_bars--;  
   limit=counted_bars;  
   for ( int i=limit; i>= 0 ; i--) { xBuffer[i+ 1 ] = xBuffer[i]; xBuffer_Time[i+ 1 ] = xBuffer_Time[i];}

   xBuffer[ 0 ] = iClose(symbol, 1 , 0 );
   xBuffer_Time[tickCounter_Current] = NormalizeDouble ((iTime ( _Symbol , 1 , 0 )-_start), 2 ); 
   tickCounter_Current ++;  
   tickCounter=tickCounter+ 1 ;
   
   if (tickCounter_Current == Num_Aver_of_Ticks)    
       tickCounter_Current = 0 ;   
       
   for ( i = 0 ; i < Num_Aver_of_Ticks; i ++) Summ_Time = Summ_Time + xBuffer_Time[i];
       
   if (Num_Aver_of_Ticks != 0 )
   avgSpd = NormalizeDouble (Summ_Time / Num_Aver_of_Ticks, 2 ); 
파일:
[Deleted]  

부분적으로 - 이해했습니다.

동적 배열에 입찰가를 작성할 때 0을 인쇄하는 이유는 무엇입니까?

 //---------------------
extern int MaxDrawTicks= 100 ;
extern int Num_Aver_of_Ticks= 5 ;  
double      xBuffer_Time []; // Массив значений  
                         // В котором индекс - номер тика, значение - это бид 
int SIZE= 0 ;               // Вспомогательная переменная для массива                                  
int tickCounter, tickCounter_Current; 
//+------------------------------------------------------------------+
int init()
  {   
//--- устанавливаем размер динамического массива
   if ( ArrayResize (xBuffer_Time,SIZE)< 0 ) { Print ( " Ошибка в изменении размера массива времени поступления тиков " ); return ( false );}
//--- установим индексацию для буфера как в таймсерии для динамического массива
   // ArraySetAsSeries(xBuffer_Time,true);    
//---   Возвращает количество элементов указанного массива. 
   SIZE= ArraySize (xBuffer_Time);
   if (SIZE>= 0 ) Print ( "Размер массива: " ,SIZE);
   else Print ( "Ошибка. Массив не создан " ,SIZE);        
   ArrayInitialize (xBuffer_Time, 0 );
   return ( 0 );
  }  
//+------------------------------------------------------------------+
int start()
  {  
   //ArrayResize(ValueArr,size);
   //ValueArr[size-1] = GetValue();
   //size++; 
 //----------------------------------------  
   ArrayResize (xBuffer_Time,SIZE);
   xBuffer_Time[SIZE- 1 ] = Bid; //NormalizeDouble((iTime (_Symbol,1,0)-_start), 2); 
   SIZE ++;
   Print ( " Значение xBuffer_Time[SIZE-1] = " , DoubleToStr(xBuffer_Time[SIZE- 1 ], Digits ) );
   Print ( " Значение SIZE = " , DoubleToStr(SIZE, 2 ) );  
 //---------------------------------------      
//------------
   return ( 0 );
  }

[Deleted]  

문제가 해결되었습니다. 누가 사용해야합니다.

동적 배열 에 데이터를 쓰는 방법.

 //---------------------
extern int MaxDrawTicks= 100 ;
extern int Num_Aver_of_Ticks= 5 ;  
double      xBuffer_Time []; // Массив значений   динамический
                             // В котором индекс - номер тика, значение - это бид 
int SIZE= 0 ;                 // Вспомогательная переменная для массива                                  
int tickCounter, tickCounter_Current; 
//+------------------------------------------------------------------+
int init()
  {   
//--- устанавливаем размер динамического массива
   if ( ArrayResize (xBuffer_Time, 2000000 )< 0 ) { Alert ( " Ошибка в изменении размера массива времени поступления тиков " ); return ( false );}
//--- установим индексацию для буфера как в таймсерии для динамического массива
   // ArraySetAsSeries(xBuffer_Time,true);    
//---   Возвращает количество элементов указанного массива. 
   int S= ArraySize (xBuffer_Time);
   if (S>= 0 ) Alert ( "Размер массива: " ,S);
   else Print ( "Ошибка. Массив не создан " ,S);        
   ArrayInitialize (xBuffer_Time, 0 );
   return ( 0 );
  }  
//+------------------------------------------------------------------+
int start()
  {  
   //ArrayResize(ValueArr,size);
   //ValueArr[size-1] = GetValue();
   //size++; 
 //----------------------------------------  
   ArrayResize (xBuffer_Time,SIZE);
   xBuffer_Time[SIZE- 1 ] = Bid; //NormalizeDouble((iTime (_Symbol,1,0)-_start), 2); 
  
   if ( SIZE >= 0 && ArraySize (xBuffer_Time) < 2147483647 )
      {
       Alert ( " Значение xBuffer_Time[SIZE-1] = " , DoubleToStr(xBuffer_Time[SIZE- 1 ], Digits ) );
       Alert ( " Значение SIZE = " , DoubleToStr(SIZE, 2 ) );  
      } 
    SIZE ++;   
 //---------------------------------------      
//------------
   return ( 0 );
  }
 

안녕하세요 Renko 차트 "RenkoLiveChart_v4.13.mq4"에서 거래합니다

오프라인 차트에서 어드바이저를 통해 거래를 시작하거나 열 수 없습니다.

 
Top2n :

안녕하세요 Renko 차트 "RenkoLiveChart_v4.13.mq4"에서 거래합니다

오프라인 차트에서 어드바이저를 통해 거래를 시작하거나 열 수 없습니다.

오프라인 차트에서는 틱을 에뮬레이트해야 하며 터미널은 새 틱이 도착했다는 신호를 보내지 않습니다.

예를 들어 이 스크립트에서 다음과 같이 합니다.

 #include <WinUser32.mqh>

#import "user32.dll"


//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
{
    int whdl=WindowHandle ( Symbol (), Period ());    
        while (! IsStopped ())
         {
                PostMessageW (whdl, WM_COMMAND, 33324 , 0 );
                Sleep ( 100 );
         }
         return ( 0 );
}
 
모두 감사합니다. 무슨 일이 일어나고 있는지 알아냈습니다.
 
_Roman :

문제가 해결되었습니다. 누가 사용해야합니다.

동적 배열에 데이터를 쓰는 방법.


고맙습니다! 나에게 이것은 어두운 숲, 삼림 대산괴, 벌채 등입니다. ;)
 
evillive :

오프라인 차트에서는 틱을 에뮬레이트해야 하며 터미널은 새 틱이 도착했다는 신호를 보내지 않습니다.

예를 들어 이 스크립트에서 다음과 같이 합니다.

다른 제안 사항이 있습니까?

스크립트를 오프라인 차트에 연결하면 터미널이 멈춥니다. 로봇에 코드를 탑재한 다음 #import "user32.dll" 로 무엇을 할 수 있습니다.

[Deleted]  

안녕하세요. 도와주세요, 제발. 저는 EA를 작성하고 싶었습니다. 미결 거래가 없고 첫 번째 막대의 시가가 첫 번째 막대의 종가보다 낮고 두 번째 막대의 시가가 두 번째 막대의 종가보다 작은 경우 그럼 우리는 거래를 시작합니다... 하지만 테스터의 EA는 거래를 차례로 시작하기 시작합니다. 고마워.


 int init;

int start()
{

int bar1;
int bar2;
int    stoploss= 100 ; 
int    takeprofit= 100 ;
int        slipage= 2 ;
int total;
//-------------------------------------------------------------------+
  
   if ( OrdersTotal ()< 1 &&  Open[bar1]>Close[bar1] && Open[bar2]>Close[bar2])
    
     { OrderSend ( "EURUSD" ,OP_BUY, 0.1 ,Ask,slipage,Ask-stoploss* Point ,Ask+takeprofit* Point , "" , 123 , 0 ,Red);}
     
     //-------------------------------------------------------------------+  
     
                   
 
 return ;}
 
rylay :

안녕하세요. 도와주세요, 제발. 저는 EA를 작성하고 싶었습니다. 미결 거래가 없고 첫 번째 막대의 시가가 첫 번째 막대의 종가보다 낮고 두 번째 막대의 시가가 두 번째 막대의 종가보다 작은 경우 그럼 우리는 거래를 시작합니다... 하지만 테스터의 EA는 거래를 차례로 시작하기 시작합니다. 고마워.


 int init;

int start()
{

int bar1;
int bar2;
int    stoploss= 100 ; 
int    takeprofit= 100 ;
int        slipage= 2 ;
int total,ticket;

//-------------------------------------------------------------------+
  
   if ( OrdersTotal ()< 1 &&  Open[bar1]>Close[bar1] && Open[bar2]>Close[bar2])
       if (V1()== true ) 
     {
       ticket = OrderSend ( "EURUSD" ,OP_BUY, 0.1 ,Ask,slipage,Ask-stoploss* Point ,Ask+takeprofit* Point , "" , 123 , 0 ,Red);
      }
     
     //-------------------------------------------------------------------+                     
 return ;}
//+------------------------------------------------------------------+
bool V1(){
   int       i, k= OrdersTotal ();
   for (i= 0 ; i<k; i++) {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) {
     if (OrderType()==OP_BUY) {
       return ( false );
   }
  }    
 }
 return ( true ); 
}

bool V2(){
   int       i, k= OrdersTotal ();
   for (i= 0 ; i<k; i++) {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) {
     if (OrderType()==OP_SELL) {
       return ( false );
   }
  }
 }
 return ( true ); 
}