新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 901

 

引自手册。

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

//| 专家初始化功能|
//+------------------------------------------------------------------+
intOnInit()
{
//----获得自定义指标的值
doublevalue=iCustom(_Symbol,_Period,":Indicators\\SampleIndicator.ex4",0,0)。

初始化函数中引用指标变量 ,而不是在启动函数中? 初始化函数中引用指标变量 只能打开一个位置。

 
天色已晚。Artem,你明天能不能回复?预先感谢你。
 
Oleg Kolesov:

引自手册。

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

//| 专家初始化功能|
//+------------------------------------------------------------------+
intOnInit()
{
//----获得自定义指标的值
doublevalue=iCustom(_Symbol,_Period,":Indicators\\SampleIndicator.ex4",0,0)。

初始化函数中引用指标变量 ,而不是在启动函数中? 初始化函数中引用指标变量 只能打开一个位置。

现在是使用OnTick()和其他事件处理程序的时候了,而不是启动。忘记旧MetaTrader 4的功能。新的MQL4现在非常接近于MQL5 - 唯一的区别是交易功能和指标的组织方式不同 - 它们现在是在OnInit()处理程序中创建的 - 一个指标句柄被创建,并对这个句柄进行数据访问。在MQL4中,情况有所不同。但资源的定位是一样的,如果我的记忆没有改变的话。

而对计算数据的访问与通过iCustom()的访问在通常情况下没有太大区别--其名称只是略有不同。
Документация по MQL5: Обработка событий / OnTick
Документация по MQL5: Обработка событий / OnTick
  • www.mql5.com
//|                                                   TradeByATR.mq5 | //|                        Copyright 2018, MetaQuotes Software Corp. | //|                                             https://www.mql5.com | //| Expert initialization function                                   |...
 
Oleg Kolesov:
天色已晚。Artem,你明天能不能回复? 预先感谢你。

没有承诺--忙。

迟到的...现在是04:51 ...这就是 "迟到"。

 
Artyom Trishkin:
  1. 订单设定价格没有被规范化。
  2. 所有的价格都应检查StopLevel - 如果订单与价格的距离(点)小于StopLevel值,那么将出现错误130 - 错误的止损点

我认为问题不在StopLevel上,因为它仍然打开了一个订单。但在下一次点击时,它产生了错误

#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#include  <Init_Deinit.mqh> 

// Переменные
extern double lots    = 0.01;
extern int    Level   = 300;
extern double StopL   = 300;
extern double TakeP   = 1000;


// Start Programm
void OnTick() 
  { 
  //--- вычисленные значений для BuyStop
   
   double price_buystop=NormalizeDouble (Ask+Level*Point, Digits);
   StopL =NormalizeDouble(price_buystop-StopL*Point,Digits); 
   TakeP =NormalizeDouble(price_buystop+TakeP*Point,Digits); 
   
//--- Размещаем отложный ордер BuyStop
   int ticket=OrderSend(Symbol(),OP_BUYSTOP,lots,price_buystop,3,StopL,TakeP,"Rupture",1111,0,clrGreen); 
   if(ticket<0) 
     { 
      Print("BuyStop завершилась с ошибкой #",GetLastError()); 
          } 
   else 
      Print("Функция BuyStop успешно выполнена"); 
      }
 
Doszhan:

我认为问题不在StopLevel上,因为它仍然打开了一个订单。但在下一次点击时,它产生了错误

你需要检查价格是否小于止损或价差,那么当然会有错误。这是第一个。

从文字上看,你没有检查订单是否已经被打开。

这样一来,它就会在每次勾选时 打开到无穷大。

 
Oleg Kolesov:

H=iCustom(NULL,TF,"::Indicators\\KChange.ex4", History,Period_1,Period_2,MA_method,0,1)。

编译器没有发现任何错误,但测试器的工作速度要慢得多?这是否正常?

//-----------------------------------------------------------------------------------------------------------------

MQL4手册说:在初始化 函数中对变量的引用

初始化 函数中引用指标变量 ,而不是在启动函数中? 有经验的人请告诉我!

如果速度慢,你需要优化 - 加快指标的速度

你需要调用你想检查指标值的地方,在初始化 中只收到一个值

 
nalyk:

你正在寻找第三条杠上的分形,它可能不在那里。寻找周期中的第一个分形。


这也是行不通的。下单的依据是2根蜡烛的高低点。
 
Valerius:

你需要检查价格是否小于止损或价差,那么当然会有错误。这是第一个。

从文字上看,你没有检查订单是否已经被打开。

否则,它将在每次打勾 时无限期地打开。

没错,它不是在每次打勾时都打开,只打开一次。
 
Doszhan:
没错,它不是在每次打勾时都打开,只打开一次。

日志中是否有一个错误130

以上解释了它的来源以及如何做正确的事情来避免它。

你没有。