初学者的问题 MQL5 MT5 MetaTrader 5 - 页 386

 
neonobblu:
请告诉我。我已经连接到信号,因此我复制了它的未平仓订单,我可以改变它的交易量吗?我如何改变订单量?

在提供者的账户中,所有交易的执行量为0.1手。我想让这些交易以更大的量复制给我,例如0.3手。我可以手动增加音量吗?

我可以创建规则,将提供者的交易复制到订阅者的交易吗?

 
Roman Shiredchenko:

听着,在四号机上,我似乎无法通过...

我是用数组工作的--我需要在数组中写出tick的到达时间--比如说,我写一个标价。在每一个刻度上。我一切都按票 行事,为此我很感谢阿尔乔姆-特里什金 。不是所有东西都能用。争取到了第二日。印刷品

零点。

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

谢谢你。

我看到init变量SIZE是0,那么阵列的大小是多少?然后,在开始时SIZE也是0 ...日志里有什么?
 
Artyom Trishkin:
我看到在init中变量SIZE的值是0,那么阵列的大小是多少?然后,在开始时SIZE也是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:

而零也是如此...我什么都不明白...

我提示,必须先增加SIZE,使其不为零,然后才能改变数组的大小
 
Artyom Trishkin:
好吧,我暗示了这样一个事实:SIZE必须首先增加,使其不为零,然后才能改变阵列的大小。

:-)

谢谢。

它是有效的--如果你需要,就使用它。

//---------------------
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是零,为什么要先改变阵列的大小,然后再增加SIZE?真是一团糟...

我曾经为一个ticks专家顾问做了一个用ticks填充的数组,它定义了ticks的强度和范围。我已经剪出了一些片段作为例子。

//+------------------------------------------------------------------+
   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是零,为什么先改变阵列的大小,然后再增加SIZE?一片混乱...

我曾经为一个滴答顾问做了一个数组填充,它决定了滴答的强度和传播。我已经剪出了一些片段作为例子。

下面的函数用储存在符号变量中的所需符号组织工作,如果你需要用另一个符号工作--把它写在那里。函数FillArrays()只是填充数组。

我需要用这种方式来填充数组的刻度。

我需要在n-ticks中达到1 tick/in 1 sec的平均速率。也就是说,在k秒内收到n个刻度,k/n是每秒收到的刻度。这个速度必须在每次打钩 到达时测量。它将随着以后的每一次打勾而改变。

 

你能告诉我mt4中是否有时钟?最好是有秒针。

或者,也许有一个专家顾问会在终端的底线上显示时间。