[ARQUIVO] Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 3. - página 530

 

...e decidir - aqui também está para você uma seção de código de um dos ILANINS do ramo "Villagers" - cálculo do preço médio das ordens de mercado e o preço alvo do PriceTarget - este é o nível b/r + TP. A TP já está a seu critério - ajuste-a também às suas necessidades:

 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);
  }

Em vez deste NewOrdersPlaced () e OrderModify()

você terá o nível de desenho (configuração) de sua linha b/u - todo o mosaico está em suas mãos - editar.

 
Roman.:

Aqui está minha seção de código - responsável pela contabilização da perda total das sucessivas perdas de negócios desta EA em particular (de acordo com o mágico). Eu o fiz para minha versão de Avalanche de rede - ajuste-a às suas necessidades - o código é comentado...

Variáveis globais

Este fragmento de código é seguido por um loop através das ordens abertas desta mesma EA e calcula seu lucro total. Depois disso, você compara esse valor com a variável

e tomar uma decisão.

Iteração' - variável não definida D:Programs/MetaTrader 4 - RoboForex/experts/NewCobWebPivot.mq4 (204, 3)
Iteração' - variável não definida D:\Programs\MetaTrader 4 - Especialistas do RoboForex\NewCobWebPivot.mq4 (234, 17)
 
belck:
Iteração' - variável não definida D:Programs/MetaTrader 4 - RoboForex/experts/NewCobWebPivot.mq4 (204, 3)
Iteração' - variável não definida D:\Programs\MetaTrader 4 - Especialistas do RoboForex\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;     // текущий и суммарный убыток
 

Veja a maneira simples oferecida a você por Yuri Reshetov na página anterior.

Se não lhe convém, então monte um mosaico de suas seções de código sugeridas.

Também sobre o assunto, pode ser útil desmontar completamente o código da coruja - do meu último post - o nível b/p é ILANIN da filial CELAN Double_Minus_1. Se você o desmontar ossos por ossos, ele esclarecerá melhor a solução para seu problema, IMHO. Se você vai traçar uma linha, você precisa saber como trabalhar com objetos. ESTAS coisas, IMHO, não podem ser resolvidas por um "programador de nível médio" num piscar de olhos e sem um empurrão... :-)

Código de coruja na média e b/p + TP no reboque.

Arquivos anexados:
 
Roman.:

Você pode me contatar no Skype: avto-personal-plus
 
Reshetov:
Isto não é um erro. Os erros no diário de bordo são marcados com ícones vermelhos, não amarelos.

Por que não está funcionando então?
 

Eu não tenho o Skype aqui.


Experimente a versão simplificada, veja como Yuri Reshetov o recomendou na página principal - digite seu código logo após o meu.

Veja o código completo recebido com comentários:


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.:

Eu não tenho o Skype.


Tente a versão simplificada, veja como Yuri Reshetov recomendado na página anterior - digite seu código logo após o meu.

Veja o código completo recebido com comentários:



TotalCloseProfit' - variável não definida D:\Programs\MetaTrader 4 - Especialistas RoboForex\NewCobWebPivot.mq4 (251, 24)
 
belck:
TotalCloseProfit' - variável não definida D:\Programs\MetaTrader 4 - Especialistas RoboForex\NewCobWebPivot.mq4 (251, 24)

Eu já consertei - tente novamente.
 

Mais importante ainda, não se esqueça de inserir aqui o SEU código de ação quando exceder o nível p/b:

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

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


  }
}