初学者的问题 MQL4 MT4 MetaTrader 4 - 页 226

 

阿列克谢,感谢你的回答和帮助。

新问题,在MT4中是否可以复制图表标签?也就是说,不是每次设置图表参数的模板,而是一个带有所选货币、时间框架和图表参数的完整标签副本。到底有没有这样的事情呢?

 
Rustam Bikbulatov:

试图)

战斗,搜索,寻找和重新隐藏!这就是我们的工作。


ElenkaVladi:

新问题。

是的,不客气。

最简单的是模式。你为什么不喜欢它?你已经设置了时间框架、规模、背景颜色、蜡烛图的颜色,你已经设置了所需的指标并保存为default.tpl。现在当你打开一个新的图表时,一切都准备好了。

 
Aleksei Stepanenko:


最简单的事情是模板。你为什么不喜欢它?设置时间框架、规模、背景颜色、烛台颜色,勾画出必要的指标并保存为default.tpl。现在,当你打开一个新的图表时,一切都为你准备好了。

不,问题似乎是不同的。当用户打开一个图表并安装一个指标时,他既不知道TF也不知道符号。脚本应该选择符号和TF。(而指标可以同时加载,也可以选择一个模板)。

 
Aleksei Stepanenko:

战斗,搜索,寻找和重新藏匿!


是的,不客气。

最简单的事情是模式。你为什么不喜欢它?你设置时间框架、规模、背景颜色、蜡烛图的颜色,你设置所需的指标并将其保存为default.tpl。现在当你打开一个新的图表时,一切都准备好了。

啊,这就是它的作用,没有想到default.tpl。:))
 

@makssub 在PM中要求提供MQL4代码,然后是这个代码

#property strict
//+------------------------------------------------------------------+
void OnStart()
{
   while(!IsStopped())
   {
      int ticket = -1;
      string ord_sym = "";
      int max_pips = INT_MIN;
      for(int i = OrdersTotal() - 1; i >= 0; i--)
      {
         if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES) || OrderType() > OP_SELL) continue;
         string _sym      = OrderSymbol();
         double sym_point = SymbolInfoDouble(_sym, SYMBOL_POINT);
         double sym_price = OrderType() == OP_BUY ? SymbolInfoDouble(_sym, SYMBOL_BID) : SymbolInfoDouble(_sym, SYMBOL_ASK);
         int ord_pips     = fabs(PriceToInteger(OrderOpenPrice(), sym_point) - PriceToInteger(sym_price, sym_point));
         if(max_pips < ord_pips)
         {
            max_pips = ord_pips;
            ticket = OrderTicket();
            ord_sym = _sym;
         }
      }
      if(ticket < 0) Comment("");
      else Comment("Max pips in order = ", max_pips, " , Symbol = ", ord_sym, " , ticket = ", ticket);
      Sleep(123);
      RefreshRates();
   }
   Comment("");
}
//+------------------------------------------------------------------+
int PriceToInteger( const double Price, const double point )
{
   return((int)(Price / point + 0.1));
}
//+------------------------------------------------------------------+


如何在这里关闭票务订单,请寻找:https://www.mql5.com/ru/forum/131859

Только "Полезные функции от KimIV".
Только "Полезные функции от KimIV".
  • 2011.02.18
  • www.mql5.com
Все функции взяты из этой ветки - http://forum.mql4...
 
Alexey Viktorov:

好吧,用简单的话来说,事情是这样的。

我们创建一个数据时间类型的变量,并在其中记录当前D1蜡烛的时间,当我们关闭订单并获得利润时。在打开另一个订单之前,我们用当前D1蜡烛的时间 检查这个变量的值。相应地,如果当前时间较高,我们就可以打开。否则,我们就抽烟。

你能给我看一个例子吗?我只是没有足够的经验来实现你说的那些。
 
大家好!请提供一个MQL4的教程,最新的。
 
Nikolay Grigoryev:
大家好!请告诉我一个与今天有关的MQL4教程。

只有一本教科书,旧的科瓦列夫教科书。这是到2016年左右。然后,5号文件中的很多东西被转移到4号文件中。感谢上帝保留了订单系统。已经没有教科书了(我没有找到,其他人也没有)。只有这里的文章和互联网搜索。

 
Valeriy Yastremskiy:

只有一本教科书,旧的科瓦列夫教科书。这是到2016年左右。然后,5号文件中的很多东西被转移到4号文件中。感谢上帝保留了订单系统。已经没有教科书了(我没有找到,其他人也没有)。只有这里的文章和互联网上的搜索。

谢谢你!

 

我已经写了一个简单的指标。当过零时,它不画线,即使缓冲区有值。你能告诉我,我哪里错了吗?

#property strict
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 clrGreen
#property indicator_color2 clrRed

//---- input parameters
extern int    FastEMA=12;  
extern int    SlowEMA=26;  
extern int    Signal=9;  

//---- buffers
double DiffBuffer_up[];
double DiffBuffer_dn[];
//
double MainBuffer[];
double SignalBuffer[];

ENUM_TIMEFRAMES TimeFrame;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
{
   int    draw_begin=MathMax(FastEMA,SlowEMA);
   string short_name="MACD Stephen";
   //---- indicators
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,DiffBuffer_up);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,DiffBuffer_dn);
   short_name=StringConcatenate(short_name," ("+(string)FastEMA+","+(string)SlowEMA+","+(string)Signal+")");
   IndicatorShortName(short_name);
   SetIndexDrawBegin(0,draw_begin);
   SetIndexDrawBegin(1,draw_begin);
   SetIndexLabel(0,"Up");
   SetIndexLabel(1,"Down");
   IndicatorDigits(6);
   SetLevelValue(0,0);
   
   TimeFrame=GetTF();
   
   return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
{

   return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
{
  int limit, iChart, iTF, delta=0;
  datetime TimeArray[];
  //if(TimeFrame>Period()) delta=(int)MathCeil(TimeFrame/Period());
  int counted_bars=IndicatorCounted();
  //---- check for possible errors
  if(counted_bars<0) return(-1);
  //---- the last counted bar will be recounted
  if(counted_bars>0) counted_bars--;
  limit=Bars-counted_bars+delta;

  ArrayCopySeries(TimeArray,MODE_TIME,Symbol(),TimeFrame);
  ArraySetAsSeries(MainBuffer,true);
  ArraySetAsSeries(SignalBuffer,true);
  ArrayResize(MainBuffer,  100000);
  ArrayResize(SignalBuffer,100000);
  
  iTF=0;
  for(iChart=0; iChart<limit; iChart++)
  {
      while(Time[iChart]<TimeArray[iTF]) iTF++;
      MainBuffer[iChart]=EMPTY_VALUE;
      SignalBuffer[iChart]=EMPTY_VALUE;
      MainBuffer[iChart]  =iMACD(Symbol(),TimeFrame,FastEMA,SlowEMA,Signal,PRICE_CLOSE,MODE_MAIN,iTF);
      SignalBuffer[iChart]=iMACD(Symbol(),TimeFrame,FastEMA,SlowEMA,Signal,PRICE_CLOSE,MODE_SIGNAL,iTF);
      double diff=MainBuffer[iChart]-SignalBuffer[iChart];
      
      if (diff>0) {
         DiffBuffer_up[iChart]=diff;
         DiffBuffer_dn[iChart]=EMPTY_VALUE;
      }
      else {
         DiffBuffer_dn[iChart]=diff;
         DiffBuffer_up[iChart]=EMPTY_VALUE;
      }
  }
  return(0);
}

//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| Moving Averages Convergence/Divergence                           |
//+------------------------------------------------------------------+
ENUM_TIMEFRAMES GetTF() {

   switch (Period()) {
      case PERIOD_M1:  return PERIOD_M5;
      case PERIOD_M5:  return PERIOD_M15;
      case PERIOD_M15: return PERIOD_M30;
      case PERIOD_M30: return PERIOD_H1;
      case PERIOD_H1:  return PERIOD_H4;
      case PERIOD_H4:  return PERIOD_D1;
      case PERIOD_D1:  return PERIOD_W1;
      case PERIOD_W1:  return PERIOD_MN1;
   }
   
   return (ENUM_TIMEFRAMES)Period();

}
//+------------------------------------------------------------------+