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 110

 
artmedia70:
Onde, nesta função, você lê o StopLoss do último fechado? Não há nada ali.

Está bem aqui. Diretamente apontado.
OrderSelect(1,SELECT_BY_POS,MODE_HISTORY);
      take=OrderTakeProfit();
       ts=take;
 
borilunad:
Vão dormir, todos! É sempre melhor pela manhã! É 1:00 da manhã! Boa noite! E a Artem já dormiu!

Há cinco dias eu faço o que você está fazendo e já comecei a pensar à noite. Boa noite.
 
Ooh! Erro 130 aparece no diário de bordo. Estas são as paradas erradas, não são? MAS a nova parada de perda é 1.3282. O limite de perda no momento atual é 1,3275 (este também é o preço de abertura do pedido) e a cotação atual é 1,3297. Onde está o erro?
 

Olá. Por que na variável pré-definida "Ponto", os zeros não estão definidos no log de teste de estratégia, no final, números redondos?

Пример:

static double lBUY;

lBUY=100*Point; //Так-же можно написать 10,20,180 или 520.

if(lBUY==0.01)

{

Alert("НУЛИ НЕ ПИШУТСЯ В КОНЦЕ Point ",lBUY);

}

 
artmedia70:
Eu sou siberiano, sim. Perto de Krasnoyarsk.


Sibiryak, então, quase, zamlYak)).
 
webip:

Mas eu tenho feito o que você está fazendo há cinco dias e já comecei a pensar à noite.

É mais fácil dizer quem não pensa à noite, se for ao contrário. Eu tenho a mesma situação. Além disso, ninguém me incomoda durante a noite. A propósito, li uma vez que, tipo, o cérebro pensa melhor à noite. É como se os cientistas descobrissem...
 
semiromid:

Olá. Por que na variável pré-definida "Ponto", os zeros não estão definidos no log de teste de estratégia, no final, números redondos?

Пример:

static double lBUY;

lBUY=100*Point; //Так-же можно написать 10,20,180 или 520.

if(lBUY==0.01)

{

Alert("НУЛИ НЕ ПИШУТСЯ В КОНЦЕ Point ",lBUY);

}



E o que o Alert realmente produz?
 
artmedia70:
DoubleToStr(número,dígito) é para você


Muito obrigado! Eu precisava dele para comparar as características das velas (mais, menos, etc.) Eu o parafusei - ele funciona. Só não consegue entender como compara o tipo de string de dados? ou o dobro para string não traduz número para string? :-D


PS. Não funciona em indicador - apenas em roteiro... Quando eu chamar Alto[i] - somente 4 casas decimais aparecerão.

Estou escrevendo:

Alerta ("doubletostr High = ", DoubleToStr(High[1],5));
if (DoubleToStr(High[2],5)>(DoubleToStr(High[3],5))
{
Alerta ("Mais");
}
if (DoubleToStr(High[2],5)<(DoubleToStr(High[3],5))
{
Alerta ("Menor");

}

Trabalha, ele escreve o resultado com cinco dígitos, sobre/subcontagens. O problema é que no indicador o conjunto de cordas não aparece no gráfico. Portanto...

...escrita:

Alerta ("Duplo Alto Normalizado = ", NormalizeDuplo(Alto[1],5));

Não funciona - o resultado é > 1.1234

Eu não entendo os desenvolvedores - por que eles tinham que complicar tanto as coisas? Por que se mostrar tantos dígitos na tabela, não vai riscar a função chamada com cinco dígitos? Talvez haja uma solução simples?

 

Estou lutando com uma função que deveria retornar True se a última posição no mercado fosse fechada com lucro, e False se não fosse fechada com prejuízo. Se esta função retornar True, então todas as posições (tanto as pendentes como as de mercado) são fechadas.

Eis o que saiu:

//+-------------------------------------------------------------------------------------+
//| Получаем состояние последней позиции (Открыта или закрыта)                          |
//+-------------------------------------------------------------------------------------+
bool isCloseByTakeLastOpenPos(int delta)
{
   datetime lastOrderCloseTime = 0,               // Время закрытия последнего открытого ордера
            lastOOTHist = -1;                     // Время открытия последнего открытого ордера из истории
   
   for (int i=OrdersHistoryTotal()-1; i>=0; i--)
   {
      if (!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) continue;
      if (OrderMagicNumber() != i_magic) continue;
      if (OrderSymbol() != Symbol()) continue;
      if (OrderType() > 1) continue;               // Все удалённые отложки нас не интересуют..
  
      if (lastOrderCloseTime < OrderCloseTime())   // Находим время закрытия..
      {
         lastOrderCloseTime = OrderCloseTime();   // ..последней закрытой позиции в истории
         int j = i;
      }
   }
  if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY))
   {
      if (OrderProfit() + OrderCommission() + OrderSwap() <= 0) return (false);
      if (MathAbs(OrderProfit() - OrderClosePrice()) > delta * pt) return (false);
      else
      {
         lastOOTHist = OrderOpenTime();
         Comment("FUNC isCloseByTakeLastOpenPos : lastOOTHist = ", lastOOTHist);
      }
   }
   else
   {
     // Comment("FUNC isCloseByTakeLastOpenPos : не удалось выбрать ордер в истории");
      Print("FUNC isCloseByTakeLastOpenPos : не удалось выбрать ордер в истории");
      return(false);
   }
  
   for(int h=OrdersTotal()-1; h>=0; h--)
   {
      if (OrderSelect(h, SELECT_BY_POS, MODE_TRADES))
      {
         if (OrderMagicNumber() != i_magic)   continue;
         if (OrderSymbol() != Symbol())       continue;
         if (OrderType() > 1)                 continue;
         if (lastOOTHist < OrderOpenTime()) return(false);  // Выбранная рыночная позиция открыта позже закрытой по тейку
      }
      else {Print("FUNC isCloseByTakeLastOpenPos : не удалось выбрать рыночный ордер");return(false);}
   }
   
   return (true);
}

Artyom acima sugeriu onde eu tinha um bug. Eu o reescrevi para mim. Ainda não é a variante final, mas... já está bastante clara. Depois de dirigir o Expert Advisor, percebi imediatamente que as posições restantes não estavam fechadas e não estão sendo fechadas de forma alguma. Comecei a desenterrar qual era a razão. Eu recomendei um par de funções e percebi que está neste bloco:

 if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY))
   {
      if (OrderProfit() + OrderCommission() + OrderSwap() <= 0) return (false);
      if (MathAbs(OrderProfit() - OrderClosePrice()) > delta * pt) return (false);
      else
      {
         lastOOTHist = OrderOpenTime();
         Comment("FUNC isCloseByTakeLastOpenPos : lastOOTHist = ", lastOOTHist);
      }
   }
   else
   {
      Comment("FUNC isCloseByTakeLastOpenPos : не удалось выбрать ордер в истории");
      Print("FUNC isCloseByTakeLastOpenPos : не удалось выбрать ордер в истории");
      return(false);
   }

O comentário é acionado o tempo todo, exatamente:

Comment("FUNC isCloseByTakeLastOpenPos : не удалось выбрать ордер в истории");

Eu o comentei, dirigi. Percebeu-se que este comentário:

Comment("FUNC isCloseByTakeLastOpenPos : lastOOTHist = ", lastOOTHist);

Nunca aciona de forma alguma, mesmo quando há uma posição fechada por último. O que poderia estar errado?

Meus pensamentos, embora possa estar errado... Talvez você precise colocar este bloco

 if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY))
   {
      if (OrderProfit() + OrderCommission() + OrderSwap() <= 0) return (false);
      if (MathAbs(OrderProfit() - OrderClosePrice()) > delta * pt) return (false);
      else
      {
         lastOOTHist = OrderOpenTime();
         Comment("FUNC isCloseByTakeLastOpenPos : lastOOTHist = ", lastOOTHist);
      }
   }
   else
   {
     // Comment("FUNC isCloseByTakeLastOpenPos : не удалось выбрать ордер в истории");
      Print("FUNC isCloseByTakeLastOpenPos : не удалось выбрать ордер в истории");
      return(false);
   }

colocá-lo também no loop? Caso contrário, quem sabe em que direção o transbordo irá. A variável j conterá o número do índice da posição e não está explicitamente especificada em que direção a busca irá.

 
hoz:

Estou lutando com uma função que deveria retornar True se a última posição no mercado fosse fechada com lucro, e False se não fosse fechada com prejuízo. Se esta função retornar True, então todas as posições (tanto as pendentes como as de mercado) são fechadas.

Eis o que saiu:

Artyom acima sugeriu onde eu tinha um bug. Eu o reescrevi para mim. Ainda não é a variante final, mas... já está bastante clara. Depois de dirigir o Expert Advisor, percebi imediatamente que as posições restantes não estavam fechadas e não estão sendo fechadas de forma alguma. Comecei a desenterrar qual era a razão. Eu recomendei algumas funções e percebi que a razão está neste bloco:

O comentário é acionado o tempo todo, exatamente:

Eu o comentei, dirigi. Percebeu-se que este comentário:

Nunca aciona de forma alguma, mesmo quando há uma posição fechada por último. O que poderia estar errado?

Meus pensamentos, embora possa estar errado... Talvez você precise colocar este bloco

colocá-lo também no loop? Caso contrário, quem sabe em que direção o transbordo irá. A variável j conterá o número do índice da posição e não está explicitamente especificada em que direção a busca irá.

A variável j deve ser explicitamente inicializada no início da função com um valor negativo. Experimente. Eu ainda não procurei mais.