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

 
neonobblu :
조언해주실 수 있나요? 나는 신호에 연결했고 그에 따라 미결 주문이 복사되었습니다. 어떻게 든 거래하는 로트의 볼륨을 변경할 수 있습니다. 그렇다면 어떻게?

공급자의 계정에서 모든 거래는 0.1랏의 볼륨으로 이루어집니다. 이러한 거래를 대량(예: 0.3랏)으로 복사하고 싶습니다. 볼륨을 스스로 높일 수 있습니까?

공급자 기호의 거래를 구독자 기호에 복사하는 규칙을 직접 만들 수 있습니까?

 
Roman Shiredchenko :

한 번 보세요, 4번 - 통과할 수 없는 것 같습니다...

나는 배열로 작업합니다. 예를 들어, 나는 입찰을 씁니다. 매 틱마다. 나는 Artyom Trishkin 이 감사 하는 티켓 에 따라 모든 것을합니다. 모든 것이 잘되지는 않습니다. 내가 싸우는 두 번째 날 ... 인쇄

0

https://www.mql5.com/ru/forum/145455/page913#1017464

덕분에.

init에서 SIZE 변수의 값이 0이고 배열의 크기는 얼마입니까? 또한 다시 시작 SIZE도 0입니다 ... 로그에 무엇이 있습니까?
 
Artyom Trishkin :
init에서 SIZE 변수의 값이 0이고 배열의 크기는 얼마입니까? 또한, 다시 시작 SIZE도 0입니다. 로그에 무엇이 있습니까?
제로... 이해합니다...
 

그리고 너무, 0 ... 나는 아무것도 이해할 수 없습니다 ...

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

그리고 너무, 0 ... 나는 아무것도 이해할 수 없습니다 ...

그래서 나는 SIZE가 0이 되지 않도록 먼저 증가시켜야 하고 그 다음 에 array의 크기 를 변경해야 한다고 암시했습니다.
 
Artyom Trishkin :
그래서 SIZE를 먼저 늘려야 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, 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 );
  }
 
Roman Shiredchenko :

:-)

고마워.

작동 - 필요로 하는 사람이 사용합니다.

나는 뭔가를 이해하지 못합니다. SIZE는 0과 같지만 먼저 배열의 크기를 변경 한 다음 SIZE를 늘리는 이유는 무엇입니까? 엉망...

틱의 강도와 범위를 결정하는 틱 Expert Advisor에 대한 틱으로 배열을 채웠습니다. 예를 들어 조각을 잘라냅니다.

 //+------------------------------------------------------------------+
   MqlTick struct_tick;
//+------------------------------------------------------------------+
 //+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
//---
   //--- Запись ID графика
   gv_chart_id_name=Prefix+ "_chart_id" ;                         // имя GV терминала
   long    chart_id=get.GetChartID(symbol);                     // id текущего графика
   double chart_id_double=ToDouble(chart_id);                   // id в представлении double
   if (chart_id>= 0 ) {                                           // chart_id==0 в тестере
       if (! GlobalVariableCheck (gv_chart_id_name))               // Если GV-переменная удалена
         GlobalVariableSet (gv_chart_id_name,chart_id_double);   // создадим опять
      }
   else graph.Message( "Чё-та нету chart_id : Symbol()=" +symbol+ ", chart_id=" + IntegerToString (chart_id));
   
   //--- работа с тиками текущего графика
   if ( SymbolInfoTick (symbol,struct_tick)) {
       double tick_bid=struct_tick.bid;
       datetime tick_time=struct_tick.time;
      WorkOnTick(symbol,tick_bid,tick_time,slowPeriod);
      }
//---
  }
//+------------------------------------------------------------------+

아래 함수는 기호 변수에 저장된 원하는 기호로 작업을 구성합니다. 다른 기호로 작업해야 하는 경우 거기에 작성하십시오. FillArrays() 함수는 배열만 채웁니다.

 //+------------------------------------------------------------------+
void WorkOnTick( string sy, double symbol_bid, datetime symbol_time, int limit) {
   long chart_id=get.GetChartID(sy);                       
   int index_symbol=get.PositionsSymbolInList(sy);       // позиция символа в списке
   double pt= SymbolInfoDouble (sy, SYMBOL_POINT );
   double pa= SymbolInfoDouble (sy, SYMBOL_ASK );
   double pb= SymbolInfoDouble (sy, SYMBOL_BID );
   int stoplevel=( int )MarketInfo(sy,MODE_STOPLEVEL);
   int dg=( int ) SymbolInfoInteger (sy, SYMBOL_DIGITS );
   //--- заполним массивы
   FillArrays(sy,symbol_bid,symbol_time,table_price,table_time);
   //--- расчёт среднего изменения цен тиков
   double avg_change_price=AverageChangePrice(index_symbol,limit,slowPeriod,table_price);
   //--- вывод информации на график
   wtf(index_symbol,avg_change_price,slowPeriod,table_price,table_time);
   return ;   
   
   Trailing(sy, 50 , 3 , magic);
}
//+------------------------------------------------------------------+

다음과 같이 틱으로 배열을 채워야 했습니다.

 //+------------------------------------------------------------------+
void FillArrays( string sy, double price, datetime time, double &mass_price[][], datetime &mass_time[][]) {
   //--- сместим данные в массивах влево
   int index_symbol=get.PositionsSymbolInList(sy);       // позиция символа в списке
   for ( int i= 99 ; i> 0 ; i--) {                             // сместим данные в массивах влево
      mass_price[index_symbol][i]=mass_price[index_symbol][i- 1 ];
      mass_time[index_symbol][i]=mass_time[index_symbol][i- 1 ];
      }
   //--- запишем товый тик в массивы
   mass_price[index_symbol][ 0 ]=price;
   mass_time[index_symbol][ 0 ]=time;
}
//+------------------------------------------------------------------+
 
Artyom Trishkin :

나는 뭔가를 이해하지 못합니다. SIZE는 0이지만 배열의 크기를 먼저 변경한 다음 SIZE만 늘리는 이유는 무엇입니까? 엉망...

틱의 강도와 범위를 결정하는 틱 Expert Advisor에 대한 틱으로 배열을 채웠습니다. 예를 들어 조각을 잘라냅니다.

아래 함수는 기호 변수에 저장된 원하는 기호로 작업을 구성합니다. 다른 기호로 작업해야 하는 경우 거기에 작성하십시오. FillArrays() 함수는 배열만 채웁니다.

다음과 같이 틱으로 배열을 채워야 했습니다.

n - 틱당 1틱/1초의 평균 속도가 필요합니다. 저것들. n-틱은 k-초 단위로 입력되고 k/n개의 틱은 초당 입력됩니다. 이 속도는 들어오는 틱마다 측정해야 합니다. 다음 틱마다 변경됩니다.

 

말해봐, 내가 MT4 어딘가에 시계를 볼 수 있을까? 가급적이면 중고로.

아니면 그런 고문이 있습니까? 터미널 맨 아래 줄에 시간 인쇄

사유: