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

 

...并决定--这里也为你提供了 "村民 "分支的一个IANINS的代码部分--计算市场订单的平均价格和PriceTarget的目标价格--这是b/w level + TP。 TP已经由你决定了--也要根据你的需要来调整它。

 total=CountTrades();
      AveragePrice = 0;
      double Count = 0;
      for(cnt=OrdersTotal()-1; cnt>=0; cnt--) 
        {
         OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
         if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=MagicNumber) continue;
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber) 
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL) 
              {
               AveragePrice+=OrderOpenPrice()*OrderLots();
               Count+=OrderLots();
              }
           }
        }
      if(total>0) AveragePrice=NormalizeDouble(AveragePrice/Count,Digits);
      if(NewOrdersPlaced) 
        {
         for(cnt=OrdersTotal()-1; cnt>=0; cnt--) 
           {
            OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
            if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=MagicNumber) continue;
            if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber) 
              {
               if(OrderType()==OP_BUY) 
                 {
                  PriceTarget= AveragePrice + TakeProfit * Point;
                  BuyTarget=PriceTarget;
                  Stopper=AveragePrice-Stoploss*Point;
                  flag=TRUE;
                 }
              }
            if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber) 
              {
               if(OrderType()==OP_SELL) 
                 {
                  PriceTarget= AveragePrice - TakeProfit * Point;
                  SellTarget = PriceTarget;
                  Stopper=AveragePrice+Stoploss*Point;
                  flag=TRUE;
                 }
              }
           }
        }
      if(NewOrdersPlaced) 
        {
         if(flag == TRUE) 
           {
            for(cnt=OrdersTotal()-1; cnt>=0; cnt--) 
              {
               OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
               if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=MagicNumber) continue;
               if(OrderSymbol()== Symbol() && OrderMagicNumber() == MagicNumber) OrderModify(OrderTicket(),AveragePrice,OrderStopLoss(),PriceTarget,0,Yellow);
               NewOrdersPlaced = FALSE;
              }
           }
        }
     }
   return(0);
  }
//???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????

int CountTrades() 
  {
   int count=0;
   for(int trade=OrdersTotal()-1; trade>=0; trade--) 
     {
      OrderSelect(trade,SELECT_BY_POS,MODE_TRADES);
      if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=MagicNumber) continue;
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)
         if(OrderType()==OP_SELL || OrderType()==OP_BUY) count++;
     }
   return(count);
  }

而不是这个NewOrdersPlaced()和OrderModify()。

你将拥有绘制(设置)你的B/U线的水平 - 整个马赛克在你手中 - 编辑。

 
Roman.:

这里是我的代码部分--负责核算这个特定EA的连续亏损交易的总损失(根据魔术师的说法)。我为我的版本的网状雪崩做的--根据你的需要调整它--代码被注释了...

全局变量

这段代码片段之后是一个循环,通过这个非常EA的未结订单,并计算其总利润。之后,你把这个值与变量

并作出决定。

Iteration' - 未定义变量 D:Programs/MetaTrader 4 - RoboForex/experts/NewCobWebPivot.mq4 (204, 3)
Iteration' - 变量未定义 D:\Programs\MetaTrader 4 - RoboForex\experts\NewCobWebPivot.mq4 (234, 17)
 
belck:
Iteration' - 未定义变量 D:Programs/MetaTrader 4 - RoboForex/experts/NewCobWebPivot.mq4 (204, 3)
Iteration' - 变量未定义 D:\Programs\MetaTrader 4 - RoboForex\experts\NewCobWebPivot.mq4 (234, 17)

double  Level_new,  PointValue,
        lots;                       // вспомогательная переменная для расчета нового размера лота при очередной итерации
int Iteration, Counter_Loss, Ticket_at_history; // счетчик для подсчета последовательного убытка позиций колен лавины
//bool Flag_Counter_Loss = false;
double Current_Loss, Sum_Loss;     // текущий и суммарный убыток
 

请看上一页中尤里-雷谢托夫提供给你的简单方法。

如果它不适合你,那么就把你建议的代码部分组装成一个马赛克。

另外关于这个问题,完全拆解猫头鹰的代码可能是有用的--从我的上一篇文章来看--b/w级是CELAN Double_Minus_1分支的IANIN。如果你把它逐骨拆开,会更好地阐明解决你的问题的办法,IMHO。如果你要画一条线,你需要知道如何与物体打交道。这些事情,IMHO,不是一个 "中等水平的程序员 "一眼就能解决的,而且不需要推动......:-)

拖车上的猫头鹰代码和黑白+TP的平均数。

附加的文件:
 
Roman.:

你可以通过Skype联系我:avto-personal-plus
 
Reshetov:
这不是一个错误。日志中的错误用红色而不是黄色图标标示。

那为什么不工作呢?
 

我这里没有Skype。


试试简化版,看看尤里-雷谢托夫是如何在首页推荐你的--在我的代码后面直接输入他的代码。

请看完整的接收代码与评论。


double  Level_new,  PointValue,
        lots;                       // вспомогательная переменная для расчета нового размера лота при очередной итерации
int Iteration, Counter_Loss, Ticket_at_history; // счетчик для подсчета последовательного убытка позиций колен лавины
//bool Flag_Counter_Loss = false;
double Current_Loss, Sum_Loss;     // текущий и суммарный убыток


int start()    // -----------------------СТАРТ ЭКСПЕРТА--------------- 
{
//---------------------расчет по истории ордеров номера очередной итерации----------------------------------------------- 
  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) { // Имеем убыток по закрытым позам
  if ((AccountEquity + Sum_Loss) >= AccountBalance) { // Достигли безубытка
    // Здесь какой-то код, который необходимо выполнить при достижении безубытка
  }
}


}// Конец старт
 
Roman.:

我没有Skype。


试试简化版,就像Yuri Reshetov在上一页推荐的那样--在我的代码后面直接输入他的代码。

请看完整的接收代码与评论。



'TotalCloseProfit' - 未定义变量 D:\Programs\MetaTrader 4 - RoboForex\experts\NewCobWebPivot.mq4 (251, 24)
 
belck:
'TotalCloseProfit' - 未定义变量 D:\Programs\MetaTrader 4 - RoboForex\experts\NewCobWebPivot.mq4 (251, 24)

我已经修复了它--再试试。
 

最重要的是,当你超过b/w级别时,别忘了在这里输入你的行动代码。

if (Sum_Loss < 0.0) { // Имеем убыток по закрытым позам
  if ((AccountEquity + Sum_Loss) >= AccountBalance) 
  { 

    // Достигли безубытка
    // Здесь какой-то код, который необходимо выполнить при достижении безубытка


  }
}