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

 
Lista atualizada de funções
Arquivos anexados:
f_kimiv_1.rar  12 kb
 

Igor, você poderia me dizer se existe uma função que determina o valor mínimo em pips para colocar um pedido pendente?

Obrigado!

 
mozg писал(а) >>
Igor, você poderia me dizer se existe uma função que define o valor mínimo em pips para colocar um pedido pendente?
MarketInfo(Symbol(), MODE_STOPLEVEL);
 

Olá Igor! Você poderia escrever uma função que impeça a EA de reproduzir o sinal? Significa que o estado, depois de adicionar este bloco de código deve se parecer com o seguinte: comprar, vender, comprar, vender, comprar, vender.... etc....

 
Shniperson писал(а) >>

Olá Igor! Você poderia escrever uma função que impeça a EA de reproduzir o sinal? ... Ou seja, o estado, depois de adicionar este bloco de código deve se parecer com isto... comprar,vender,comprar,vender,comprar,vender.... etc....

baloiços...

//+----------------------------------------------------------------------------+
//|  Управление позициями.                                                     |
//+----------------------------------------------------------------------------+
void ManagePositions() {
  double sl=0, tp=0;
  int    bs= GetTradeSignal();

  if ( bs>0) {
    if ( ExistPositions(NULL, OP_SELL, Magic)) ClosePositions(NULL, OP_SELL, Magic);
    if (! ExistPositions(NULL, OP_BUY, Magic)) {
      if ( StopLoss  >0) sl=Ask- StopLoss  *Point; else sl=0;
      if ( TakeProfit>0) tp=Ask+ TakeProfit*Point; else tp=0;
      OpenPosition(NULL, OP_BUY, Lots, sl, tp, Magic);
    }
  }
  if ( bs<0) {
    if ( ExistPositions(NULL, OP_BUY, Magic)) ClosePositions(NULL, OP_BUY, Magic);
    if (! ExistPositions(NULL, OP_SELL, Magic)) {
      if ( StopLoss  >0) sl=Bid+ StopLoss  *Point; else sl=0;
      if ( TakeProfit>0) tp=Bid- TakeProfit*Point; else tp=0;
      OpenPosition(NULL, OP_SELL, Lots, sl, tp, Magic);
    }
  }
}
//+----------------------------------------------------------------------------+
//|  Возвращает торговый сигнал:                                               |
//|     1 - покупай                                                            |
//|     0 - сиди, кури бамбук                                                  |
//|    -1 - продавай                                                           |
//+----------------------------------------------------------------------------+
int GetTradeSignal() {
  int bs=0;

  if ( условия для покупки) bs=1;
  if ( условия для продажи) bs=-1;

  return( bs);
}

ExistPosições()

FecharPosições()

 

A função NormalizePreço().

Esta função retorna o valor do preço normalizado. A normalização é realizada utilizando os valores da função MarketInfo(MODE_TICKSIZE || MODE_DIGITS). A função NormalizePreço() toma os seguintes parâmetros:

  • np - Valor de lote normalizado. Parâmetro necessário.
  • sy - Nome do instrumento comercial. NULL ou "" - símbolo atual. Valor padrão - "".
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 21.08.2008                                                     |
//|  Описание : Возвращает нормализованное под размер тика значение цены.      |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    np - нормализуемое значение цены.                                       |
//|    sy - наименование инструмента        ("" или NULL - текущий символ)     |
//+----------------------------------------------------------------------------+
double NormalizePrice(double np, string sy="") {
  if ( sy=="" || sy=="0") sy=Symbol();
  double pp, ts=MarketInfo(Symbol(), MODE_TICKSIZE);
  int    di=MarketInfo(Symbol(), MODE_DIGITS);

  if ( ts>0) pp=NormalizeDouble( np/ ts, 0)* ts;
  else {
    if ( di>0) pp=NormalizeDouble( np* di, 0)/ di; else pp= np;
  }
  return( pp);
}

SZZ. Em anexo está um roteiro para testar a função NormalizePreço().

Arquivos anexados:
 

(Pergunta para principiantes).

Caro KimIV, escrevi uma função:

GetExtremumZZPrice().


double GetExtremumZZPrice(string sy="", int tf=0, int ne=0, int dp=12, int dv=5, int bs=3) {
  if (sy=="" || sy=="0") sy=Symbol();
  double zz;
  int    i, k=iBars(sy, tf), ke=0;

  for (i=1; i<k; i++) {
    zz=iCustom(sy, tf, "ZigZag", dp, dv, bs, 0, i);
    if (zz!=0) {
      ke++;
      if (ke>ne) return(zz);
    }
  }
  Print("GetExtremumZZPrice(): Экстремум ЗигЗага номер ",ne," не найден");
  return(0);
}
Que tipo de código deve ser usado para armazenar os preços do último mínimo e máximo em 2 variáveis ? ( minha mente está frita ;((())
 
WroC писал(а) >>
Que tipo de código deve ser usado para armazenar os preços do último mínimo e máximo em 2 variáveis ?
void start() {
  double p1= GetExtremumZZPrice("", 0, 0);
  double p2= GetExtremumZZPrice("", 0, 1);

  if ( p1> p2) Comment("Последний максимум ", p1, "\n Последний минимум ", p2);
  else Comment("Последний максимум ", p2, "\n Последний минимум ", p1);
}
 

KimIV

Obrigado!

 
Igor, olá!
Até onde sou capaz, tentei entender o material que vocês apresentaram. Para ser honesto, ainda não usei consultores ou roteiros especializados e não tenho nenhuma experiência prática com eles, mas preciso criar um roteiro que me ajude a fazer um grande número de pedidos.
A tarefa do script é facilitar a colocação de pedidos pendentes (principalmente Buy stop e Sell stop).
Ou seja, os parâmetros do roteiro são definidos da seguinte forma:
1. Nível a partir do qual os pedidos são feitos (por exemplo, EUR / USD Buy Stop a partir de 1.3000)
2. O tamanho de cada pedido (por exemplo, 0,01).
Etapa para fazer pedidos (por exemplo, 1 pip)
4. TP de cada pedido (por exemplo, 3 pips)
5. O número de ordens pendentes (por exemplo, 70) ou o nível até o qual as ordens pendentes devem ser colocadas (por exemplo, até 1,3070).
Parar a perda e os parâmetros de parada de rastreio no roteiro são desejáveis mas não necessários...
O script deve iniciar o computador a cada 3-4 horas, analisar a situação e decidir definir ordens para quebrar o intervalo para cima (ou para baixo), com um período de abertura de 1 pip, mas com um TP mínimo (3 pips). Assim, no caso de um movimento de preços para o lado necessário, estas ordens começarão a ser abertas e, se o preço necessário for alcançado, elas serão fechadas pela TP. Então uma variante é possível quando todos eles serão fechados em um TP - se o movimento de preços passar todos os pedidos ou uma parte dos pedidos (6 unidades) será aberta e será "menos". Neste caso, devemos definir a próxima "escada" de ordens na direção oposta com outros parâmetros (tamanho do lote, degrau, TP, número de ordens) que parecem ser os melhores para um comerciante.
Ao final de um dia de negociação "posições opostas" serão fechadas, deixando assim o trader com cerca de 6 ordens direcionadas para cima (ou para baixo).
Agradecemos antecipadamente a resposta dos especialistas!