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

 
Artyom Trishkin:

不是一个错误:一个带有全局 i 的循环(蓝色),另一个带有局部 i 的循环(红色)。

编译器会抱怨
 
pako:
编译器会发誓。
是的,会的。但它比以往任何时候都更适合这个问题;)
 
Artyom Trishkin:

不是一个错误:一个带有全局 i 的循环(蓝色),另一个带有局部 i 的循环(红色)。

连我都明白...i (蓝色)是单位,i (红色)是厕所。:))))

 
日安。你能告诉我如何在EA中运行ZigZag吗?EA总体上在工作,但留下了很多信号,粘在它上面的ZZ,停止工作。在测试中无法打开ZigZag文件,完全没有调试,在演示中也没有买单,有什么办法?
xtern string   ZigZag                       = "Данные ZigZag";
extern int      InpDepth                      = 20;
extern int      InpDeviation                  = 5;
extern int      InpBackstep                   = 3;

double MacdCurrent,SignalCurrent,SignalMAPrevious,SignalMAThis,
       PriceCurrentOpen,PriceCurrentClose,SignalParabolic,ZZThis,ZZPrevious;
int    ticket;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
 if (Digits==3||Digits==5)
 {
  slippage*=10;
 }   
 return(INIT_SUCCEEDED);
} 
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{
 datetime EaStartTime = StringToTime(StartTime);  // время начала работы советника
 datetime EaEndTime = StringToTime(EndTime);      // время окончания работы советника
 datetime CurrTime = TimeCurrent();               // это если нужно взять время терминала
 if (CurrTime < EaStartTime || CurrTime >= EaEndTime)
  return;                                         // если еще не время торговать - выход
 {
  MacdCurrent=iMACD(NULL,0,InpFastEMA,InpSlowEMA,InpSignalSMA,Macd_Applied_Price,MODE_MAIN,0);
  SignalCurrent=iMACD(NULL,0,InpFastEMA,InpSlowEMA,InpSignalSMA,Macd_Applied_Price,MODE_SIGNAL,0);
  SignalMAPrevious=iMA(NULL,0,InpMAPeriod,InpMAShift,InpMAMethod,MA_Applied_Price,1);
  SignalMAThis=iMA(NULL,0,InpMAPeriod,InpMAShift,InpMAMethod,MA_Applied_Price,0);
  SignalParabolic=iSAR(NULL,0,InpSARStep,InpSARMaximum,0);
  ZZThis=iCustom(NULL,0,ZigZag,InpDepth,InpDeviation,InpBackstep,0,0);
  ZZPrevious=iCustom(NULL,0,ZigZag,InpDepth,InpDeviation,InpBackstep,0,4);
   if (CountTrades()==0) CheckForOpen();
 }
}  
void CheckForOpen()
 
Alexey Viktorov:

连我都明白...i (蓝色)是单位,i (红色)是厕所。:))))

你应该写一本科普书,你显然有一种简单解释事物的才能 ))

有一个宣布的

#property strict

只会给出一个警告,即本地的i优先于全局的i。

声明'i'隐藏了第20行的全局声明 test.mq4 25 13

 
Alexey Volchanskiy:

你应该写一本科普书,你显然有一种简单解释事物的才能 ))

有一个宣布的

只会给出一个警告,即本地的i优先于全局的i。

声明'i'隐藏了第20行的全局声明 test.mq4 25 13

我的读者对这种简单的解释有明显的天赋。我没有这种才能...一个人不是作家,他是一个读者......
 
Alexey Viktorov:
这就是阿特姆所解释的。我没有这种才能...你不是一个作家,你是一个读者......
嗯...我们是西伯利亚棉口人;)
 
Nickolay72:
你好,你能告诉我如何在EA中运行ZigZag,在一般情况下,工作,但左边的信号很多,粘在它上面的ZZ,停止工作。在测试中无法打开 ZigZag文件,调试根本无法进行,在演示中也没有买到一个订单,有什么办法?

自定义指标 中,有一个ZigZag 文件,如果是这样,当你从EA访问它时,它是否在那里被准确调用?

  ZZThis=iCustom(NULL,0,ZigZag,InpDepth,InpDeviation,InpBackstep,0,0);
  ZZPrevious=iCustom(NULL,0,ZigZag,InpDepth,InpDeviation,InpBackstep,0,4);
 
Vladimir Zubov:

如果是,ZigZag 文件是否位于自定义指标 中,当从专家顾问访问它时,它是否被如实调用?

你应该把文件名放在引号里,不加扩展名。这很奇怪,它编译得很好。最初的ZigZag 变量是什么?

ZZThis=iCustom(NULL,0,"ZigZag",InpDepth,InpDeviation,InpBackstep,0,0);
 

如何拉平或补偿五分位的单减法下垂?

有一个功能,但它不工作

//+------------------------------------------------------------------+
//| Считаем лот в зависимости от полученного профита                 |
//+------------------------------------------------------------------+
double Volume(void)
  {
   double lot=Lots;
//--- Получим доступ к истории
   HistorySelect(0,TimeCurrent());
//--- Сделки в истории
   int orders=HistoryDealsTotal();
//--- Тикет последней сделки  
   ulong ticket=HistoryDealGetTicket(orders-1);
   if(ticket==0)
     {
      Print("Нет сделок в истории! ");
      lot=Lots;
     }
//--- Профит сделки
   double profit=HistoryDealGetDouble(ticket,DEAL_PROFIT);
//--- Лот сделки
   double lastlot=HistoryDealGetDouble(ticket,DEAL_VOLUME);
//--- Профит отрицательный
   if(profit<0.0)
     {
      //--- Увеличиваем следующий лот
      lot=lastlot*KLot;
      Print(" Cделка закрыта по стопу! ");
     }
//--- Приводим лот к минимальному
   double minvol=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MIN);
   if(lot<minvol)
      lot=minvol;
//--- Если лот больше максимального то начальный лот
   if(lot>MaxLot)
      lot=Lots;
//--- Возвращаем торговый объем
   return(lot);
  }
//+------------------------------------------------------------------+
//| Смотрим тип последней закрытой сделки                            |
//+------------------------------------------------------------------+
int LastDealType(void)
  {
   int type=0;
//--- Получим доступ к истории
   HistorySelect(0,TimeCurrent());
//--- Сделки в истории
   int orders=HistoryDealsTotal();
//--- Тикет последней сделки  
   ulong ticket=HistoryDealGetTicket(orders-1);
//--- Нет сделок в истории
   if(ticket==0)
     {
      Print("Нет сделок в истории! ");
      type=0;
     }
   if(ticket>0)
     {
      //--- Последняя сделка BUY 
      if(HistoryDealGetInteger(ticket,DEAL_TYPE)==DEAL_TYPE_BUY)
        {
         type=2;
        }
      //--- Последняя сделка SELL
      if(HistoryDealGetInteger(ticket,DEAL_TYPE)==DEAL_TYPE_SELL)
        {
         type=1;
        }
     }
//---
   return(type);
  }