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).
[Deleted]  
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.