[警告关闭!]任何新手问题,为了不给论坛添乱。专业人士,不要走过。没有你,哪里都不能去。 - 页 589

 

脚本与EA没有区别...。

有时,脚本使用# 属性show_inputs,来显示一个带有参数的对话框,就像在EA中一样(它理所当然地存在),但很难区分......

 

你能否建议一种算法...我们需要在低位时间段找到高位时间段和低位时间段的时间。

   double H=iHigh(NULL,TF2,i);
   double L=iLow(NULL,TF2,i);  
   datetime timeH=
   datetime timeL=
 
zfs:

你能否建议一种算法...你需要在低位时间段找到高位时间段和低位时间段的时间。

记住或立即使用i--找到的索引。

iTime(NULL,TF2,i)将是时间。

 
Craft:

没能坚持到早上。情况稍有好转,但顺序开花摆放的情况无法避免。我怎样才能在所需的条件下设置一个单一的订单?你提到:不,那是行不通的。 只有通过分析订单历史--我们应该如何做,或者还有什么合适的?

像这样

int i,orders_total=OrdersTotal();

bool order_on_last_bar=false;

if(orders_total>0) //если есть ордера
{
   for(i=orders_total-1;i>=0;i--) //перебираем их все
   {
      OrderSelect(i,SELECT_BY_POS);
      if(iBarShift(OrderOpenTime())==0) //если номер бара, соответствующего сремени открытия, равен 0
         order_on_last_bar=true; //фиксируем этот факт
   }
}

if(order_on_last_bar==false) // на нулевом баре нет открытых ордеров
{
   //делаем то что нам нужно
}
 

我以前问过这个问题,但现在我又需要这个问题,以计算开仓的最大成交量。我是这样写的。

// Расчет максимального объема
   for (double m = 0.1; AccountFreeMarginCheck(Symbol(),OP_SELL,m)>30; m = m + 0.1)
      {
       Max_lots   = m;
       double Ost = AccountFreeMarginCheck(Symbol(),OP_SELL,m);
      }

但Max_lots一直等于0...我不知道,也许有人知道更多关于这种东西的计算能力?

 
alsu:

像这样

我填写了所有的iBarShift函数 值(之前的编译导致了错误),上面已经声明了int i。 为了实验,我试着删除这个重放,用j代替,但是没有成功--我在一些柱子上得到了多个订单的打开/关闭。下面是带有开放条件的代码,也许我弄错了什么。我们还能做什么?

   int j,orders_total=OrdersTotal();

bool order_on_last_bar=false;

if(orders_total>0) //если есть ордера
{
   for(j=orders_total-1;j>=0;j--) //перебираем их все
   {
      OrderSelect(j,SELECT_BY_POS);
      if(iBarShift(NULL,0,OrderOpenTime())==0) //если номер бара, соответствующего времени открытия, равен 0
         order_on_last_bar=true; //фиксируем этот факт
   }
}

if(order_on_last_bar==false) // на нулевом баре нет открытых ордеров
{
while(true)                                  // Цикл закрытия орд.
     {
      if (Total==0 && Opn_B==true)              // Открытых орд. нет +
        {                                       // критерий откр. Buy
         RefreshRates();                        // Обновление данных
         Alert("Попытка открыть Buy. Ожидание ответа..");
         Ticket=OrderSend(Symb,OP_BUY,Lts,Ask,2,0,0);//Открытие Buy
         if (Ticket > 0)                        // Получилось :)
           {
            Alert ("Открыт ордер Buy ",Ticket);
            return;                             // Выход из start()
           }
         if (Fun_Error(GetLastError())==1)      // Обработка ошибок
            continue;                           // Повторная попытка
         return;                                // Выход из start()
        }
      if (Total==0 && Opn_S==true)              // Открытых орд. нет +
        {                                       // критерий откр. Sell
         RefreshRates();                        // Обновление данных
         Alert("Попытка открыть Sell. Ожидание ответа..");
         Ticket=OrderSend(Symb,OP_SELL,Lts,Bid,2,0,0);//Открытие Sel
         if (Ticket > 0)                        // Получилось :)
           {
            Alert ("Открыт ордер Sell ",Ticket);
            return;                             // Выход из start()
           }
         if (Fun_Error(GetLastError())==1)      // Обработка ошибок
            continue;                           // Повторная попытка
         return;                                // Выход из start()
        }
      break;                                    // Выход из while
     }
  }
 
Craft:

我填充了所有的iBarShift函数值(之前的编译导致了错误),上面已经声明了int i;我试着删除这个重放,用j代替它来做清洁实验;这没有用--我在一些柱子上得到了多个订单的开仓/平仓。下面是带有开放条件的代码,也许我弄错了什么。我们还能做什么?

1.什么是 "总数 "变量,它的值分配在哪里?

2.最好把else放在第二个if(Total==0 if(

 
alsu:

1.什么是 "总数 "变量,其数值分配在哪里?

这是基于《简单专家:https://book.mql4.com/ru/samples/expert》一文中的例子。

int start()
  {
   int
   Total,                           // Количество ордеров в окне 
...
   // Учёт ордеров
   Symb=Symbol();                               // Название фин.инстр.
   Total=0;                                     // Количество ордеров
   for(int i=1; i<=OrdersTotal(); i++)          // Цикл перебора ордер
     {
      if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
        {                                       // Анализ ордеров:
         if (OrderSymbol()!=Symb)continue;      // Не наш фин. инструм
         if (OrderType()>1)                     // Попался отложенный
           {
            Alert("Обнаружен отложенный ордер. Эксперт не работает.");
            return;                             // Выход из start()
           }
         Total++;                               // Счётчик рыночн. орд
         if (Total>1)                           // Не более одного орд
           {
            Alert("Несколько рыночных ордеров. Эксперт не работает.");
            return;                             // Выход из start()
           }
         Ticket=OrderTicket();                  // Номер выбранн. орд.
         Tip   =OrderType();                    // Тип выбранного орд.
         Price =OrderOpenPrice();               // Цена выбранн. орд.
         SL    =OrderStopLoss();                // SL выбранного орд.
         TP    =OrderTakeProfit();              // TP выбранного орд.
         Lot   =OrderLots();                    // Количество лотов
        }
     }
 

alsu:

2.在第二个if(Total==0)之前,最好加上else if(.

它没有帮助。阿尔苏 对不起,打扰了,但我真的想弄清楚这个问题。
 
Craft:
它没有帮助。阿尔苏 抱歉打扰了你,但我真的想搞清楚(把它结束)。

没什么大不了的。

尝试提交/* */简单EA中的一段代码,并将Total替换为orders_total--一个我们自己声明的变量。