Apenas "Recursos úteis do KimIV". - página 11

 
Tudo o que consegui foram estas funções, e decidi entender a lógica do programador. É por isso que eu estou fazendo perguntas. É para isso que serve este fórum.
 
satop:

Função DistMarketAndPos().

Aqui vamos nós! Aí vêm funções mais interessantes! Por exemplo, retorna a distância em pips entre o mercado e a posição mais próxima. A seleção mais precisa das posições a serem verificadas é definida por parâmetros externos:

  • sy - Nome do instrumento. Se este parâmetro for definido, a função só verificará as posições do instrumento especificado. O "" ou NULL significa o símbolo atual.
  • op - Operação comercial, tipo de posição. Valores válidos: OP_BUY, OP_SELL ou -1. O valor padrão -1 significa qualquer posição.
  • mn - Identificador de posição (MagicNumber). O valor padrão de -1 significa qualquer MagicNumber.


satop:

A função DistMarketAndPos().

Aqui vamos nós! Vamos a funções mais interessantes! Por exemplo, retorna a distância, em pontos, entre o mercado e a posição mais próxima. A seleção mais precisa das posições a serem verificadas é definida por parâmetros externos:

  • sy - Nome do instrumento. Se este parâmetro for definido, a função só verificará as posições do instrumento especificado. O "" ou NULL significa o símbolo atual.
  • op - Operação comercial, tipo de posição. Valores válidos: OP_BUY, OP_SELL ou -1. O valor padrão -1 significa qualquer posição.
  • mn - Identificador de posição (MagicNumber). O valor padrão -1 significa qualquer MagicNumber.


Eutento fazer com que funcione para frente e para trás e abrir ordens para frente e para trás. Tenho um erro, ajude-me a consertá-lo.

Exterior int TakeProfit = 150;

Lote duplo externo = 0,01;

MAGIC externo interno = 1234;

int start()

{

se (DistMarketAndPos()>150)

{

OrderSend(Symbol(),OP_BUY,Lot,Ask,3,0,Ask+TakeProfit*Point)

}

retorno(0);

}

int DistMarketAndPos(string sy="", int op=OP_BUY, int mn=-1)

{

duplo d, p;

int i, k=OrdersTotal(), r=1000000;


if (sy===""" || sy=="0") sy=Symbol();

p=MarketInfo(sy, MODE_POINT);

if (p==0) if (StringFind(sy, "")<0) p=0,00001; caso contrário p=0,01;

para (i=0; i<k; i++)

{

se(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

se ((OrderSymbol()==sy) && (op<0 || OrderType()==op))

{

se (mn<0 || OrderMagicNumber()==mn)

{

se (OrderType()==OP_BUY)

{

d=MathAbs(MarketInfo(sy, MODE_ASK)-OrderOpenPrice())/p;

se (r>d) r=NormalizarDuplo(d, 0);

}

se (OrderType()==OP_SELL)

{

d=MathAbs(OrderOpenPrice()-MarketInfo(sy, MODE_BID))/p;

se (r>d) r=NormalizarDuplo(d, 0);

}

}

}

}

}

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


se (DistMarketAndPos()>150)

{

OrderSend(Symbol(),OP_SELL,Lot,Ask,3,0,Ask-TakeProfit*Point);

}

retorno(0);


{

int DistMarketAndPos(string sy="", int op=OP_SELL, int mn=-1) //esta linha dá 1 erro,

// se esta linha for removida,

//é compila, mas então

//I não colocar op=OP_SELL,

// e, sem ele, o consultor especializado pensará,

// que a ordem a partir da qual você quer calcular

//distância é OP_BUY

if (sy===""" || sy=="0") sy=Symbol();

p=MarketInfo(sy, MODE_POINT);

if (p==0) if (StringFind(sy, "")<0) p=0,00001; caso contrário p=0,01;

para (i=0; i<k; i++)

{

se (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

se ((OrderSymbol()==sy) && (op<0 || OrderType()==op))

{

se (mn<0 || OrderMagicNumber()==mn)

{

se (OrderType()==OP_BUY)

{

d=MathAbs(MarketInfo(sy, MODE_ASK)-OrderOpenPrice())/p;

se (r>d) r=NormalizarDuplo(d, 0);

}

se (OrderType()==OP_SELL)

{

d=MathAbs(OrderOpenPrice()-MarketInfo(sy, MODE_BID))/p;

se (r>d) r=NormalizarDuplo(d, 0);

}

}

}

}

}

retorno(r);

retorno(r);

}

}

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

OBRIGADO

 
qwanya:


Estoutentando fazer com que funcione para frente e para trás e abrir pedidos para frente e para trás com ele. Tenho um bug do qual não consigo me livrar, por favor, me ajude a consertá-lo.

OBRIGADO


Você deveria tentar:

E com perguntas aqui...

extern  int     TakeProfit = 150;
extern  double  Lot        = 0.01;
extern  int     MAGIC=1234;
      
      
//=====================================================================
  int    start()
      {
     if (DistMarketAndPos(NULL,OP_BUY)>150)
            {                                     
            OrderSend(Symbol(),OP_BUY,Lot,Ask,3,0,Ask+TakeProfit*Point);
            }
          
     if (DistMarketAndPos(NULL,OP_SELL)>150)
            {                                     
         OrderSend(Symbol(),OP_SELL,Lot,Ask,3,0,Ask-TakeProfit*Point);   
            }            
       return(0);
       }
          
//========================================================================          
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает расстояние в пунктах между рынком и ближайшей       |
//|             позицей                                                        |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ("" или NULL - текущий символ)          |
//|    op - торговая операция          (    -1      - любая позиция)           |
//|    mn - MagicNumber                (    -1      - любой магик)             |
//+----------------------------------------------------------------------------+
int DistMarketAndPos(string sy="", int op=-1, int mn=-1) {
  double d, p;
  int i, k=OrdersTotal(), r=1000000;

  if (sy=="" || sy=="0") sy=Symbol();
  p=MarketInfo(sy, MODE_POINT);
  if (p==0) if (StringFind(sy, "JPY")<0) p=0.0001; else p=0.01;
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy) && (op<0 || OrderType()==op)) {
        if (mn<0 || OrderMagicNumber()==mn) {
          if (OrderType()==OP_BUY) {
            d=MathAbs(MarketInfo(sy, MODE_ASK)-OrderOpenPrice())/p;
            if (r>d) r=NormalizeDouble(d, 0);
          }
          if (OrderType()==OP_SELL) {
            d=MathAbs(OrderOpenPrice()-MarketInfo(sy, MODE_BID))/p;
            if (r>d) r=NormalizeDouble(d, 0);
          }
        }
      }
    }
  }
  return(r);
}
 
Por favor, deixe seus comentários no setor de origem. Door to source (Características úteis da KimIV).
 
Por favor, deixe seus comentários no setor de origem. Door to source (Características úteis da KimIV).
 
satop:

Função MovingInWL().

Alguém pode explicar por que você deve postar funções que não funcionam?

LevelWLoss' - identificador não declarado
'LevelProfit' - identificador não declarado
'ModifyOrder' - função não definida
'LevelWLoss' - identificador não declarado
'LevelProfit' - identificador não declarado
'ModifyOrder' - função não definida
6 erro(s), 0 aviso(s)

e isto dentro da própria função

 
DenisovOleg:

Alguém pode explicar por que você deve postar funções que não funcionam?

LevelWLoss' - identificador não declarado
'LevelProfit' - identificador não declarado
'ModifyOrder' - função não definida
'LevelWLoss' - identificador não declarado
'LevelProfit' - identificador não declarado
'ModifyOrder' - função não definida
6 erro(s), 0 aviso(s)

e isto está dentro da própria função

A função funciona, mas chama a função ModifyOrder, que deve ser adicionada ao código EA e também adicionar à EA as variáveis LevelWLoss e LevelProfit, algo como isto

Exterior int LevelProfit = 1000;

Exterior int LevelWLoss = 50;

 
Виктор
Iurii Tokman

Muito obrigado por este tópico do fórum. O maior agradecimento à lurii Tokman pelas características. Pessoalmente, estou quase pronto para equipará-lo ao Stroustrup.
Obrigado!

 
Iurii Tokman:

A função GetAmountLotFromOpenPos().

Esta função retorna a soma de muitas posições em aberto. 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 este parâmetro for definido, a função considerará apenas as posições do símbolo especificado. O valor padrão "" significa qualquer instrumento de mercado. NULL significa o instrumento atual.
  • op - Operação comercial, tipo de posição. Valores válidos: OP_BUY, OP_SELL ou -1. O valor padrão -1 significa qualquer posição.
  • mn - Identificador de posição, MagicNumber. O valor padrão -1 significa qualquer identificador.

Não retorna!!!

não importa como eu o faça, zeros ou " função de manuseio de eventos não encontrada 4.mq4 1 1
"

 
Aleksey Maryaskin:

Muito obrigado por este tópico do fórum. O maior agradecimento à lurii Tokman pelas características. Pessoalmente, estou quase pronto para equipará-lo ao Stroustrup.
Obrigado!

Não se esqueça de agradecer também ao autor das características.