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

 
MisterD:
Olá novamente, você pode me dizer onde há um erro no seguinte código?
Eu chamo o loop no momento de "deinit".
Ele apaga tudo, exceto a última ordem.
Eu acho que esta linha é muito provavelmente um erro >> para (int i=1; i<=OrdensTotal(); i++) <<
Entretanto, logicamente tudo parece estar correto... o que eu perdi?

Obrigado de antemão!


Faça o laço para trás

//-------------------------------------------------------------------------------------------
for (int i=OrdersTotal()-1; i>=0; i--)
{
   if (OrderSelect(i,SELECT_BY_POS)==true)
   {
      int Type=OrderType();
      if (OrderSymbol()!= Symbol() || Type <2)continue;
      int Ticket=OrderTicket();
      bool Modify =OrderDelete(Ticket);
      if (Modify == true) Alert ("Ордер Удалён");continue;
      if (Modify != true) Alert ("Удаление ордера не удалась");
   }
} 
//-------------------------------------------------------------------------------------------
 
MisterD:
Olá novamente, você pode me dizer onde há um erro no seguinte código?
Eu chamo o loop no momento de "deinit".
Ele apaga tudo, exceto a última ordem.
Eu acho que esta linha é muito provavelmente um erro >> para (int i=1; i<=OrdensTotal(); i++) <<
Entretanto, logicamente tudo parece estar correto... o que eu perdi?

Obrigado de antemão!

//-------------------------------------------------------------------------------------------
para (int i=1; i<=OrdensTotal(); i++)
{
se (OrderSelect(i-1,SELECT_BY_POS)==verdadeiro)
{
int Type=OrderType();
se (OrderSymbol()!= Symbol() || Tipo <2)continuar;
int Ticket=OrderTicket();
Bool Modify =OrderDelete(Ticket);
se (Modificar == verdadeiro) Alerta ("Order Deleted"); continuar;
se (Modificar != verdadeiro) Alerta ("Ordem apagada falhou");
continuar;
}
}
//-------------------------------------------------------------------------------------------


Experimente assim:

for(int i=OrdersTotal()-1;i>=0;i--) {
  if(OrderSelect(i,......................
 

Boa tarde. uma pequena ajuda é necessária. há uma função que fecha um dos lotes mais gordos em termos de lucro.

Preciso fazer um loop it.

Favor aconselhar como usar esta função, por exemplo, se meu patrimônio líquido da conta for superior a 5 pips, então esta função deve funcionar.

void ClosePosWithMaxProfitInCurrency(string sy="", int op=-1, int mn=-1) {
  double pr=0;
  int    i, k=OrdersTotal(), np=-1;

  if (sy=="0") sy=Symbol();
  for (i=k-1; i>=0; i--) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
        if (mn<0 || OrderMagicNumber()==mn) {
          if (pr<OrderProfit()+OrderSwap()) {
            pr=OrderProfit()+OrderSwap();
            np=i;
          }
        }
      }
    }
  }
  if (np>=0) {
    if (OrderSelect(np, SELECT_BY_POS, MODE_TRADES)) {
      ClosePosBySelect();
    }
  } 

}

 
sannin:

Boa tarde. uma pequena ajuda é necessária. há uma função que fecha um dos lotes mais gordos em termos de lucro.

Preciso fazer um loop it.

Por exemplo, se o patrimônio líquido da minha conta for superior a 5 pips, esta função deve funcionar.

Por exemplo, se o patrimônio líquido da conta for superior a 5 pips (para 4 caracteres) - no mercado real, se o número de ordens for superior a 3-4, elas facilmente se transformarão em menos (de acordo com os resultados da eliminação). :)))

P.S. Como eu vejo, você precisa de um código pronto, enquanto o algoritmo para resolver tal problema é inútil para você!

 
TarasBY:
5 pips (para 4 sinais) - no mercado real, se o número de ordens for maior que 3-4, ele se transformará facilmente (por resultados de eliminação) em menos. :)))


Eu, por exemplo... e tenho prestado atenção ao ouro ultimamente... ele não reage tão rápido quanto eu pensava que reagiria

Eu ainda não trabalhei com funções nesta forma ... então aqui está um pedido de apoio

 
Boa tarde, tenho um problema com o desenvolvimento do Expert Advisor, ele não fecha pedidos, embora as condições prescritas para fechamento por um indicador, por favor explique o que é, obrigado de antemão
Arquivos anexados:
 
sannin:


Bem, eu, por exemplo... e tenho prestado atenção ao ouro ultimamente... não é tão rápido quanto eu pensava que seria

Eu ainda não trabalhei com as funções nesta forma ... então aqui está um pedido de apoio

Primeiro, você calcula a linha BU de uma posição agregada para o instrumento (é usada para determinar as condições de fechamento de pedidos quando eles atingem rentabilidade em pips):

//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//|  Автор : TarasBY, taras_bulba@tut.by                                              |
//+-----------------------------------------------------------------------------------+
//|        Определение Уровня БезУбытка по символу                                    |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
double fGet_BreakEven (string fs_Symbol,     // Symbol
                       double fd_DeltaLots,  // разность объемов ордеров Buy и Sell
                       double fd_Profit)     // текущий профит по открытым ордера
{
    if (fd_DeltaLots == 0.) return (0.);
    double ld_BU = 0., ld_tickvalue = MarketInfo (fs_Symbol, MODE_TICKVALUE);   // цена одного пункта
//----
    //---- Уровень общего безубытка для открытых ордеров
    if (fd_DeltaLots > 0.) ld_BU = MarketInfo (fs_Symbol, MODE_BID) - (fd_Profit / (ld_tickvalue * fd_DeltaLots)) * MarketInfo (fs_Symbol, MODE_POINT);
    else if (fd_DeltaLots < 0.) ld_BU = MarketInfo (fs_Symbol, MODE_ASK) - (fd_Profit / (ld_tickvalue * fd_DeltaLots)) * MarketInfo (fs_Symbol, MODE_POINT);
//----
    return (ld_BU);
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+

Em seguida, calcular a diferença entre o preço atual e a linha de Breakeven. Se a "diferença" for satisfatória, procedemos ao procedimento de eliminação de pedidos. A primeira coisa a fazer é encontrar o Ticket da ordem mais rentável/perdedor:

//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//|  Автор : TarasBY, taras_bulba@tut.by                                              |
//+-----------------------------------------------------------------------------------+
//         Получаем Тикет самого прибыльного/убыточного ордера                        |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
int fGet_TicketWithControlProfit (string fs_Symbol = "",  // Инструмент
                                  int fi_Magic = -1,      // Magic
                                  int fi_Type = -1,       // OrderType
                                  int fi_TypeProfit = 0)  // Профитность ордера среди остальных ордеров:
                                                          // >= 0 -  с самым большим профитом;
                                                          // < 0 - самый убыточный
{
    double ld_Profit = 0., ld_curProfit;
    int    li_Total = OrdersTotal(), li_Ticket = -1;
//----
    if (fs_Symbol == "") fs_Symbol = Symbol();
    if (fi_TypeProfit < 0) ld_Profit = 10000000000.;
    for (int i = li_Total - 1; i >= 0; i--)
    {
        if (!OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) continue;
        if (OrderSymbol() != fs_Symbol) continue;
        if (fi_Magic > -1) if (OrderMagicNumber() != fi_Magic) continue;
        if (fi_Type > -1) if (OrderType() != fi_Type) continue;
        if (fi_Type > 1) continue;
        ld_curProfit = OrderProfit() + OrderSwap() + OrderCommission();
        if (fi_TypeProfit >= 0) {if (ld_Profit <= ld_curProfit) continue;}
        else if (ld_Profit >= ld_curProfit) continue;
        ld_Profit = ld_curProfit;
        li_Ticket = OrderTicket();
    }
//----
    return (li_Ticket);
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+

A eliminação pode ser feita em qualquer direção. Vamos apagar:

//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//|  Автор : TarasBY, taras_bulba@tut.by                                              |
//+-----------------------------------------------------------------------------------+
//|        Функция закрытия "своих" ордеров по признаку                               |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
int fClose_AllOrdersByProfit (string fs_Symbol = "",  // Инструмент
                              int fi_Magic = -1,      // Magic
                              int fi_Type = -1,       // OrderType
                              int fi_TypeProfit = 0)  // Направление закрытия ордеро по профитности:
                                                      // >= 0 - начиная от самого большого профита;
                                                      // < 0 - начиная от самого маленького профита;
{
    int li_Ticket = fGet_TicketWithControlProfit (fs_Symbol, fi_Magic, fi_Type, fi_TypeProfit),
        li_cnt = 0;
//----
    while (li_Ticket > 0)
    {
         //---- Здесь вставите свою процедуру закрытия 
         //---- что-то типа:
         //ClosePosByTicket (li_Ticket);
         li_Ticket = fGet_TicketWithControlProfit (fs_Symbol, fi_Magic, fi_Type, fi_TypeProfit);
         li_cnt++;
    }
//----
    return (li_cnt);
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+

Não é muito difícil montar mais a unidade certa: você terá que fazê-lo ou ir para o trabalho... :)

 
Quero atribuir um valor de preço a uma variável.

a=(NormalizeDouble(OrderOpenPrice(),5));


Mas por alguma razão, o preço é sacado com um valor de quatro dígitos a 1,3360

Você poderia me dizer o erro?
 
lottamer:
Quero atribuir um valor de preço a uma variável.



Mas por alguma razão, o preço é sacado com um valor de quatro dígitos a 1,3360

Você pode me dizer o erro?

Talvez o CD seja de quatro dígitos? Ou produzir o preço sem DoubleToStr(YourPrice,5)
 
Sepulca:

Talvez o CD seja de quatro dígitos? Ou exibir o preço sem DoubleToStr(YourPrice,5)


O CD tem cinco dígitos...

o que significa SEM DoubleToStr(YourPrice,5) ? eu não tenho DoubleToStr(YourPrice,5) em nenhum lugar