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

 
Ihor Herasko:

SymbolSelect函数

谢谢你!

 
请告知如何以编程方式将图表向左移动。
 

关于交易、自动交易系统和策略测试的论坛

对MQL4新手的任何问题,对算法和代码的帮助和讨论

labvic, 2018.03.12 14:43

大家好,我正面临这样一个问题。

我开了一笔没有止损和止盈的交易。

OrderSend("EURUSD",OP_BUY,0.1,Ask,0,0,0,"",Magic,0,Red);

我想关闭这个订单。

OrderClose(Magic,OrderOpenPrice(),Ask,0,Red);

我得到这个错误:OrderClose错误131

如果我不点OrderOpenPrice(),而是点0.1或 OrderLots(),会出现一个错误:OrderClose错误138

有什么问题呢?

从文档来看,要写一个更古怪的闭合是非常困难的。

bool  OrderClose(
   int        ticket,      // номер ордера
   double     lots,        // количество лотов
   double     price,       // цена закрытия
   int        slippage,    // максимальное проскальзывание
   color      arrow_color  // цвет
   );
不写票,而写魔术,不写成交量,而写公开价格。阅读文档,并在写代码时放心地多看看。


 
Nikolay Gaylis:
请告知如何以编程方式将图表更多地向左移动。

我需要禁用自动滚动和偏移(图表属性CHART_AUTOSCROLL和CHART_SHIFT分别),然后使用ChartNavigate()

 
Ihor Herasko:

需要禁用自动滚动和偏移(图表属性CHART_AUTOSCROLL和CHART_SHIFT分别),然后使用ChartNavigate()

谢谢你!

 

大家好!我是一个新手,正在尝试创建一个EA。我写了一个简单的,看看它是如何工作的。当出现信号时,警报不起作用。我不知道什么是错误。我不知道具体的错误是什么。

//+------------------------------------------------------------------+
//|                                             тенк больше кидж.mq4 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
 double tenkan=iIchimoku(NULL,0,9,26,52,MODE_TENKANSEN,1);       //ЗНАЧЕНИЕ ТЕНКАН
 double kijun=iIchimoku(NULL,0,9,26,52,MODE_KIJUNSEN,1);         // ЗНАЧЕНИЕ КИДЖУН
 //-------------------------------------------------------------------+
  if(tenkan>kijun)                                               //"ЗОЛОТОЙ КРЕСТ"
  Alert("ЗОЛОТОЙ КРЕСТ");                                       // ОПОВЕЩЕНИЕ
  return;
  }

真诚的安德烈。

附加的文件:
 
Andrey Ilinykh:

大家好!我是一个新手,正在尝试创建一个EA。我写了一个简单的,看看它是如何工作的。当出现信号时,警报不起作用。我不知道什么是错误。我不知道具体的错误是什么。

问候安德鲁。

它在工作吗!你在测试器中检查它吗?

 
Nikolay Gaylis:

它是有效的!你用测试器检查吗?

出于某种原因,我也是这么想的。

不,我还没有搞清楚测试器的问题。

我已经编译了专家顾问,并在一分钟的图表上使用它。云层变色,但警报窗口没有打开。会不会是软件错误?

谢谢你!

 
void Laguerr::  deleteOrders()   //  (int otype)
{
   int k = OrdersTotal();
   datetime mDateOrderOp; 
   
   
   for(int i=k-1;i>=0;i--)
   {
      if (OrderSelect(i,SELECT_BY_POS, MODE_TRADES))
      {
         if (OrderSymbol()==nameSym && OrderMagicNumber()== Magic && OrderCloseTime()==0)  // && OrderType() == otype)
         {
            if(OrderType()== OP_BUYSTOP || OrderType()== OP_SELLSTOP) 
            {
               mDateOrderOp = OrderOpenTime();
               int  mTick = OrderTicket();
               //if (OrderType()== OP_BUYSTOP) mOpType = OP_SELL;
               bool flag= false;
               for(int pos=k-1;pos>=0;pos--)
               {
                  if (OrderSelect(pos,SELECT_BY_POS, MODE_TRADES))
                  {
                     if (OrderSymbol()==nameSym && OrderMagicNumber()== Magic && OrderCloseTime()==0)  // && OrderType() == otype)
                     {
                        if(OrderOpenTime() == mDateOrderOp && (OrderType()== OP_BUY || OrderType()== OP_SELL)  ) 
                        {
                            flag = true;   
                            break;
                        } 
                     }
                  }
               }
               if (!flag)
               {
                  if (!OrderDelete(mTick))
                  Print("Ошибка delete ордера . Код ошибки=",GetLastError()); 
                  break;
               }
             } 
         }
      }
   }
}
大家好,情况是这样的:我以一定的TP和OD开了一个订单。但是OD触发了,第二个订单以第一个订单的OD价格开了,方向相反(OD等于第一个订单的损失点数)。在二级SL的情况下,第三笔订单应在与第二笔订单相反的方向开仓,价格等于第二笔订单的价值(止损)。问题:如何使这一连串的开设这三个订单?
 
你能告诉我,关闭EA在符号上开的所有订单的功能是否正确?
void OrderCloseAll(double close_price)
{
   for(int i=OrdersTotal(); i>-1; i--)
      {
         OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) OrderClose(OrderTicket(),lot,close_price,slippage,clrWhite);
      }

}
原因: