返回执行策略。 - 页 8

 

我就是这样得到移动平均线的当前数据的,这样做对吗?

input int      ma_period = 10;
 int ma_handle = 0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
    ma_handle = iMA(_Symbol,_Period,ma_period,0,MODE_SMA,PRICE_MEDIAN);
   if(ma_handle == INVALID_HANDLE)
     {
      Print("ma_handle == INVALID_HANDLE");
      return(INIT_FAILED);
     }

   return(INIT_SUCCEEDED);


  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  { 
  double   ma[1] ;
   if(CopyBuffer(ma_handle,0,0,1,ma)==1)
     {
     
     
     }
 }

两个问题。

1.没有关于不将指标缓冲区 编号与指标联系起来的内容。由于有一个指标,它自动得到缓冲区0,这就是我所指定的。

2.如果我在初始化时有指标句柄,当我改变传递给指标的参数时,我是否需要重新将EA填充到图表中,以便初始化事件到来,新的参数被应用?

 
Ivan_Invanov:

我就是这样得到移动平均线的当前数据的,这样做对吗?

两个问题。

1.没有关于不将指标缓冲区 编号与指标联系起来的内容。由于有一个指标,它自动得到缓冲区0,这就是我所指定的。

2.如果我在初始化中设置了指标句柄,当我改变传递给指标的参数时,我是否需要将EA重新加载到图表上,以便发生初始化事件并应用新参数?

1.没有什么 "关联"。从来没有过。

让我们阅读一下关于CopyBuffer 的帮助

int  CopyBuffer(
   int       indicator_handle,     // handle индикатора
   int       buffer_num,           // номер буфера индикатора
   int       start_pos,            // откуда начнем 
   int       count,                // сколько копируем
   double    buffer[]              // массив, куда будут скопированы данные
   );

有一个函数接收指标句柄(在你的例子中是变量ma_handle 和缓冲区编号'0' - 零,因为移动平均线指标只有一个缓冲区)。


2.如果你在你的EA中改变了输入参数,它将再次初始化你的EA,指标句柄将在OnInit中用你输入的参数创建。

Документация по MQL5: Доступ к таймсериям и индикаторам / CopyBuffer
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyBuffer
  • www.mql5.com
Отсчет элементов копируемых данных (индикаторный буфер с индексом buffer_num) от стартовой позиции ведется от настоящего к прошлому, то есть стартовая позиция, равная 0, означает текущий бар (значение индикатора для текущего бара). При копировании заранее неизвестного количества данных в качестве массива-приемника buffer[] желательно...
 
Vladimir Karputov:

1.没有什么 "关联"。从来没有过。

...

调用SetIndexBuffer()的意义

 
Dmitry Fedoseev:

意味着对SetIndexBuffer()的调用

是的,不清楚什么是指标缓冲区编号,这些缓冲区是如何创建的,它们是否属于某个指标,或者它们的编号相同。文档中说要写SetIndexBuffer(),但在移动平均线的例子中却没有写。我读了参考资料并搜索了其他文章,但还是不清楚。预处理器是否需要指定缓冲区,为什么缓冲区要比预处理器指令 中的少一个,而不是一样。
 
Ivan_Invanov:
我不知道什么是指标缓冲区编号,这些缓冲区是如何创建的,它们是否被分配给某个指标或具有相同的编号。文档中说要写SetIndexBuffer(),但在移动平均线的例子中却没有写。我读了参考资料并搜索了其他文章,但还是不清楚。预处理器是否需要指定缓冲区,为什么缓冲区要比预处理器指令 中的少一个,而不是一样。

如果你寻找一些形而上学的意义...那么很多事情就变得不可理解了。否则,它就只是一个数字。它属于一个特定的指标。

专家顾问根本就没有指标缓冲区,因此不可能有SetIndexBufer()调用。

不是少一个,而是完全一样。当从零开始计数时,最后一个数字比总数字少1。

 
谢谢你。
 

如果你不介意,请再回答几个问题。

1.我不明白为什么我需要给一个已声明的变量 赋值0,如果我以后要赋值的话。而且,有时不分配0,有时分配。

他们说你需要在去初始化中删除对象(我不明白为什么),但指标句柄是一个对象,但它通常不会被删除,这是为什么?

3.MqlTradeRequest request={0}; 它是什么意思?可能,整个结构被分配为0,但它并不只包含数字类型。

4、,为什么这里会有一个逻辑运算?

bool  OrderSend(
   MqlTradeRequest&  request,      // структура запроса
   MqlTradeResult&   result        // структура ответа
   );
 
Ivan_Invanov:

如果你不介意,请再回答几个问题。

1.我不明白为什么我需要给一个已声明的变量 赋值0,如果我以后要赋值的话。而且,有时不分配0,有时分配。

他们说你需要在去初始化中删除对象(我不明白为什么),但指标句柄是一个对象,但它通常不会被删除,这是为什么?

3.MqlTradeRequest request={0}; 它是什么意思?可能,整个结构都被赋值为0,但这不仅仅是数字类型。

4. 为什么我们在这里需要一个逻辑运算?

1.出于习惯。

2.它是另一个物体。它将被自行卸载,但它可以通过函数IndicatorRelease()加速。

3.它被清除了,就这样了。

4.这不是一个逻辑操作,而是通过引用来转移变量。

 
Dmitry Fedoseev:

1.出于习惯。

2.这是一个不同的对象。然后它将自行卸载,但可以通过IndicatorRelease()来加速。

3.它被清除了,就这样了。

4.这不是一个逻辑操作,而是通过引用来转移变量。

谢谢)
 
我对一些事情感到困惑。当SYMBOL_TRADE_EXECUTION_MARKET 被执行时。我能否像在即时执行 中那样,在某一价格开立订单?我需要一个挂单吗?请为一个挂单写一个市场请求格式。