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

 

Um exemplo de utilização da função GetPriceDiffInPoint().

Suponhamos que precisamos calcular o valor em pips e a direção do movimento da taxa entre a segunda e a primeira barras no gráfico atual. Suponha que o gráfico atual seja EURUSD H1. Chame a função GetPriceDiffInPoint() com parâmetros padrão:

Message(GetPriceDiffInPoint());

Aqui está o resultado:


A função GetPriceDiffInPoint() retornou -23 pontos. Vamos analisar como foi obtido. Para este fim, vamos traçar linhas verticais através das barras horárias 2, 1 e 0:


Vamos mudar para um tempo menor, por exemplo, M5 e marcar o intervalo das barras 2 e 1 com um único retângulo:

Agora podemos ver claramente que os primeiros no intervalo destacado foram dois máximos iguais de 1.4283, e só depois deles, no meio da segunda hora foi o mínimo de 1.4260. Assim concluímos que durante as últimas duas horas o EURUSD diminuiu e o valor desta diminuição foi (1,4283 - 1,4260) / 0,0001 = 23 pips.


P.S. Em anexo está o roteiro para testar a função GetPriceDiffInPoint().

Arquivos anexados:
 

Seleção fantástica, não há uma função para fechar um pedido (comprar ou vender) no primeiro fechamento bem sucedido de um bar em qualquer TF...

 

Posso perguntar que verificações são feitas antes da abertura dos pedidos?

Se eles forem coletados em uma função separada, por favor, me dê um link. Caso contrário, uma lista pode ser dada.

 
SK. писал (а) >>
Posso perguntar que verificações são feitas antes da abertura dos pedidos?

Sergei, não consigo pensar se sua pergunta é para mim ou não?

 
KimIV писал (а) >>

...

As funções, abertura, fechamento e modificação no manuseio de erros utilizam o comando Sleep. Fiz algumas pesquisas e recomendo a sua substituição por uma destas. A questão é que o valor da demora é uma recomendação, e não precisa ser estritamente esse valor. Com bastante freqüência, você pode realizar ações com uma ordem imediatamente (sem demora). Mas se você tem um requote, então não gosto do fato de que a Colômbia Britânica possa calcular quando e que tipo de operação vou realizar.

int start()
  {
//----
   Sleep_RND(20000);  
//----
   return(0);
  }
//+------------------------------------------------------------------+
void Sleep_RND(int _Pausa)
  {
   MathSrand(TimeLocal());
   MathRand();
   Sleep(MathRound(_Pausa*MathRand()/32767+_Pausa/5));
   return;
  }
 
KimIV писал (а) >>

Sergei, eu não sei se sua pergunta é para mim ou não.

Sim, Igor, é uma pergunta para você.

A questão é esta. Eu olhei para a função de abertura, não há verificações lá. Aparentemente, eles estão concentrados em alguma outra função. Se você tem tal função, por favor, me dê o link. Se você não vê tal função, você pode escrever uma lista de cheques aqui mesmo. Você pode fazer isso lentamente.

 

Não, Sergei, eu não faço mais checagens. Ou melhor, eu os coloco, mas não os coloco em funções separadas. Ou seja, coloquei alguns deles... Caramba, vou lhe dar um exemplo:

extern int StopLoss=30;
extern int TakeProfit=50;

double ll=GetSizeLot();
double po, pp, sl, tp;
if (ExistPositions(NULL, OP_BUY, Magic)) {
  po=PriceOpenLastPos(NULL, OP_BUY, Magic);
  if (!ExistOrders   (NULL, OP_SELLSTOP, Magic+1)
  &&  !ExistPositions(NULL, OP_SELL    , Magic+1)) {
    pp=po-offSet*Point;
    if (StopLoss>0) sl=pp+StopLoss*Point; else sl=0;
    if (TakeProfit>0) tp=pp-TakeProfit*Point; else tp=0;
    SetOrder(NULL, OP_SELLSTOP, ll, pp, sl, tp, Magic+3);
  }
}

O que vemos aqui?

1. Nós calculamos o lote a ser comercializado.

2. Se houver uma posição de compra com um número mágico especificado, seu preço aberto é definido po.

Se não houver pedido SellStop e posição SellStop com uma Magik por uma unidade maior que a especificada, definimos o pedido SellStop ao preço por pontos offSet mais baixos que o preço de abertura da posição Buy.

4. No intervalo, efetuamos o cálculo dos níveis de preços sl e tp.

 
KimIV писал (а) >>

4. No meio, calcular os níveis de preços sl e tp.

É isso que eu quero dizer. Temos que levar em conta as restrições existentes, que, de modo geral, mudam o tempo todo.

Existe alguma função que analise todas as restrições possíveis?

O mesmo para modificações.

--

(Tenho 16 funções - 3 para cada boa ordem (OP,SL,TP) e 2 para cada ordem de mercado (SL,TP),

e depois mais algumas análises de combinações de permissões).

 
SK. писал (а) >>
Existe alguma função que analise todos os tipos de restrições?
Ainda não... de alguma forma eu não precisava. Mas graças a você, eu pensei sobre isso e senti que deveria! >> Obrigado!
 

Função GetTypePrice()

Devolve o nome do tipo de preço. A função aceita apenas um parâmetro opcional. Valores válidos: PRICE_CLOSE, PRICE_OPEN, PRICE_HIGH, PRICE_LOW, PRICE_MEDIAN, PRICE_TYPICAL, PRICE_WEIGHTED. O valor padrão é 0 - PREÇO_CLOSE.

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.09.2005                                                     |
//|  Описание : Возвращает наименование типа цены.                             |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    Applied_Price - тип цены                                                |
//+----------------------------------------------------------------------------+
string GetTypePrice(int Applied_Price=0) {
  switch (Applied_Price) {
    case PRICE_CLOSE   : return("Close");
    case PRICE_OPEN    : return("Open");
    case PRICE_HIGH    : return("High");
    case PRICE_LOW     : return("Low");
    case PRICE_MEDIAN  : return("Median");
    case PRICE_TYPICAL : return("Typical");
    case PRICE_WEIGHTED: return("Weighted");
    default            : return("Unknown Type Price");
  }
}
Esta função é útil para comentar ou registrar o trabalho de indicadores, scripts e Expert Advisors, em particular, para exibir as explicações dos valores das constantes de preços.
Razão: