Características úteis da KimIV - página 22

 
rid:

Agora eu coloquei uma função no comentário - Comentário (isCloseLastPosByStop());

Você está testando no testador? Se no testador, certamente poderá haver uma situação em que duas ou mais últimas posições fechadas não terão um OrderCloseTime() diferente.

 

Estou vendo. Se várias posições são fechadas simultaneamente no testador (de acordo com o sinal), então a funçãoCloseLastPosByStop() pode "falhar" e não funcionar ? Mas online parece funcionar.

Sim, - Eu verifiquei no testador agora quando trabalhava com uma posição. Tudo funciona corretamente! A função exibe corretamente em Comentário (isCloseLastPosByStop()) o fechamento por Stop Loss e muda a bandeira no tempo ao fechar por outro motivo.

 
rid писал (а):
Estou vendo. Se várias posições são fechadas no testador ao mesmo tempo, então a funçãoCloseLastPosByStop() pode "falhar" e não funcionar ?

Sim, porque isCloseLastPosByStop() identifica a última posição fechada pelo tempo máximo de fechamento, que é medido em segundos. Portanto, precisamos de mais de um segundo para passar entre o fechamento de múltiplas posições. No testador, menos de um segundo pode passar.

rid escreveu:
E online aparentemente funcionará.
Também pode haver falhas no modo online, mas com muito menos freqüência do que no testador. Até mesmo o robô comercial automático requer algum tempo para fechar posições. Se você tiver alguma idéia de como identificar de forma mais confiável a última posição fechada, então eu as aceitarei com gratidão e tentarei modificar a função.
 

Boa tarde, KimIV. Preciso de seus conselhos, ou melhor, de sua ajuda. Preciso da função start() para trabalhar não no sentido do tick, mas para funcionar a cada segundo, independentemente de um novo tick ter chegado ou não. Eis como eu tentei implementar esta tarefa:

int start()
  {
   if(first==true)return(0); 
   else 
   {   
      for(int j=0;j<10;j++)
         {
         RefreshRates();//обновляем котировки 

         //Код эксперта

         first=true;
         Sleep(1000);//задержка в 1 секунду
         j=0;
         }
   }
   return(0);
  }
 
StatBars писал (а):
Quero que a função start() funcione a cada segundo, independentemente de ter chegado ou não um novo tick.

Eu já fiz assim:

void start() {
  while (IsExpertEnabled() && !IsStopped()) {
    // код .............
    Sleep(1000);
  }
}
 

Muito obrigado!!!! Você ainda pode me dizer se meu código sequer funciona? Não no testador... Funciona no testador...? Ou eu tenho que...

Início inútil()...

 
StatBars писал (а):
Você também pode me dizer se meu código funciona de alguma forma?

Eu não sei... Eu não verifiquei...

StatBars escreveu (a):
Nãono testador... Será que vai funcionar na vida real...?

No testador, qualquer coisa em loop não funciona. Só os que têm carrapatos funcionam...

Em linha, seu código deve parecer funcionar. Pelo menos parece funcionar logicamente...

StatBars:

Ou você tem que...

Início inútil()...

Não, não é necessário. Por que declarar uma função datilografada se ela não retorna nenhum valor, e se retorna, esse valor não é usado de forma alguma?
 

Estou vendo. Mais uma vez, obrigado.

 
KimIV:
. Se você tiver alguma idéia de como identificar de forma mais confiável a última posição fechada, eu as aceitarei com gratidão e tentarei redesenhar a função.

Obrigado por sua amável oferta. Infelizmente, boas idéias não me vêm muitas vezes (infelizmente...) à cabeça! Não faz muito tempo, por exemplo, notei que suas funções quase não fazem uso do "componente" - OrderComment

Entretanto, talvez, a aplicação desta função lhe dê novas idéias (para o deleite de todos os presentes).

Por exemplo, se (OrderComment()==" [sl]" && .... - pode ampliar a gama de tarefas que você executa!

//---------------------------------------------------------------------------------

"Mais funções, - boas e diferentes" (c)

 
rid:
KimIV:
. Se você tiver alguma idéia de como identificar de forma mais confiável a última posição fechada, eu as aceitarei com gratidão e tentarei revisar a função.

Por exemplo, como se(OrderComment()==" [sl]" && .... - pode expandir a gama de tarefas a serem realizadas!

rid, você sugeriu uma maneira de identificar a parada acionada pela entrada nos comentários da ordem. Obrigado, mas pode haver outras entradas além da [sl] nos comentários.

Eu resolvo o mesmo problema comparando o preço de fechamento com o preço de parada.