任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. - 页 452

 
Profitov:
问题出现了,是否有可能写一个专家顾问或脚本,这将是为了实现例如2%的损失在当天将关闭所有交易?

这是有可能的。
 
帮助 -- 我买了一台新的笔记本电脑,安装了vin.8 -- 我从alpari下载了终端,最后更新了 -- 我加载了以前用过的指标,在MQL4-指标文件夹中,它们出现在那里 -- 但在终端本身的用户中却看不到它们,客户支持也没有说什么直话 -- 怎么办?
 
galinka:
帮助 -- 我买了一台新的笔记本电脑,安装了vin.8 -- 我从alpari下载了终端,最后更新了 -- 我加载了以前用过的指标,在MQL4-指标文件夹中,它们出现在那里 -- 但在终端本身的用户中却看不到它们,客户支持也没有说什么直话 -- 怎么办?

系统菜单 "文件 "有一个新项目 "打开数据文件夹"。这就是你现在必须把它放在哪里。
 
不能这样做--他们不在航站楼内。
 

我一定是误解了该怎么做--程序文件--我有Alpari--打开----,有文件夹---- MQL4-indikators--我把它们放进去--它们出现--我关闭--我打开终端--它们不在用户文件中

 
也许我的指标中有什么需要改变的地方
 

谢谢你的帮助。

 
1mql:

在最后一个extern下面:
extern int slippage = 2; //关闭市场头寸时的价格滑移

插入另一个:
extern bool total_symb = true; //在所有交易

和每一行:
if((OrderSymbol() ==Symbol())

if(OrderSymbol() ==Symbol()

替代这个:
if(OrderSymbol() ==Symbol() || total_symb)

在理论上应该工作,检查。


它只关闭了几个激活了头寸的图表。在其他图表上,将关闭4107错误。我已经尝试在extern bool Buy = false; //删除/关闭买入订单的方向。
extern bool Sell = false; //delete/close sell order direction.在 true .它没有工作。但是,如果我们把它放在一个没有开仓 的图表上,没有一个关闭,看到错误4107。
 
Profitov:
问题出现了,是否有可能写一个专家顾问或脚本,这将是为了实现例如2%的损失在当天将关闭所有交易?
已经写好 了。
 
alsu:

所以,在旧版本中,Ticket仍在某处使用。我们必须清理代码...

制作方法如下。

 Symb=Symbol();                               // Название фин.инстр.
   Total=0;                                     // Количество ордеров
   int order[7];//буффер для семи ордеров
   int ord;//количество ордеров
   ArrayInitialize(order,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;}
         Total++;                               // Счётчик рыночн. орд
         if (Total>7){Alert("Более 7 ордеров. Эксперт не работает.");return;}
         Ticket=OrderTicket();                  // Номер выбранн. орд.
         Tip   =OrderType();                    // Тип выбранного орд.
         order  [OrderType()]++;                    // ПОЛУЧАЕМ КОЛИЧЕСТВО ОРДЕРОВ         
         Price =OrderOpenPrice();               // Цена выбранн. орд.
         SL    =OrderStopLoss();                // SL выбранного орд.
         TP    =OrderTakeProfit();              // TP выбранного орд.
         Lot   =OrderLots();                    // Количество лотов
        }
     }
     ord=order  [OrderType()];

 while(true)                                  // Цикл закрытия орд.
     {
      if (Tip==0 && Cls_B==true)                // Открыт ордер Buy..
        {                                       //и есть критерий закр
         Alert("Попытка закрыть Buy ",Ticket,". Ожидание ответа..");
         RefreshRates();                        // Обновление данных
         Ans=OrderClose(Ticket,Lot,Bid,2);      // Закрытие Buy
         if (Ans==true){Alert ("Закрыт ордер Buy ",Ticket);if (ord ==0){Alert ("Закрыты все ордера ",ord);break;}}
         if (Fun_Error(GetLastError())==1)      // Обработка ошибок
            continue;                           // Повторная попытка
         return;                                // Выход из start()
        }

这些位置完全关闭。的确,错误0出来了,但码头说,这意味着没有错误。而且我在日志中找不到"所有订单关闭 " 的信息。

我把我修改过的那几行加粗了。它似乎可以工作,我还没有彻底检查。

我不太理解循环的工作原理。假设我在循环的上方和下方以及中间都有代码。如果循环的条件吻合,那么代码只在循环内执行,不会让循环下面的代码行得到执行?考虑到这个例子,break 操作符是否中断了 循环?它是允许循环下面的行被执行,还是程序从头开始计算?

如果我错了,请纠正我:break 中断它所在的循环,而continue 执行它上面的运算符的评估,所以不清楚是否有第二个运算符--它的评估会被中断,还是continue 会中断所有的代码,让程序先执行它?

原因: