[存档!]任何菜鸟问题,为了不使论坛变得混乱。专业人士,不要路过。没有你,哪里都不能去 - 4. - 页 391

 
snail09_1:

我认为,我不会创建一个 要关闭的票据数组,而是在市场订单枚举循环中,通过将票据送入关闭函数的输入,检查每个订单的可能条件。

你能在代码中显示这一点吗?

我的意思是,这怎么能实施呢?

 

大家下午好!

也许这个问题不适合新手,但我找不到其他可以提问的主题。

我怎样才能从MetaTrader 4卸下详细的报告,在图表上显示股权而不是余额?我不知道,如果我从MT4或其他方便的方式上传,会不会是现实的?我不知道我是否有正确的平衡,我只想知道缩减的结果。

我不知道如何使用这个经纪人。

 
belous:

你能用代码显示吗?

我的意思是,如何能够实施?

像这样的事?

int ticket;

for(int z=OrdersTotal()-1;z>=0;z--)
   {
   if(!OrderSelect(z,SELECT_BY_POS))
      {
      _GetLastError=GetLastError();
      Print(" OrderSelect(",z,",SELECT_BY_POS)-Error #",_GetLastError);
      continue;
      }
   if(OrderMagicNumber()==magic && OrderSymbol()==Symbol())
      {
      if((OrderType()==OP_BUY)||(OrderType()==OP_SELL))
          {
          // Проверим условие для закрытия, и если истинно          
              {
              ticket=OrderTicket();
              //Закрываем его
              }
           }
       }
    }
 

请帮助。

以下是代码


//-----------------Закрытие по истории в безубыток--------------------
   //---------------------расчет по истории ордеров номера очередной итерации----------------------------------------------- 
  Iteration = 0; // зануляем инерации перед их учетом в цикле по истории
  Sum_Loss = 0;  // суммарный убыток по этим итерациям

datetime 
Time_at_History_Current = 0,
Time_at_History_Previos = 0;     
 
 if(OrdersHistoryTotal() != 0)
   {
    for(int counter = OrdersHistoryTotal()-1; counter >= 0; counter--)
      {
       OrderSelect(counter, SELECT_BY_POS, MODE_HISTORY);
       if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
         {
          if(OrderType() == OP_BUY || OrderType() == OP_SELL)
            {
             if(OrderProfit() < 0) // если убыток по выбранному ордеру, то считаем суммарный и записываем время закрытия ордера
                                   // для последующего его анализа при подсчете количества итераций
                {
                 double lastLoss = OrderProfit();
                 Sum_Loss=Sum_Loss+lastLoss;  // считаем общий убыток по закрытым подряд убыточным ордерам
                 Time_at_History_Current = OrderCloseTime();
                } 
             
             //Print(" Time_at_History_Current_в цикле = ", TimeToStr(Time_at_History_Current, TIME_DATE|TIME_SECONDS));
             //Print(" Time_at_History_Previos_в цикле = ", TimeToStr(Time_at_History_Previos, TIME_DATE|TIME_SECONDS));
             
             if(Time_at_History_Current != Time_at_History_Previos) // если они не равны, то считаем итерации и делаем их равными
               {
                Time_at_History_Previos = Time_at_History_Current ;
                Iteration++;
                //Print("Iteration at History в условии сравнения  = ",  Iteration);
               }   
             else // они равны, то проверяем, дополнительно, наличие профита по выбранному следующему ордеру и выходим из цикла
               {
                if(OrderProfit() >= 0)
                  break;
               }
            }
         }
      }
   }

if (Sum_Loss < 0.0) { // Имеем убыток по закрытым позам
double money = Lots;
   BuyLots = GetBuyLotsSum();
        SellLots = GetSellLotsSum();
        if(BuyLots  > SellLots)money = BuyLots * 10;
        if(BuyLots  < SellLots)money = SellLots * 10;
  if (((AccountEquity() + Sum_Loss + (Sum_Loss / money)) >= AccountBalance()) && (((totalSell > 0) && (totalBuy < 1)) || ((totalSell < 1) && (totalBuy > 0)))) { // Достигли безубытка
    // Здесь какой-то код, который необходимо выполнить при достижении безубытка
        CloseAllBuy();
           CloseAllSell();
           Sum_Loss = 0.0;
           

我没有办法使一个循环打开,当一个交易以负数关闭时,如果下一个订单关闭时高于零,即正数余额,但小于负数,我们把正数加到负数,得到一个新的负数值,这个值已经比较小了。

if(OrderProfit() >= 0 && Sum_Loss < 0.0)
                  double lastLoss_two = OrderProfit();
                 Sum_Loss=Sum_Loss+lastLoss_two;  // считаем общий убыток по закрытым подряд убыточным ордерам
                 Time_at_History_Current = OrderCloseTime();
               }

如果它是更多的负数,根据信号,我们关闭订单并从头开始循环。


情况是,当这段代码在损失中关闭交易时,它会记住减去的余额,而当它在加号中关闭交易时,如果加号小于余额,那么它就会重置Sum_Loss,我需要它不被清零,并被砍掉。

所以这就是现在的工作方式。

它检查一个已关闭的订单,如果已关闭的订单的利润小于零,那么这个利润将被添加到Sum_Loss中,以此类推,直到开放交易的利润超过(将超过)Sum_Loss,当达到时,交易被关闭,Sum_Loss被清零,循环重新开始。

我需要。

订单以负数收盘,其负数利润被加到Sum_Loss中,然后如果下一笔交易以正数利润收盘,Sum_Loss被减去从利润中得到的金额,这意味着下一笔开仓订单Sum_Loss已经是一个较小的金额,以此类推,直到订单利润高于Sum_Loss,然后Sum_Loss被清除,一个新的循环开始。

Sum_Loss = 0。

第一笔平仓单:利润(-50)< 0

Sum_Loss + profit (Sum_Loss + (-50))

Sum_Loss = -50。

第二笔平仓单:利润(+40)>0且Sum_Loss<0

Sum_Loss + profit (Sum_Loss + 40)

Sum_Loss = -10


也许Sum_Loss变量应该被指定为一个负变量? 总的来说,我很困惑。 我已经尝试了很多变体,但我没有得到正确的结果。我已经尝试了很多变种,但仍然没有得到正确的结果。
 
我怎样才能 在不考虑点差的情况下测试EA?这有可能吗?
 
Max79:
我怎样才能在不考虑点差的情况下测试EA?这有可能吗?
谷歌一下,你就会发现,例如在这里(集散?site:mql4.com) 阅读:https://www.mql5.com/ru/forum/102224/page2
 

谁有这样一只火鸡?

 

请帮助。

我在EA中设置了一个挂单的修改器,在日志中测试时,它给我一个错误 - 1。

即--"如果我传递未改变的值作为函数参数,将产生错误 1(ERR_NO_RSULT)"。

我在修改前打了个勾,但没有什么用。错误是什么?该EA正在测试中,但我如何才能筛选出数值未变的订单?

 
 
rosomah:

请帮助。

我在EA中设置了一个挂单的修改器,在日志中测试时,它给我一个错误 - 1。

即--"如果我传递未改变的值作为函数参数,将产生错误 1(ERR_NO_RSULT)"。

我在修改前打了个勾,但没有什么用。错误是什么?该EA正在测试中,但我如何才能筛选出数值未变的订单?

打印pr、stop和take的值,看看它们向OrderModify发送什么。