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

 

Função GetTypeLastClosePos().

Esta função retorna o tipo da última posição fechada ou -1. Uma seleção mais precisa das posições a serem levadas em conta é definida por parâmetros externos:

  • sy - Nome do instrumento de mercado. Se este parâmetro for definido, a função considerará apenas as posições do instrumento especificado. O valor padrão "" significa qualquer instrumento de mercado. NULL significa o instrumento atual.
  • mn - identificador de posição, MagicNumber. O valor padrão -1 significa qualquer identificador.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает тип последней закрытой позиции или -1               |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
int GetTypeLastClosePos(string sy="", int mn=-1) {
  datetime t;
  int      i, k=OrdersHistoryTotal(), r=-1;

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if ((OrderSymbol()==sy || sy=="") && (mn<0 || OrderMagicNumber()==mn)) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (t<OrderCloseTime()) {
            t=OrderCloseTime();
            r=OrderType();
          }
        }
      }
    }
  }
  return(r);
}
ZS. Anexado um script para testar a função GetTypeLastClosePos().
Arquivos anexados:
 

Função GetTypeLastOpenPos().

Esta função retorna o tipo da última posição aberta ou -1. Uma seleção mais precisa das posições a serem levadas em conta é especificada por parâmetros externos:

  • sy - Nome do instrumento de mercado. Se você definir este parâmetro, a função considerará apenas as posições do instrumento especificado. O valor padrão "" significa qualquer instrumento de mercado. NULL significa o instrumento atual.
  • mn - identificador de posição, MagicNumber. O valor padrão -1 significa qualquer identificador.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает тип последней открытой позиции или -1               |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
int GetTypeLastOpenPos(string sy="", int mn=-1) {
  datetime t;
  int      i, k=OrdersTotal(), r=-1;

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy || sy=="") && (mn<0 || OrderMagicNumber()==mn)) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (t<OrderOpenTime()) {
            t=OrderOpenTime();
            r=OrderType();
          }
        }
      }
    }
  }
  return(r);
}
ZS. Anexado um script para testar a função GetTypeLastOpenPos().
Arquivos anexados:
 
KimIV:

Função OpenPosition() para on-line.

      if (err==128 || err==142 || err==143) {
        Sleep(1000*66.666);
        if (ExistPositions(sy, op, mn, ot)) {
          if (UseSound) PlaySound(NameFileSound); break;
        }
      

O que significam os códigos de erro 142 e 143.

Obrigado.

 
zennon:

O que significam os códigos de erro 142 e 143?

142 - O pedido foi enfileirado.

143 - O pedido foi aceito pelo revendedor para execução.

Para mais informações , veja aqui.

 

O documento aconselha a tratá-los como erro 128

se possível, uma ou duas palavras sobre isso, do seu ponto de vista ou posição.

 
kombat:

O documento aconselha a tratá-los como erro 128

Se possível, uma ou duas palavras sobre isso, do seu ponto de vista ou posição.

Meu ponto de vista está expresso no código dado por Andrei, dois posts acima.

 

Desculpe... viu, é claro...

É um pouco obscuro para mim.

Sleep(1000*66.666);

Fora isso, eu não sei... dormir...

Mas se e se for mais longe, não tanto.

ou seja, dormir, se houver uma posição, se jogarmos uma marcha.

-

OK, se é uma pergunta lamer, desculpe novamente, e pode ficar sem resposta.

 
kombat писал (а):
OK, se é uma pergunta lamer, peço desculpas novamente, e vou deixar por aí.

nah... vamos resolver isso... ...um showdown aprofunda a compreensão... Eu simplesmente não entendo o que você não entende. Colocar a questão em termos mais simples e convencionais. Você está confuso com o intervalo de hibernação? Por que exatamente 66 segundos?

 
KimIV:
Por que exatamente 66 segundos?

Não, isso não! Não há dúvidas sobre isso... absolutamente!

Mas a ação lógica seqüencial adicional neste fragmento não é tão boa assim.

Digamos que recebemos um código de erro, dormimos, depois recebemos um boolt, Spoin's Waltz toca se este recurso estiver ligado...

-

(porra, faltam os rabos das mensagens, têm que repetir :(((

-

Muito mais interessado em como continuar o que já foi iniciado!

Isto é, mais gestos comerciais: ou a função será chug

Ou a função vai chug até abrir, ou vai dar controle a outra...

No primeiro caso, não está claro como "loopar", como se chamar "si mesmo" ou o quê?

 

Hmm... Eu ainda não entendi. Vou atirar ao acaso. Tudo o que se segue se aplicará aos erros 128, 142 e 143.

Se o erro 128 não for tratado de forma alguma, você corre o risco de obter duas posições abertas idênticas em vez de uma. Em dois anos de negociação em duas contas reais, eu tive apenas um caso desses. As posições duplicadas ocorrem porque o servidor de negociação, por algum motivo, retornou uma mensagem ao terminal sobre a expiração do tempo de execução da ordem. O serviço não foi negado ao terminal. O comércio ainda pode ser executado. Sua execução acaba de sofrer um atraso "inaceitável" por um longo período de tempo. Se você enviar outra solicitação após esta mensagem, tanto a solicitação atrasada quanto a nova poderão ser executadas. Para evitar esta situação, os desenvolvedores o aconselham a parar por pelo menos um minuto e verificar se a solicitação sobre a qual o servidor comercial enviou a mensagem de atraso foi executada. Se SIM, atingimos nosso objetivo - a posição é aberta, se NÃO, podemos repetir o pedido. É assim que meu código lida com os erros 128, 142 e 143.

Razão: