任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. - 页 662

 
那么,有没有人已经有一个RSI iMAOnArray可以使用了?
 
berezhnuy:
那么,有没有人已经有一个RSI iMAOnArray可以使用了?

我明白为什么没有人给你回应,提供很多 "帮助"......
 
berezhnuy:
那么,有没有人已经有一个RSI iMAOnArray可以使用了?

在kodobase里有一个,你只需要查一下就可以了。
 
同志们。为了练习,我决定建立最简单的接管展示。但最后有一个问题,如果我改变了图表上的时间框架,并返回到有吸收的时间框架,警报又被触发了。我找到了一个选项,可以让每个柱子只发出一次警报,但当我切换时间段时,一切都会重置。
if (Bars != ThisBarTrade ) {
   ThisBarTrade = Bars;  // ensure only one trade opportunity per bar
   // Trade logic goes here
}
这里是代码本身,没有图形图画,只有逻辑。如何纠正?
   if(engulfAlerter && Open[2]>Close[2] && Open[1]<Close[1] && Close[1]>Open[2])
      {
         Alert("Bullish Engulf");
      }
   if(engulfAlerter && Open[2]<Close[2] && Open[1]>Close[1] && Close[1]<Open[2])
      {
         Alert("Bearish Engulf");
      }
P.S. 感应器在去初始化期间重置条件 "ThisBarTrade",同时切换到其他时间框架。
 

你能告诉我如何分开买入和卖出的票吗?

ticket=OrderSend("EURUSD",OP_SELL,SellLot,Bid,3,0,0,",MAGICMA,0,Red)。


否则

{

OrderSelect(ticket-3,SELECT_BY_POS,MODE_TRADES)。

OrderClose(ticket-3,SellLot,Ask,3,Red)。


}

特别是Ticket-3,TK交易是一种跨越多个订单的平均价格),但我如何将买入票和卖出票分开? 这样我就可以接受一个3天前开出的订单)。也用于出售

 

朋友们好!)我有这样一个问题。

我写了一个程序,在启动时打开一个模板(有我需要的指标和图形对象),然后分析数据和交易。当我只是在图表上运行它时,一切都很好。当我在测试器中运行它时,它只有在可视化时才能工作。我明白,模板只能在可视化打开的图表 上加载。所以它在正常的测试模式下不工作,因为它只是在图表上运行而没有加载模板...我有相当多的参数,而用可视化的方式手动运行每个选项是非常不合理的。

help plz))你如何解决优化和模板的问题?

 
evillive:

分数 ))))


但我没有用MQL写,但从形式上看,这就是问题所在(。

又如何能确定呢?

由于数值的数量非常有限,我们可以直接用蛮力来检查。

#property strict

/******************************************************************************/
void fun1(int const A) {
  Print("fun1()");

  if (A == 0 || A == 1) {
    Print("fun1 do!");
  }
}

/******************************************************************************/
void fun2(int const A) {
  Print("fun2()");

  if (A != 2) {
    Print("fun2 do!");
  }
}

/******************************************************************************/
void Гарантия_0_1_2(int const A) {
  switch (A) {
  case 0:
  case 1:
  case 2:
    fun1(A);
    fun2(A);
    break;
  default:
    Print("Не соблюдены условия (теоремы)");
  }
}

/******************************************************************************/
void OnStart() {
  for (int A = 0, limit = 4; A < limit; A++) {
    Print("Проверяем для A = ", A);
    Гарантия_0_1_2(A);
  }
}

在这里,我们得到了。

22:52:38 Script 3 EURUSDm,H1: loaded successfully
22:52:38 3 EURUSDm,H1: initialized
22:52:38 3 EURUSDm,H1: Проверяем для A = 0
22:52:38 3 EURUSDm,H1: fun1()
22:52:38 3 EURUSDm,H1: fun1 do!
22:52:38 3 EURUSDm,H1: fun2()
22:52:38 3 EURUSDm,H1: fun2 do!
22:52:38 3 EURUSDm,H1: Проверяем для A = 1
22:52:38 3 EURUSDm,H1: fun1()
22:52:38 3 EURUSDm,H1: fun1 do!
22:52:38 3 EURUSDm,H1: fun2()
22:52:38 3 EURUSDm,H1: fun2 do!
22:52:38 3 EURUSDm,H1: Проверяем для A = 2
22:52:38 3 EURUSDm,H1: fun1()
22:52:38 3 EURUSDm,H1: fun2()
22:52:38 3 EURUSDm,H1: Проверяем для A = 3
22:52:38 3 EURUSDm,H1: Не соблюдены условия (теоремы)
22:52:38 3 EURUSDm,H1: uninit reason 0
22:52:38 Script 3 EURUSDm,H1: removed

事实证明,它们是平等的。如果不是3个,而是,比如说,300万个值,你仍然可以进行机器检查--返回函数的结果并进行比较。如果在整个范围内没有发现差异,那么它们就是相等的。

如果用表达式代替变量,例如函数调用,那么等价就变成了 "有保留的等价",因为逻辑表达式 的计算有短路。

 

大家好!

在另一个指标的基础上做了一个指标。

第一个缓冲区的计数是应该的。

第二种情况不是:我想让它在 "line1 > 0 "之后的每个柱子上开始计数。

这基本上就是我在我的专家顾问中所做的事情。

if (line1 > 0 && time ==0){time=Time[i+0];}//сработало предварительное условие входа, записываем время
if (time > 0)shift=iBarShift(Symbol(),Period(),i+time);//находим индекс бара

而在 "shift >= shet "之后,绘图条件就被触发了。

我改变了变量 "Shet "的外部参数,指标没有变化。

问题可能是什么?

指标代码。

#property indicator_buffers 2
#property indicator_color1 Lime 
#property indicator_color2 Red
//--- input parameters
extern int       Period_MA_r=14;
extern int       r2          =7;
extern int       Period_MA_1=46;
extern int       p2          =19;
extern int       shet=7;
extern int       s        =0;
//--- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexBuffer(0,ExtMapBuffer1);
   SetIndexStyle(0,DRAW_ARROW);
   SetIndexArrow(0,119);
   SetIndexEmptyValue(0,0.0);
   SetIndexBuffer(1,ExtMapBuffer2);
   SetIndexStyle(1,DRAW_ARROW);
   SetIndexArrow(1,119);
   SetIndexEmptyValue(1,0.0);
   IndicatorDigits(Digits+1);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int counted_bars=IndicatorCounted(),
   i,limit1,shift;
   limit1=Bars-counted_bars-1;
   double line1,signal_line;
   static datetime time;
   for(i=limit1;i>=0;i--) 
   {
   line1=0;
   signal_line=0;
   line1=iCustom(NULL,0,"indikator1",Period_MA_r,r2,1,i+0);
   signal_line=iCustom(NULL,0,"indikator2",Period_MA_1,p2,0,i+0);
   
   if (line1 > 0 && time ==0){time=Time[i+0];}//сработало предварительное условие входа, записываем время
   if (time > 0)shift=iBarShift(Symbol(),Period(),i+time);//находим индекс бара
   if (line1 == 0){time=0;}//если индикатор равен нолю, то время сбрасывается на ноль
   if (line1 > 0 && signal_line < s){ExtMapBuffer1[i]=Low[i]-95*Point;}
   if (line1 > 0 && shift >= shet && signal_line < s){ExtMapBuffer2[i]=High[i]+95*Point;}
   }
   return(0);
  }
//+------------------------------------------------------------------+
 
Forexman77:

大家好!

在另一个指标的基础上做了一个指标。

第一个缓冲区的计数是应该的。

第二种情况不是:我想让它在 "line1 > 0 "之后的每个柱子上开始计数。

这基本上就是我在我的专家顾问中所做的事情。

而在 "shift >= shet "之后,绘图条件就被触发了。

我改变了变量 "Shet "的外部参数,指标没有变化。

问题可能是什么?

指标代码。


关于加0的问题有一些混淆,但可以这样试一试。

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
{
   int counted_bars=IndicatorCounted(),
   i,limit1,shift = 0;
   limit1=Bars-counted_bars-1;
   double line1,signal_line;
   static datetime time;
   for (i=limit1;i>=0;i--) 
   {
       line1=0.;
       signal_line=0.;
       line1 = iCustom (_Symbol, _Period,"indikator1",Period_MA_r,r2,1, i+0);       // Не понятно - зачем прибавлять 0 ???
       signal_line = iCustom (_Symbol, _Period,"indikator2",Period_MA_1,p2,0,i+0);  // Не понятно - зачем прибавлять 0 ???
   
       if (line1 > 0. && time == 0) {time = Time[i+0];}                   //сработало предварительное условие входа, записываем время [тоже + 0]
       if (time > 0.) shift= i + iBarShift (_Symbol, _Period, time);      //находим индекс бара
       if (line1 == 0.) {time = 0;}                                       //если индикатор равен нолю, то время сбрасывается на ноль
       if (line1 > 0.)
       {
           if (signal_line < s)
           {
               ExtMapBuffer1[i] = Low[i] - 95.*Point;
               if (shift >= shet) {ExtMapBuffer2[i] = High[i]+95.*Point;}
           }
       }
   }
   return(0);
}
//+------------------------------------------------------------------+
 

下午好。

在终端,如果我双击订单行,就会打开一个修改窗口。

但如果一个订单的开盘价 和另一个订单的止盈价在一起,最后修改的订单就会打开。

请告知,mql4是否有一个功能,通过点击指标中的必要订单来打开订单修改窗口?