Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 1551

 
natawik:

Olá a todos, ajudem por favor!

Eu tenho um problema como este. Comprei um vpc da mql5 tudo está funcionando bem, instalei um especialista, montei 8 gráficos e montei um especialista. E eu transferi tudo para a vpc.

Tive que desinstalar o metatrade do meu computador porque não era meu.

E agora, quando entro do meu computador.

Tudo funciona, o especialista. Funciona, mas não consigo vê-lo para fazer qualquer mudança nas configurações. Como posso devolver a EA e os horários para que eu possa administrá-los a partir do meu computador?

Obrigado!

Você precisa salvar os perfis para este caso. Para carregá-lo mais tarde sob a UPU.

 

Quem sabe como exportar todos os dados do relatório para exelir sem distorção?

se eu apenas copiar alguns dos dados na coluna "lucro" é exportado como data, por exemplo, janeiro de 94 ao invés de 1,94

Não importa como eu tente salvar, não consigo me livrar deste problema.

 
законопослушный гражданин:

Quem sabe como exportar todos os dados do relatório para exelir sem distorção?

se eu apenas copiar alguns dos dados na coluna "lucro" é exportado como data, por exemplo, janeiro de 94 ao invés de 1,94

Não importa como eu tente salvar, eu não posso me livrar deste problema.

Antes de carregar, ou antes de abrir o arquivo exportado, substitua o separador entre parte inteira e parte fracionária em Excell por um ponto.

 
законопослушный гражданин:

Quem sabe como exportar todos os dados do relatório para exelir sem distorção?

se eu apenas copiar alguns dos dados na coluna "lucro" é exportado como data, por exemplo, janeiro de 94 ao invés de 1,94

Não importa como eu tente salvá-lo, eu não posso me livrar do problema.

Então

 
SGarnov:

Talvez você também deva levar em conta o número de paradas acionadas. Por exemplo, a EA encontrará uma parada na história, e se houver duas delas, deve adicioná-las ambas a três ou quatro, tudo depende do ajuste externo "número de paradas perdidas".

A melhor coisa no seu caso, e não apenas no seu caso, mas na maioria dos casos, em vez de recorrer ao histórico comercial com uma busca de ordens fechadas, mantenha bilhetes de ordens abertas em uma matriz. Periodicamente, ao passar pela matriz, verifique se esta ordem foi fechada por uma condição simples.

if(OrderCloseTime() != 0) // значит ордер закрылся…

Se o pedido foi fechado, ele pode ser selecionado pelo bilhete e verificado se foi fechado com lucro ou não. Você também pode verificar a distância da posição aberta até a parada e acrescentar a essa distância o máximo que sua mãe permitir.

Depois de todas essas manipulações, devemos redefinir o tamanho da matriz para 0 e preenchê-la novamente com os carrapatos das ordens abertas no momento atual através do loop, aumentando o tamanho da matriz.

 
Vladislav Andruschenko:

você tem que salvar perfis para esta ocasião. Para carregá-lo mais tarde sob a UPU.

E se eu desligar a VPN e colocar tudo de volta e ligar a VPN e transferir todos os gráficos e EA para você?
Não haverá nenhum dado antigo sobre você, haverá?
 

Olá

Ajude-me a entender o código

Anexou um pedaço de código que tem classes e tudo está funcionando bem, mas

Quero conectar algumas funções das classes em uma função separada minha e escrever erros

exemplo

void OpenHandPosition(int tp)
   {
      string lot=0.01
      bool response = actionTrade.ManageOrderSend(tp, lt, 0, 0, 0, 0, 0);//
   }

funciona assim

e isto não funciona

void OpenHandPosition(int tp)
   {

    int stopLoss   = GetStopLossPoints(size);
    int takeProfit = GetTakeProfitPoints();
    bool response = actionTrade.ManageOrderSend(tp, lt , stopLoss, takeProfit, 0, 0, 0);

   }

esta função funciona

void StrategyTrader::DoEntryTrade(TradeDirection tradeDir)

e este não

OpenHandPosition(int tp)

ajuda

Arquivos anexados:
test.mq5  21 kb
 
SGarnov:

Cheguei à conclusão que é difícil de implementar, seu código é muito mais simples, claro e lógico, mas ..... de alguma forma também não faz sentido. O principal é não desistir.

Parece estar tudo bem. Experimente, pergunte...

//+------------------------------------------------------------------+
//|                                                 SGarnov.v2.1.mq4 |
//|                                           Copyright 2020, DrMak. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, DrMak."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
//--- input parameters
input int      T_Profit = 2;     // Коэффициент Take Profit
input int      S_Loss   = 200;   // Уровень Stop Loss
input double   O_Lots   = 0.01;  // Лоты
input int      SL_Count = 2;     // Количество убыточных ордеров
input int      Slippage = 30;    // Проскальзывание
input int      N_Magic  = 888;   // Magic

datetime T_Start;
double sl_price,tp_price,t_profit,s_loss;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- 
   Comment("");
//--- 
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   t_profit = S_Loss*T_Profit * Point();
   tp_price = NormalizeDouble(t_profit+GetPointLoss(), Digits);
//---
   s_loss   = MathMax(S_Loss, MarketInfo(_Symbol, MODE_STOPLEVEL)) * Point();
   sl_price = NormalizeDouble(s_loss, Digits);
//---
   // Удаляем отложенный ордер после профита
   if(CountOrders(-1)==1) DeletePending();
//---
   // Проверяем серию убыточных ордеров
   if(CountOrders(-1)==1&&GetLossOrders()<SL_Count)
     {
      // Устанавливаем отложенный ордер
      SendPending();
     }
//---
   // Проверяем наличие ордеров
   if(CountOrders(-1)>0)
     {
      // Устанавливаем StopLoss/TakeProfit
      ModifyOrder();
     }
//---
   int a=(int)TimeStart();
   int b=GetLossOrders();
   int c=(int)((GetPointLoss()+t_profit)/Point);
   
   Comment("Время начала цикли: ",TimeToStr(a,TIME_SECONDS),"\n",
           "Серия StopLoss ордеров: ",b,"\n",
           "Размер TakeProfita: ",c);
  }
//+------------------------------------------------------------------+
//| Модификация ордера                                               |
//+------------------------------------------------------------------+
void ModifyOrder()
  {
   double op=0;
   for(int pos=OrdersTotal()-1;pos>=0;pos--)
     {
      if(OrderSelect(pos,SELECT_BY_POS)==true)
        {
         if(OrderSymbol()==_Symbol)
           {
            if(OrderStopLoss()==0)
              {
               if(OrderType()==OP_BUY)
                 {op=OrderOpenPrice();
                  if(OrderModify(OrderTicket(), OrderOpenPrice(), op-sl_price, op+tp_price, OrderExpiration()))
                    {Print("Ордер модифицирован");}
                  else
                    {Print("Ошибка модификации ордера:", GetLastError());}
                 }
               if(OrderType()==OP_SELL)
                 {op=OrderOpenPrice();
                  if(OrderModify(OrderTicket(), OrderOpenPrice(), op+sl_price, op-tp_price, OrderExpiration()))
                    {Print("Ордер модифицирован");}
                  else
                    {Print("Ошибка модификации ордера:", GetLastError());}
                 }
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Подсчет ордеров по типу                                          |
//+------------------------------------------------------------------+
//|  0 - ордера типа BUY          1 - ордера типа SELL               |
//|  2 - ордера типа BUYLIMIT     3 - ордера типа SELLLIMIT          |
//|  4 - ордера типа BUYSTOP      5 - ордера типа SELLSTOP           |
//|  6 - ордера типа Balance     -1 - Все типы ордеров               |
//+------------------------------------------------------------------+
int CountOrders(int or_ty=-1) 
  {
   int cnt=0;
   for(int pos=OrdersTotal()-1;pos>=0;pos--)
     {
      if(OrderSelect(pos,SELECT_BY_POS)==true)
        {
         if(OrderSymbol()==_Symbol)
           {
            if(or_ty<0 || or_ty==OrderType()) cnt++;
           }
        }
     }
   return(cnt);
  }
//+------------------------------------------------------------------+
//| Установка отложенного ордера                                     |
//+------------------------------------------------------------------+
void SendPending()
  {
   double op=0;
   for(int i = OrdersTotal() - 1; i >= 0; i--)
     {
      if(OrderSelect(i, SELECT_BY_POS)==true)
        {
         if(OrderSymbol()==_Symbol)
           {
            if(OrderType()==OP_BUY)
              {
               if(OrderStopLoss() != 0)
                 {
                  op=OrderStopLoss();
                  if(OrderSend(_Symbol,OP_SELLSTOP,O_Lots,op,Slippage,0,0,NULL,N_Magic))
                    {Print("Отложенный ордер установлен");}
                  else
                    {Print("Ошибка установки отложеного одера: ", GetLastError());}
                 }
              }
            if(OrderType()==OP_SELL)
              {
               if(OrderStopLoss() != 0)
                 {
                  op=OrderStopLoss();
                  if(OrderSend(_Symbol,OP_BUYSTOP,O_Lots,op,Slippage,0,0,NULL,N_Magic))
                    {Print("Отложенный ордер установлен");}
                  else
                    {Print("Ошибка установки отложеного одера: ", GetLastError());}
                 }
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|  Возвращает пункты убытка закрытых ордеров с начала цикла        |
//+------------------------------------------------------------------+
double GetPointLoss()
  {
   double result=0,b=0,s=0;;
   int i=OrdersHistoryTotal();
   for(int pos=0; pos<i; pos++)
     {
      if(OrderSelect(pos, SELECT_BY_POS, MODE_HISTORY))
        {
         if(OrderSymbol()==_Symbol)
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               if(OrderProfit()<0)
                 {
                  if(OrderCloseTime()>=TimeStart())
                    {
                     if(OrderType()==OP_BUY)
                       {
                        b+=OrderOpenPrice()-OrderClosePrice();
                       }
                     if(OrderType()==OP_SELL)
                       {
                        s+=OrderClosePrice()-OrderOpenPrice();
                       }
                    }
                 }
              }
           }
        }
     }
   return(b+s);
  }
//+------------------------------------------------------------------+
//| Удаление отложенного ордера                                      |
//+------------------------------------------------------------------+
void DeletePending()
  {
   for(int i = OrdersTotal() - 1; i >= 0; i--)
     {
      if(OrderSelect(i, SELECT_BY_POS)==true)
        {
         if(OrderSymbol()==_Symbol)
           {
            if(OrderType()==OP_BUYSTOP || OrderType()==OP_SELLSTOP)
              {
               if(OrderMagicNumber() == N_Magic)
                 {
                  if(OrderDelete(OrderTicket()))
                    {Print("Отложенный ордер удален");}
                  else
                    {Print("Ошибка удаления отложеного одера: ", GetLastError());}
                 }
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Возвращает время начала цикла                                    |
//+------------------------------------------------------------------+
datetime TimeStart()
  {
   datetime ts1=0,ts2=0;
   if(OrdersTotal()!=0)
     {
      for(int i = OrdersTotal() - 1; i >= 0; i--)
        {
         if(OrderSelect(i, SELECT_BY_POS))
           {
            if(OrderMagicNumber()!=N_Magic)
              {
               if(OrderType()==OP_BUY || OrderType()==OP_SELL)
                 {
                  if(OrderSymbol()==_Symbol)
                    {
                     if(ts1<OrderOpenTime())
                       {
                        ts1=OrderOpenTime();
                       }
                    }
                 }
              }
           }
        }
      for(int pos=0; pos<OrdersHistoryTotal(); pos++)
        {
         if(OrderSelect(pos, SELECT_BY_POS, MODE_HISTORY))
           {
            if(OrderMagicNumber()!=N_Magic)
              {
               if(OrderType()==OP_BUY || OrderType()==OP_SELL)
                 {
                  if(OrderSymbol()==_Symbol)
                    {
                     if(ts2<OrderOpenTime())
                       {
                        ts2=OrderOpenTime();
                       }
                    }
                 }
              }
           }
        }
     }
   return(MathMax(ts1,ts2));
  }
//+------------------------------------------------------------------+
//|  Возвращает кол-во серии убыточных ордеров                       |
//+------------------------------------------------------------------+
int GetLossOrders()
  {
   int cnt=0;
   int i=OrdersHistoryTotal();
   for(int pos=0; pos<i; pos++)
     {
      if(OrderSelect(pos, SELECT_BY_POS, MODE_HISTORY))
        {
         if((OrderSymbol()==_Symbol))
           {
            if(OrderCloseTime()>=TimeStart())
              {
               if(OrderProfit()<0) cnt++;
              }
           }
        }
     }
   return(cnt);
  }
//+------------------------------------------------------------------+
 
MakarFX:

Parece estar tudo bem. Experimente, pergunte...

Obrigado pela ajuda, só na próxima semana poderei escrever a exatidão da EA, hoje é sexta-feira e não estou mais procurando por preços de entrada no mercado.

 
natawik:
E se eu desligar a VPN e colocar tudo de volta, então ligue a VPN e transfira tudo para você, os gráficos e o Expert Advisor?
Não haverá nenhum dado antigo sobre você, haverá?
Frequentemente encontro tais problemas quando instalo um PC, configuro o terminal, depois migro tudo, continuo trabalhando, mudo os gráficos, etc., e depois bam, algo precisa ser mudado.... Eu tenho que fazer tudo de novo.