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

 
STARIJ:
写一个脚本,在每个语句之后显示信息+GetLastError()与Alert()--见上面的脚本示例
如果我的代码中出现了错误,我该如何做呢?如果脚本不工作,Alert()就不能帮助我!
 
Lowech:
如果我的代码中出现了错误,我怎样才能做到这一点?如果脚本不能工作,Alert()就不能帮助我!我不知道。

扔掉所有的东西,只留下脚本的第一行,然后添加Alert。 然后逐步添加 - 学习如何编程和调试

 
LRA:
这很迅速。你将如何搜索酒吧?在一个循环中还是使用时间结构?

欧元 美元

//+-------------------------------------------------------+
//| Проверка дней недели                       PRVERKA.mq4|
//| если первая пятница месяца была бычьей, а             |
//| 2-й понедельник медвежий - открываем сделку на продажу|
//+-------------------------------------------------------+
#property strict
void OnStart()
{
  int День=Day(), ДеньН=DayOfWeek();
  Alert("----------------------");
  int ДеньНачалаМесяца = (ДеньН-День+36) % 7;

// Если день начала месяца = 6, то число первой пятницы равно 7. Иначе 6 - день начала месяца
  int ЧислоПервойПятницы = ДеньНачалаМесяца==6?7:6-ДеньНачалаМесяца;

// Если день начала месяца < 2, то число второго понедельника равно 9 - день начала месяца. Иначе 16 - день начала месяца
  int ЧислоВторогоПонедл = (ДеньНачалаМесяца<2?9:16)-ДеньНачалаМесяца;
  Alert("ЧислоПервойПятницы = ", ЧислоПервойПятницы, "  ЧислоВторогоПонедл = ", ЧислоВторогоПонедл);

  if(ЧислоВторогоПонедл>=День)
  {
    Alert("Надо подождать числа ", ЧислоВторогоПонедл+1);
    return;   // Отключил до числа, следующего за вторым понедельником
  }

  int Продавать=0;
  for(int Бар=0;;Бар++)  //  Ищем на D1 номера баров для заданных чисел месяца
  {
    if(TimeDay(iTime(NULL,PERIOD_D1,Бар))==ЧислоВторогоПонедл)
    {
      if(iClose(NULL,PERIOD_D1,Бар)<iOpen(NULL,PERIOD_D1,Бар)) Продавать++;
      break;
    }
    if(TimeDay(iTime(NULL,PERIOD_D1,Бар))==ЧислоПервойПятницы)
      if(iClose(NULL,PERIOD_D1,Бар)>iOpen(NULL,PERIOD_D1,Бар)) Продавать++;
  }
  if(Продавать==2) bool x=OrderSend(_Symbol, OP_SELL, 0.1, Bid, 7, 0, 0);
}
 
LRA:

除了第一行之外,把脚本中的所有内容都删掉,然后添加Alert。 然后逐步添加 - 学习如何编程和调试。

它没有发挥作用(但感谢你的帮助。
 
int 1 = OrdersHistoryTotal();
if (OrderSelect(1,SELECT_BY_POS,MODE_HISTORY))
int tip=OrderType();
Afternoon.我需要帮助,我需要关闭卖出订单,然后下一个订单只能打开买入,我想用订单历史记录 找到最后一个关闭的订单并知道它的类型,但我做不到(谁知道我做错了什么,告诉我)如果我不知道答案,这将帮助我使代码工作,请不要写!)。
 
Lowech:
int 1 = OrdersHistoryTotal();
if (OrderSelect(1,SELECT_BY_POS,MODE_HISTORY))
int tip=OrderType(); Afternoon
.我需要帮助,我需要关闭卖出订单,然后下一个订单只能是开仓买入,我想用订单历史记录 找到最后一个关闭订单并知道它的类型,但我不能(谁知道我做错了什么,告诉我)如果我不知道答案,这将有助于我使代码工作,请不要写!)。
当我们试图翻译时--显示一个错误信息。'1' - 预期的名称。变量名称是必需的,而不是数字1
 

晚上好,下面是我写的代码,我的想法是,在循环中的每一个柱子上都要计数,在每一个新的柱子 上,计数器被重置,当我启动指标时,它在注释中说,在前一个柱子上有一个刻度,当前的刻度开始计数。

如果我试图使用一个不同的魔法精灵,我不知道为什么我试图使用它,但我不知道为什么我试图使用它。也许我写错了?

#property indicator_chart_window
double old_price;
double count_plus=0,count_minus=0,sum=0,psum=0;
bool Fun_New_Bar=false;
datetime Prev_Time=0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   
//---
   return(INIT_SUCCEEDED);
  }

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {

  double price;
  int i=0;
  int limit; 
  double delta; 
limit=rates_total-prev_calculated;
if(prev_calculated<1) limit=rates_total-1;
for(i=limit; i>=0; i--)  
{
 if (Fun_New_Bar==false)                              
  {                                             
   
   if (Prev_Time==0) 
     {
        Prev_Time=time[i];
        Fun_New_Bar=false;
     }
   if(Prev_Time!=time[i])                        
     {
      Prev_Time=time[i];
      psum=sum;
      count_plus=0;
      count_minus=0;
      sum=0;                         
      Fun_New_Bar=false;                            
     }
    } 
  if(old_price==0) old_price=close[i];
   
    price = close[i];
    delta = price - old_price;
     
     //-- считаем "верхние" тики 
    if(delta>=0) {
      count_plus++;
               }
      
     //-- считаем "нижние" тики
    if(delta<0) {
      count_minus++;
        }
    sum=count_minus+count_plus;   
        //----
    old_price=price;
    
  Comment(StringFormat("Выводим цены\ncount_minus = %G\ncount_plus = %G\nsum = %G\npsum = %G",count_minus,count_plus,sum,psum));
}

   return(rates_total);
  }
 
PokrovMT5:

晚上好,下面是我写的代码,我的想法是,在循环中的每一个柱子上都要计数,在每一个新的柱子 上,计数器被重置,当我启动指标时,它在注释中说,在前一个柱子上有一个刻度,当前的刻度开始计数。

如果我试图使用一个不同的魔法精灵,我不知道为什么我试图使用它,但我不知道为什么我试图使用它。也许我写错了?

如果我对这个问题的理解是正确的,刻度线并没有保存在历史上。看一看我的指标

 
Alexey Viktorov:

如果我对这个问题和问题的理解是正确的,它不会在历史上保存刻度线。见我的指标


该链接不起作用,它显示没有页面

 
PokrovMT5:

晚上好,下面是我写的代码,我的想法是,在循环中的每一个柱子上都要计数,在每一个新的柱子 上,计数器被重置,当我启动指标时,它在注释中说,在前一个柱子上有一个刻度,当前的刻度开始计数。

如果我试图使用一个不同的魔法精灵,我不知道为什么我试图使用它,但我不知道为什么我试图使用它。也许我写错了?

返回 rates_total-1 或 0

原因: