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

 

Olá Igor,

Você poderia me dizer qual operador substituir este em mql4 - OrderValue(cnt,VAL_TYPE)=OP_BUY (mql3).

Agradecemos antecipadamente.

 
Você pode aconselhar como fechar um pedido ao preço de fechamento do bar atual? Isto é, o bar fecha junto com o pedido.
 

Olá Igor.

Procurei em todas as funções e operadores - não consigo encontrar, e se existe uma, não consigo ver a função que modificaria todas as posições em aberto,

que modificaria todas as posições abertas de uma só vez, ao invés de uma posição selecionada a cada tique.

Se você não se importa, por favor, me aconselhe.

 
KimIV >> :

Nesta linha eu colocarei os códigos de minhas funções na MQL4, darei exemplos de seu uso e responderei perguntas relacionadas ao seu uso. Cada função será publicada em dois posts. O primeiro post conterá o código de função, o segundo - exemplos de uso e breves explicações. Às vezes eu anexarei o código de um script ao segundo post para realmente testar a função e exibir os resultados.

Começarei com funções para lidar com os pedidos de acordo com o pedido de Lukyanov no tópico "Como executar dois EAs ao mesmo tempo" no final.

Que a primeira função seja a função de ajuste de ordem (versão para o testador MT4):

Olá Igor, você está familiarizado com AlterTrader? Se sim, você poderia me dizer as respostas a 3 ou 4 das minhas perguntas?

 
ipm писал(а) >>
Igor. Bom dia.
Você pode desenhar um problema simples para você:
definir a que preço a linha de sinal atravessará MACD, ou em outras palavras, o histograma MACD se tornará igual a zero.

Olá Oleg!

Eu não resolvi tais problemas na prática. E teoricamente, tenho uma vaga idéia de como fazer isso. Provavelmente, os valores de makdac são tomados como x e o preço como x e então a função y=f(x) representará a dependência dos valores de makdac em relação ao preço. Se fosse assim tão simples, poderíamos inverter a função y=f(x) expressando x através de ypc x=F(y). Mas a dificuldade é que a função y=f(x) depende de mais de um x. Faltei a estas palestras na universidade :-)

 
Duke3D писал(а) >>

Olá Igor,

Você poderia me dizer qual operador substituir este em mql4 - OrderValue(cnt,VAL_TYPE)=OP_BUY (mql3).

Agradecemos antecipadamente.

Aparentemente, será OrderType().

 
mozg писал(а) >>
Você pode aconselhar como fechar o pedido ao preço de fechamento da barra atual? Ou seja, o bar fecha junto com o pedido.
static datetime prevTimeOpen=0
if ( prevTimeOpen>0 && prevTimeOpen<Time[0]) {
  for ( цикл перебора позиций) {
    if ( выбрана позиция, которую надо закрыть) {
      OrderClose(...);
    }
  }
}
prevTimeOpen=Time[0];
 
amur писал(а) >>

Olá Igor.

Procurei em todas as funções e operadores - não consigo encontrar, e se existe uma, não consigo ver a função que modificaria todas as posições em aberto,

que modificaria todas as posições abertas de uma só vez, ao invés de uma posição selecionada a cada tique.

Se você não se importa - por favor, avise.

Não creio que tais ações sejam apropriadas. Afinal de contas, cada posição geralmente tem parâmetros individuais. Então você seleciona um, específico...

E o que exatamente você quer modificar?

 

Função NameDayOfWeek()

Retorna o nome do dia da semana com base no número passado como parâmetro:

  • ndw - Número do dia da semana. Parâmetro necessário.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.09.2005                                                     |
//|  Описание : Возвращает наименование дня недели                             |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    ndw - номер дня недели                                                  |
//+----------------------------------------------------------------------------+
string NameDayOfWeek(int ndw) {
  if ( ndw==0) return("Воскресенье");
  if ( ndw==1) return("Понедельник");
  if ( ndw==2) return("Вторник");
  if ( ndw==3) return("Среда");
  if ( ndw==4) return("Четверг");
  if ( ndw==5) return("Пятница");
  if ( ndw==6) return("Суббота");
}
 

A função NormalizeLot().

Esta função retorna o valor normalizado do lote sendo negociado. Além da normalização, a função se ajusta ao tamanho do lote dentro dos limites especificados pelo centro de negociação (os valores mínimo e máximo do lote e a etapa de mudança de lote são verificados). A função NormalizeLot() aceita os seguintes parâmetros:

  • lo - NormalizarValor da lote. Parâmetro necessário.
  • ro - Método de arredondamento. Falso - para o lado menor, Verdadeiro - para o lado maior. Valor por defeito - Falso - para o lado inferior.
  • sy - Nome do instrumento comercial. NULL ou "" - símbolo atual. Valor padrão - "".
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 16.05.2008                                                     |
//|  Описание : Возвращает нормализованное значение торгуемого лота.           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    lo - нормализуемое значение лота.                                       |
//|    ro - способ округления          (   False    - в меньшую,               |
//|                                        True     - в большую сторону)       |
//|    sy - наименование инструмента   ("" или NULL - текущий символ)          |
//+----------------------------------------------------------------------------+
double NormalizeLot(double lo, bool ro= False, string sy="") {
  double l, k;
  if ( sy=="" || sy=="0") sy=Symbol();
  double ls=MarketInfo( sy, MODE_LOTSTEP);
  double ml=MarketInfo( sy, MODE_MINLOT);
  double mx=MarketInfo( sy, MODE_MAXLOT);

  if ( ml==0) ml=0.1;
  if ( mx==0) mx=100;

  if ( ls>0) k=1/ ls; else k=1/ ml;
  if ( ro) l=MathCeil( lo* k)/ k; else l=MathFloor( lo* k)/ k;

  if ( l< ml) l= ml;
  if ( l> mx) l= mx;

  return( l);
}

SZZ. Anexado um roteiro para testar a função NormalizeLot().

Arquivos anexados:
Razão: