[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 627

 
hoz:


Vitaly, o ponto é claro aí. Veja:

No início sl = 0; tp = 0; Depois, com base no i_sl e i_tp inseridos pelo usuário, encontro os valores normalizados de sl e tp que já estarão na ordem. E então eu verifico sesl etp não são iguais a zero, ou seja, se mudaram depois que eu os declarei no início da função, então modificamos o pedido.

E sesl etp são iguais a zero, isso significa que esses parâmetros não foram calculados. como eu o entendo. Uma vez obtidos os valores dessas variáveis, elas se tornarão imediatamente não-zero, e podemos modificar a ordem... Faz sentido?



Desculpe, eu não vi nada, nem óculos e nem cor, mas por que passar parâmetros para esta função, e por referência também? Se i_sl,g_type... são variáveis globais, funcionarão sem parâmetros, e se você precisar alterá-las (variáveis após a modificação), faça-o na mesma função após a modificação.
 
rigonich:

Desculpe, não vi nada, não estou usando óculos ou qualquer cor, mas por que devemos passar parâmetros para esta função, e por referência também? Se i_sl,g_type... são variáveis globais, funcionarão sem parâmetros, e se você precisar alterá-las (variáveis após a modificação), faça-o na mesma função após a modificação.


As ordens são enviadas pelas funçõesOpenBuy() eOpenSell(), mas a funçãoOrderModifying() modifica as ordens

Isto é, se, por exemplo, a função de modificação é colocada na funçãoTrade (int signal) ouOpenBuy() eOpenSell(), então os valores sl e tp obtidos na funçãoOrderModifying( )devem ser passados para lá de qualquer forma.Esses valores estão faltando nessa função.

 
hoz:


As ordens são enviadas pelas funçõesOpenBuy() eOpenSell(), mas são modificadas pela funçãoOrderModifying()

Isto é, se, por exemplo, a função de modificação é colocada na funçãoTrade (int signal) ouOpenBuy() eOpenSell(), então os valores sl e tp obtidos na funçãoOrderModifying( )devem ser passados para lá de qualquer forma.Esses valores estão faltando nessa função.


No seu caso, as funçõesOpenBuy() eOpenSell() fazem pedidos sem std e depois, se os pedidos são feitos, eles são modificados usando a funçãoOrderModifying() . Não vejo nenhuma necessidade de colocar em outro lugar a funçãoOrderModifying() e passar quaisquer parâmetros para ela. Você precisa declararvariáveis sl e tp nesta função. int sl = 0, tp = 0;

Desculpe, não int, um duplo.

 
rigonich:

Suas funçõesOpenBuy() eOpenSell() fazem pedidos sem sl e assim por diante, e então, se os pedidos são feitos, eles são modificados usando a funçãoOrderModifying() . Não vejo nenhuma necessidade de colocar em outro lugar a funçãoOrderModifying() e passar quaisquer parâmetros para ela. Você precisa declararvariáveis sl e tp nesta função. int sl = 0, tp = 0;


No momento, eu tenho essa função comercial:

bool Trade (int signal)
{
  FindOrders();

  if(signal == SIGNAL_BUY)                                                          // Если сигнал на покупку и открытых ордеров нет..
    if(!OpenBuy())                                                                  // открываем лимитный ордер на покупку
      return(false);                                                                
      
  if(signal == SIGNAL_SELL)                                                       // Если сигнал на продажу и открытых ордеров нет..
     if(!OpenSell())
       return(false);                                                              // открываем лимитный ордер на продажу
  
  if(OrderStopLoss() == 0 && OrderTakeProfit() == 0)
    OrdersModifying();                                                             // Модифицируем ордер, добавим SL и TP
    
  if(UseBU == true)
     MovingStopLossToBU();                                                         // Перевод в б.у. по достижению некоторого значения TP

  return(true);
}

A modificação não ocorre.

 
hoz:


No momento, eu tenho essa função comercial:

A modificação não ocorre.


Você tem uma ordem não selecionada na função Comércio ().
 
rigonich:

Eu não entendo o que você quer do roteiro.


Você precisa de um programa, que, quando lançado nos gráficos de arquivo

As seções de movimentação de preços serão marcadas visualmente com os parâmetros especificados em termos de força e tempo da movimentação.

Por exemplo - uma correção de 400 pontos feita em 30 minutos. E assim, durante todo o ano, todas as correções dentro desta faixa.

É impossível observá-los visualmente manualmente. Distorções. Eu gostaria de ter um código de cores que permitisse vê-los imediatamente.

___

Já procurei, existem diferentes programas "Histoty". Mas eles apenas visualizam o histórico da conta.

Mas eu não encontrei um segmento do preço pelos filtros que especifiquei.

 
rigonich:

Você não tem uma ordem selecionada na função Comércio ().


Existe tal coisa. Aqui está a solução.

bool Trade (int signal)
{
  int total = OrdersTotal() - 1;
  
  FindOrders();

  if(signal == SIGNAL_BUY)                                                          // Если сигнал на покупку и открытых ордеров нет..
    if(!OpenBuy())                                                                  // открываем лимитный ордер на покупку
      return(false);                                                                
      
  if(signal == SIGNAL_SELL)                                                       // Если сигнал на продажу и открытых ордеров нет..
     if(!OpenSell())
       return(false);                                                              // открываем лимитный ордер на продажу
       
  for(int i=total; i>=0; i--)
  {
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
    {
      if(OrderStopLoss() == 0 || OrderTakeProfit() == 0)
        OrdersModifying();                                                             // Модифицируем ордер, добавим SL и TP
    }
  }    
 // if(UseBU == true)
   //  MovingStopLossToBU();                                                         // Перевод в б.у. по достижению некоторого значения TP

  return(true);
}

E a função de modificação é esta:

void OrdersModifying()
{
  int total = OrdersTotal() - 1;
  double sl = 0, tp = 0;
  
  for(int i=total; i>=0; i--)
  {
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) == true)                            // Если ордер есть и он выбран..
    {
      if(g_type == OP_BUY)
      {
        if(i_sl != 0)                                                                 // Если входной параметр стоп-лосса не равен 0, то..
           sl = NormalizeDouble(OrderOpenPrice() - i_sl*pt,Digits);                    // Получаем значение стоп-лосса для выбранного ордера
        if(i_tp != 0)                                                                 // Если входной параметр тейкпрофита не равен 0, то..
           tp = NormalizeDouble(OrderOpenPrice() + i_tp*pt,Digits);                    // Получаем значение тейкпрофита для выбранного ордера
      }
      if(g_type == OP_SELL)
      {
        if(i_sl != 0)                                                                 // Если входной параметр стоп-лосса не равен 0, то..
           sl = NormalizeDouble(OrderOpenPrice() + i_sl*pt,Digits);                // Получаем значение стоп-лосса для выбранного ордера
        if(i_tp != 0)                                                                 // Если входной параметр тейкпрофита не равен 0, то..
           tp = NormalizeDouble(OrderOpenPrice() - i_tp*pt,Digits);                // Получаем значение тейкпрофита для выбранного ордера
      }
      if(sl != 0 || tp != 0)                                                            // Если полученные значения sl и tp не равныы 0, то..
      {
        OrderModify(OrderTicket(),OrderOpenPrice(),sl,tp,OrderOpenTime() + 86400,Lime);      // Модифицируем ордер
      }
    }
  }
}

Estranho Mas não há paradas e assume a saída novamente.

 
TUNGUS:


Precisamos de um programa que, quando lançado nos gráficos de arquivo

As seções de movimento de preços serão marcadas visualmente com os parâmetros especificados em termos de força e tempo do movimento.

Por exemplo - uma correção de 400 pontos feita em 30 minutos. E assim, durante todo o ano, todas as correções dentro desta faixa.

É impossível observá-los visualmente manualmente. Distorções. Eu gostaria de ter um código de cores que permitisse vê-los imediatamente.

___

Já procurei, existem diferentes programas "Histoty". Mas eles apenas visualizam o histórico da conta.

Mas ainda não encontrei um segmento do preço pelos filtros que defini.


History, History_Draw - eles trabalham como Consultores Especialistas em testes.

Preciso de algo assim, para observar as correções na história pelos parâmetros dados.

 

Problema com Symbol() MT4:

2 funções a ilustrar:

string   SymbolOK()
{

   string   value;
   string   argument = "ANYTHING";

   if(false)
   {
      value = argument;
   }

   return(value);

}

string   SymbolPROBLEM()
{

   string   value;
   string   argument = Symbol();

   if(false)
   {
      value = argument;
   }

   return(value);

}

A execução da primeira produz um fio vazio:

int start()
{
   Comment(SymbolOK());
   return(0);
}

Mas a segunda função produz uma string ID "EURUSD" (bem, depende do gráfico, mas produz, embora de acordo com a lógica da função deva ser uma string vazia):

int start()
{
   Comment(SymbolPROBLEM());
   return(0);
}

Ajudar-me a entender o que está errado? Obrigado

 
rigonich:

Você não tem uma ordem selecionada na função Comércio ().

A propósito. Qual é a vantagem de selecionar uma ordem na função Trade()? Chamo a função OrderModifying() onde a ordem é selecionada e é modificada ali. Ou seja, a variante inicial estava correta!