[ARQUIVO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 4. - página 391

 
snail09_1:

Imho, eu não criaria uma série de tickets para fechar, mas no circuito de enumeração de ordens de mercado, verificaria cada ordem, alimentando seu ticket com a entrada da função de fechamento com uma verificação das condições possíveis.

Você pode mostrar isso no código?

Quero dizer, como isto pode ser implementado?

 

Boa tarde a todos!

Talvez esta pergunta não seja para os novatos, mas eu não consegui encontrar outro fio onde pudesse fazer uma pergunta:

Como posso descarregar um relatório detalhado do MetaTrader 4 para ter equidade no gráfico em vez de equilíbrio? Não sei, se eu fizesse o upload a partir do MT4 ou de alguma outra forma conveniente, seria realista? Não sei se tenho o equilíbrio certo ou não, só quero saber os resultados do sorteio.

Não tenho a menor idéia de como utilizar estes corretores.

 
belous:

Você pode mostrá-lo em código?

Quero dizer, como pode ser implementado?

Algo assim?

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();
              //Закрываем его
              }
           }
       }
    }
 

ajude, por favor.

Aqui está o código


//-----------------Закрытие по истории в безубыток--------------------
   //---------------------расчет по истории ордеров номера очередной итерации----------------------------------------------- 
  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;
           

Não tenho como abrir um loop quando um negócio foi fechado em menos e se o próximo pedido for fechado acima de zero, ou seja, saldo positivo, mas menos que negativo, adicionamos mais ao negativo e obtemos um novo valor negativo, que já é menor.

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

Se for mais negativo, de acordo com o sinal, fechamos a ordem e iniciamos o ciclo desde o início.


A situação é que quando este código fecha o negócio em prejuízo, então ele se lembra do saldo negativo, e quando fecha o negócio no mais, e o mais é menor que o saldo, então ele redefine Sum_Loss e eu preciso que ele não seja zerado, e cortado para baixo.

Portanto, é assim que funciona agora:

ele verifica uma ordem fechada, se o lucro da ordem fechada for menor que zero, então este lucro é adicionado à Soma_Perda, e assim por diante até que o lucro do comércio aberto exceda (será mais que) Soma_Perda, quando alcançado, o comércio é fechado, e a Soma_Perda é zerada e o ciclo começa novamente.

Eu preciso:

ordem fechada em menos, seu lucro negativo foi adicionado ao Sum_Loss, então se o próximo negócio fechado com lucro positivo, o Sum_Loss é reduzido pelo montante recebido do lucro, o que significa que o próximo pedido aberto Sum_Loss já é um montante menor, e assim por diante até que o lucro do pedido seja maior que o Sum_Loss, e então o Sum_Loss é limpo e um novo ciclo começa.

Soma_Perda = 0;

1ª ordem fechada: Lucro (-50) < 0

Soma_Perda + lucro (Soma_Perda + (-50))

Soma_Perda = -50;

2ª ordem fechada: Lucro (+40) > 0 e Soma_Perda < 0

Soma_Perda + lucro (Soma_Perda + 40)

Soma_Perda = -10


Talvez a variável Sum_Loss deva ser especificada como uma variável negativa? em geral estou confuso. Já tentei muitas variantes, mas não obtive o resultado certo. Pelo menos me guie na direção certa, me diga o que fazer, pois não entendo.
 
Como posso testar uma EA sem levar em conta o spread? Isto é possível?
 
Max79:
Como posso testar uma EA sem levar em conta o spread? Isso é possível?
Google it e você o encontrará, por exemplo aqui (set spread ? site:mql4.com) leia: https://www.mql5.com/ru/forum/102224/page2
 

Quem tem um peru assim?

 

Por favor, ajude.

Coloquei um modificador de ordens pendentes, na EA, e isso me dá um erro - 1 ao testar no Diário.

Isto é - "Se eu passar valores inalterados como parâmetros de função, será gerado o erro 1 (ERR_NO_RSULT)".

Coloco um cheque antes da modificação, mas isso não ajuda. Qual é o erro? A EA está sendo testada, mas como posso peneirar os pedidos com valores inalterados?

 
 
rosomah:

Por favor, ajude.

Coloquei um modificador de ordens pendentes, na EA, e isso me dá um erro - 1 ao testar no Diário.

Isto é - "Se eu passar valores inalterados como parâmetros de função, será gerado o erro 1 (ERR_NO_RSULT)".

Coloco um cheque antes da modificação, mas isso não ajuda. Qual é o erro? A EA está sendo testada, mas como posso peneirar os pedidos com valores inalterados?

Imprima os valores pr, pare e leve para ver o que eles enviam para OrderModify