[存档]任何菜鸟问题,为了不使论坛变得杂乱无章。专业人士,不要路过。没有你就无处可去 - 3. - 页 524

 
sss2019:

我的专家顾问在我的终端中打开了三个订单,在某些时候,它应该关闭所有三个订单,但由于某些原因,它只关闭了两个,它没有给出错误。

下面是这篇应该可以结束交易的文章

我不明白出了什么问题,为什么只有两笔交易完成。请告诉我谁知道什么。

if(OrderSelect(i, SELECT_BY_POS) == false) continue;
 
Vinin:


以不同的方式进行循环


但这也无济于事。不重新安排循环或替代继续都没有用,好像EA没有看到自己的三个订单,而只删除了两个。

 
反转周期重新计算的方向
 
拿着它并使用它。
附加的文件:
 
有时事情是如此不可理解,根本不符合逻辑,我认为终端环境本身就有错误。
 
sss2019:
有时事情是如此不可理解,根本不符合逻辑,我认为终端环境本身就有错误。
为了让它看起来更少,你需要从学习课本和手册开始。然后尝试在论坛上找到类似问题的解释。
 
sss2019:

你如何更好地组织EA的最大缩减量,在这个时候它就会停止工作,你能不能设置一个静态变量,将损失的数额累积起来?

专家顾问应该停止工作,但在重新启动或改变参数后,它将再次开始工作。


在初始化EA时,你可以在一个静态变量 中保存当前余额。在 "开始 "功能中,你可以检查目前的余额比最初的余额减少了多少百分比,如果百分比超过了允许的范围,则禁止交易。简而言之,没有任何代码。重新启动后,专家顾问将记住新的初始余额...
 
MrSoros:

在初始化专家顾问时,可以将当前余额保存在一个静态变量中。而在 "开始 "功能中,检查当前余额比初始余额下滑了多少,如果百分比高于允许的水平--则禁止交易。简而言之,没有任何代码。重新启动后,专家顾问将记住新的初始余额。

你理解了这个问题吗?
 
MrSoros:

1.在初始化专家顾问时,你可以将当前的余额保存到一个静态变量中。然后,"开始 "功能检查当前余额比初始余额下降了多少百分比,如果百分比更高,交易将被禁止。简而言之,没有任何代码。

2.重新启动后,评估员将记住新的原始余额...

1.你可以。我有这个选项(有代码)--你自己初始化变量。

extern int MaxLoss = 90;          // Максимально допустимая просадка в процентах от баланса
int  orderIndex;
bool IsExpertFailed = false;
bool IsExpertStopped = false;
double lots;                       // вспомогательная переменная для расчета нового размера лота 
double Lots_New;                   // Количество лотов для новых ордеров
int ticket;                        // Номер ордера
double orderLots;                  // Lots   
double orderProfit;                // Profit
double Price;                      // Цена открытия рыночного ордера
double SL;                         // Значение StopLoss ордера
double  TP;                        // Значение TakeProfit ордера
static datetime prevtime = 0;       // по ценам открытия
int start()
{  
   if (IsExpertStopped)
   {
      Comment("Не удалось инициализировать советник!");
      return (0);
   }
   
   if (IsExpertFailed)
   {
      Comment("Критическая ошибка! Советник остановлен.");
      return (0);
   }
      Level_new=MarketInfo(Symbol(),MODE_STOPLEVEL );    
 
   int orderCount = 0;  
      // ------------------------------------------------Учет ордеров только ЭТОГО ЭКСПА---------------------------

   int orderType;
   for (orderIndex = (OrdersTotal() - 1); orderIndex >= 0; orderIndex--)
     {  
      if (!OrderSelect(orderIndex, SELECT_BY_POS))    continue;
      if ((OrderSymbol() != Symbol()) || (OrderMagicNumber() != magic))    continue;

      orderType = OrderType();
      if ((orderType != OP_BUY) && (orderType != OP_SELL))     continue;
          ticket = OrderTicket( );                         // Номер ордера
          orderLots = OrderLots();                         // Lots   
          orderProfit = OrderProfit() + OrderSwap();       // Profit
          Price = OrderOpenPrice();                        // Цена открытия рыночного ордера
          SL =  OrderStopLoss();                           // Значение StopLoss ордера
          TP = OrderTakeProfit();                          // Значение TakeProfit ордера
          
             if (ticket>0)                                               // Если позиция открылась
                    {
                             while(OrderSelect(ticket,SELECT_BY_TICKET)==false)       // Если ордер выбран
                                 {
                                   Sleep(100);
                                 }
                                  double OpenPrice=OrderOpenPrice();
                    }
          // Проверка на предельную просадку      
      double loss = - ((orderProfit * 100.0) / AccountBalance());
      if (loss > MaxLoss)
      {
         Print ("MaxLoss");
         CloseAllOrders(magic);
         IsExpertFailed = true;
         return (0);
      }        
         
      orderCount++;                     // считаем ордера (не больше i)                   
     
    }   

2.不,它不会记住第一次启动该专家之前的平衡水平。将只记住变量中的当前水平

AccountBalance()

......为这个账户。

 

下午好!我之前有一个关于在Excel中正确表示报价的问题。这个问题已经得到了回答,感谢costy 现在我有一个问题,是否有可能使(没有MQL5和dll)更多货币的数据被上传?示 意图如下,代替"...... "的是相应的日期值、收盘价值和当前期数。

我假设问题的答案将涉及对我的代码进行可能的修正。我附上专家顾问的代码,它将一个当前金融工具的收盘价数值写入文件中。

#property copyright "S.I.Shlikov"
#property link      ""
int init()  
  {
   string Name=Symbol();
   int h=FileOpen(Symbol()+"-"+Period()+".csv",FILE_CSV|FILE_WRITE|FILE_READ,";");
    if(h<1)
      {
      Print("Файл не найден : ", GetLastError());
      return(false);
      }
   FileSeek(h, 0, SEEK_END);
   FileWrite(h,"Date",Name,"Period",Period());
   FileClose(h);        
  }
int start()
  {
   int h=FileOpen(Symbol()+"-"+Period()+".csv",FILE_CSV|FILE_WRITE|FILE_READ,";");
    if(h<1)
      {
      Print("Файл не найден : ", GetLastError());
      return(false);
      }
   string Wtime=TimeToStr(TimeCurrent(),TIME_DATE|TIME_MINUTES);
   FileSeek(h, 0, SEEK_END);
   FileWrite(h,Wtime,NormalizeDouble(Close[0], Digits));
   FileClose(h);   
   return(0);
  }